kslazarev/numbers_and_words

View on GitHub
lib/numbers_and_words/strategies/figures_converter/options/en/ordinal.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

module NumbersAndWords
  module Strategies
    module FiguresConverter
      module Options
        module En
          class Ordinal < Base::Ordinal
            ZERO_TYPE = :zero
            HUNDRED_TYPE = :hundreds
            MEGS_TYPE = :megs

            def result(type)
              @type = type
              type == MEGS_TYPE ? check_megs_numbers : check_simple_numbers
            end

            private

            def check_simple_numbers
              :ordinal if simple_numbers_condition && active?
            end

            def check_megs_numbers
              :ordinal if megs_numbers_condition && active?
            end

            def simple_numbers_condition
              current_capacity.nil? &&
                (@type != HUNDRED_TYPE ||
                 (@type == HUNDRED_TYPE && simple_number_to_words.empty?))
            end

            def megs_numbers_condition
              current_capacity == language_figures.ordinal_capacity
            end

            def simple_number_to_words
              @strategy.language.simple_number_to_words
            end

            def current_capacity
              @strategy.language.current_capacity
            end

            def language_figures
              @strategy.language.parent_figures
            end
          end
        end
      end
    end
  end
end