diff --git a/lib/numbers_and_words/strategies/figures_converter/languages/es.rb b/lib/numbers_and_words/strategies/figures_converter/languages/es.rb index df9a2871..7cd05788 100644 --- a/lib/numbers_and_words/strategies/figures_converter/languages/es.rb +++ b/lib/numbers_and_words/strategies/figures_converter/languages/es.rb @@ -20,14 +20,10 @@ def ones end def tens_with_ones - if @figures.tens == 2 - @translations - .twenties_with_ones(@figures, gender: gender, - is_apocopated: one_apocopated?) - else - super({ gender: gender, - is_apocopated: one_apocopated? }) - end + options = { gender: gender, is_apocopated: one_apocopated? } + return @translations.twenties_with_ones(@figures, options) if @figures.tens == 2 + + super(options) end def hundreds diff --git a/lib/numbers_and_words/strategies/figures_converter/languages/pt-BR.rb b/lib/numbers_and_words/strategies/figures_converter/languages/pt-BR.rb index c1c320ae..60a52cd8 100644 --- a/lib/numbers_and_words/strategies/figures_converter/languages/pt-BR.rb +++ b/lib/numbers_and_words/strategies/figures_converter/languages/pt-BR.rb @@ -78,7 +78,10 @@ def opaque? end def one_thousand? - current_capacity == 1 && figures[0] == 1 && figures.hundreds.nil? && figures.tens.nil? + current_capacity == 1 && + figures.ones == 1 && + figures.tens.nil? && + figures.hundreds.nil? end def without_connector? diff --git a/lib/numbers_and_words/strategies/figures_converter/options.rb b/lib/numbers_and_words/strategies/figures_converter/options.rb index 7355558d..954d4347 100644 --- a/lib/numbers_and_words/strategies/figures_converter/options.rb +++ b/lib/numbers_and_words/strategies/figures_converter/options.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true +require 'numbers_and_words/strategies/figures_converter/options/base' require 'numbers_and_words/strategies/figures_converter/options/en' require 'numbers_and_words/strategies/figures_converter/options/en-GB' require 'numbers_and_words/strategies/figures_converter/options/es' diff --git a/lib/numbers_and_words/strategies/figures_converter/options/base.rb b/lib/numbers_and_words/strategies/figures_converter/options/base.rb new file mode 100644 index 00000000..b600c882 --- /dev/null +++ b/lib/numbers_and_words/strategies/figures_converter/options/base.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +require 'numbers_and_words/strategies/figures_converter/options/base/gender' +require 'numbers_and_words/strategies/figures_converter/options/base/ordinal' +require 'numbers_and_words/strategies/figures_converter/options/base/remove_zero' diff --git a/lib/numbers_and_words/strategies/figures_converter/options/base/gender.rb b/lib/numbers_and_words/strategies/figures_converter/options/base/gender.rb new file mode 100644 index 00000000..451a935e --- /dev/null +++ b/lib/numbers_and_words/strategies/figures_converter/options/base/gender.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +module NumbersAndWords + module Strategies + module FiguresConverter + module Options + module Base + class Gender + attr_accessor :strategy, :options + + def initialize(proxy, *_args) + @strategy = proxy.strategy + @options = proxy.options + end + + def result + active? ? @options[:gender].to_sym : :male + end + + private + + def active? + @options[:gender] + end + end + end + end + end + end +end diff --git a/lib/numbers_and_words/strategies/figures_converter/options/base/ordinal.rb b/lib/numbers_and_words/strategies/figures_converter/options/base/ordinal.rb new file mode 100644 index 00000000..a37c11f4 --- /dev/null +++ b/lib/numbers_and_words/strategies/figures_converter/options/base/ordinal.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +module NumbersAndWords + module Strategies + module FiguresConverter + module Options + module Base + class Ordinal + def initialize(proxy, *_args) + @strategy = proxy.strategy + @options = proxy.options + end + + def result + return :ordinal if active? + end + + private + + def active? + @options[:ordinal] + end + end + end + end + end + end +end diff --git a/lib/numbers_and_words/strategies/figures_converter/options/base/remove_zero.rb b/lib/numbers_and_words/strategies/figures_converter/options/base/remove_zero.rb new file mode 100644 index 00000000..ad12e6c6 --- /dev/null +++ b/lib/numbers_and_words/strategies/figures_converter/options/base/remove_zero.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +module NumbersAndWords + module Strategies + module FiguresConverter + module Options + module Base + class RemoveZero + attr_accessor :strategy, :options + + def initialize(proxy, *_args) + @strategy = proxy.strategy + @options = proxy.options + end + + def result + active? + end + + private + + def active? + @options[:remove_zero] + end + end + end + end + end + end +end diff --git a/lib/numbers_and_words/strategies/figures_converter/options/cs/gender.rb b/lib/numbers_and_words/strategies/figures_converter/options/cs/gender.rb index e7143b94..3fc82894 100644 --- a/lib/numbers_and_words/strategies/figures_converter/options/cs/gender.rb +++ b/lib/numbers_and_words/strategies/figures_converter/options/cs/gender.rb @@ -5,23 +5,10 @@ module Strategies module FiguresConverter module Options module Cs - class Gender - attr_accessor :strategy, :options - - def initialize(proxy, *_args) - @strategy = proxy.strategy - @options = proxy.options - end - + class Gender < Base::Gender def result active? ? @options[:gender].to_sym : :female end - - private - - def active? - @options[:gender] - end end end end diff --git a/lib/numbers_and_words/strategies/figures_converter/options/cs/ordinal.rb b/lib/numbers_and_words/strategies/figures_converter/options/cs/ordinal.rb index 32336fae..5263f0ec 100644 --- a/lib/numbers_and_words/strategies/figures_converter/options/cs/ordinal.rb +++ b/lib/numbers_and_words/strategies/figures_converter/options/cs/ordinal.rb @@ -5,21 +5,7 @@ module Strategies module FiguresConverter module Options module Cs - class Ordinal - def initialize(proxy, *_args) - @strategy = proxy.strategy - @options = proxy.options - end - - def result - return :ordinal if active? - end - - private - - def active? - @options[:ordinal] - end + class Ordinal < Base::Ordinal end end end diff --git a/lib/numbers_and_words/strategies/figures_converter/options/cs/remove_zero.rb b/lib/numbers_and_words/strategies/figures_converter/options/cs/remove_zero.rb index f997b795..38461fa4 100644 --- a/lib/numbers_and_words/strategies/figures_converter/options/cs/remove_zero.rb +++ b/lib/numbers_and_words/strategies/figures_converter/options/cs/remove_zero.rb @@ -5,23 +5,7 @@ module Strategies module FiguresConverter module Options module Cs - class RemoveZero - attr_accessor :strategy, :options - - def initialize(proxy, *_args) - @strategy = proxy.strategy - @options = proxy.options - end - - def result - active? - end - - private - - def active? - @options[:remove_zero] - end + class RemoveZero < Base::RemoveZero end end end diff --git a/lib/numbers_and_words/strategies/figures_converter/options/en/ordinal.rb b/lib/numbers_and_words/strategies/figures_converter/options/en/ordinal.rb index 0ad3b93f..a3a0e42e 100644 --- a/lib/numbers_and_words/strategies/figures_converter/options/en/ordinal.rb +++ b/lib/numbers_and_words/strategies/figures_converter/options/en/ordinal.rb @@ -5,16 +5,11 @@ module Strategies module FiguresConverter module Options module En - class Ordinal + class Ordinal < Base::Ordinal ZERO_TYPE = :zero HUNDRED_TYPE = :hundreds MEGS_TYPE = :megs - def initialize(proxy, *_args) - @strategy = proxy.strategy - @options = proxy.options - end - def result(type) @type = type MEGS_TYPE != type ? check_simple_numbers : check_megs_numbers @@ -22,10 +17,6 @@ def result(type) private - def active? - @options[:ordinal] - end - def check_simple_numbers :ordinal if simple_numbers_condition && active? end diff --git a/lib/numbers_and_words/strategies/figures_converter/options/en/remove_zero.rb b/lib/numbers_and_words/strategies/figures_converter/options/en/remove_zero.rb index f03dee9c..2bf95780 100644 --- a/lib/numbers_and_words/strategies/figures_converter/options/en/remove_zero.rb +++ b/lib/numbers_and_words/strategies/figures_converter/options/en/remove_zero.rb @@ -5,23 +5,7 @@ module Strategies module FiguresConverter module Options module En - class RemoveZero - attr_accessor :strategy, :options - - def initialize(proxy, *_args) - @strategy = proxy.strategy - @options = proxy.options - end - - def result - active? - end - - private - - def active? - @options[:remove_zero] - end + class RemoveZero < Base::RemoveZero end end end diff --git a/lib/numbers_and_words/strategies/figures_converter/options/es/gender.rb b/lib/numbers_and_words/strategies/figures_converter/options/es/gender.rb index 4756cc35..99a9706a 100644 --- a/lib/numbers_and_words/strategies/figures_converter/options/es/gender.rb +++ b/lib/numbers_and_words/strategies/figures_converter/options/es/gender.rb @@ -5,23 +5,7 @@ module Strategies module FiguresConverter module Options module Es - class Gender - attr_accessor :strategy, :options - - def initialize(proxy, *_args) - @strategy = proxy.strategy - @options = proxy.options - end - - def result - active? ? @options[:gender].to_sym : :male - end - - private - - def active? - @options[:gender] - end + class Gender < Base::Gender end end end diff --git a/lib/numbers_and_words/strategies/figures_converter/options/es/remove_zero.rb b/lib/numbers_and_words/strategies/figures_converter/options/es/remove_zero.rb index d7d18f78..3a68c7eb 100644 --- a/lib/numbers_and_words/strategies/figures_converter/options/es/remove_zero.rb +++ b/lib/numbers_and_words/strategies/figures_converter/options/es/remove_zero.rb @@ -5,23 +5,7 @@ module Strategies module FiguresConverter module Options module Es - class RemoveZero - attr_accessor :strategy, :options - - def initialize(proxy, *_args) - @strategy = proxy.strategy - @options = proxy.options - end - - def result - active? - end - - private - - def active? - @options[:remove_zero] - end + class RemoveZero < Base::RemoveZero end end end diff --git a/lib/numbers_and_words/strategies/figures_converter/options/hu/ordinal.rb b/lib/numbers_and_words/strategies/figures_converter/options/hu/ordinal.rb index 9eb6029f..25f8bdf9 100644 --- a/lib/numbers_and_words/strategies/figures_converter/options/hu/ordinal.rb +++ b/lib/numbers_and_words/strategies/figures_converter/options/hu/ordinal.rb @@ -5,56 +5,7 @@ module Strategies module FiguresConverter module Options module Hu - class Ordinal - ZERO_TYPE = :zero - HUNDRED_TYPE = :hundreds - MEGS_TYPE = :megs - - def initialize(proxy, *_args) - @strategy = proxy.strategy - @options = proxy.options - end - - def result(type) - @type = type - MEGS_TYPE != type ? check_simple_numbers : check_megs_numbers - end - - private - - def active? - @options[:ordinal] - end - - 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? && - (HUNDRED_TYPE != @type || - HUNDRED_TYPE == @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 + class Ordinal < En::Ordinal end end end diff --git a/lib/numbers_and_words/strategies/figures_converter/options/pt-BR/gender.rb b/lib/numbers_and_words/strategies/figures_converter/options/pt-BR/gender.rb index 4bbb17c2..f45f5023 100644 --- a/lib/numbers_and_words/strategies/figures_converter/options/pt-BR/gender.rb +++ b/lib/numbers_and_words/strategies/figures_converter/options/pt-BR/gender.rb @@ -5,24 +5,7 @@ module Strategies module FiguresConverter module Options module PtBr - class Gender - attr_accessor :strategy, :options - - def initialize(proxy, *_args) - @strategy = proxy.strategy - @options = proxy.options - end - - def result - gender = active? ? @options[:gender].to_sym : :male - %i[male female].include?(gender) ? gender : :male - end - - private - - def active? - @options[:gender] - end + class Gender < Base::Gender end end end diff --git a/lib/numbers_and_words/strategies/figures_converter/options/pt-BR/ordinal.rb b/lib/numbers_and_words/strategies/figures_converter/options/pt-BR/ordinal.rb index 8fb36a30..cf2d51c4 100644 --- a/lib/numbers_and_words/strategies/figures_converter/options/pt-BR/ordinal.rb +++ b/lib/numbers_and_words/strategies/figures_converter/options/pt-BR/ordinal.rb @@ -5,21 +5,7 @@ module Strategies module FiguresConverter module Options module PtBr - class Ordinal - def initialize(proxy, *_args) - @strategy = proxy.strategy - @options = proxy.options - end - - def result - return :ordinal if active? - end - - private - - def active? - @options[:ordinal] - end + class Ordinal < Base::Ordinal end end end diff --git a/lib/numbers_and_words/strategies/figures_converter/options/pt-BR/remove_zero.rb b/lib/numbers_and_words/strategies/figures_converter/options/pt-BR/remove_zero.rb index b33b8cb5..0770237a 100644 --- a/lib/numbers_and_words/strategies/figures_converter/options/pt-BR/remove_zero.rb +++ b/lib/numbers_and_words/strategies/figures_converter/options/pt-BR/remove_zero.rb @@ -5,23 +5,7 @@ module Strategies module FiguresConverter module Options module PtBr - class RemoveZero - attr_accessor :strategy, :options - - def initialize(proxy, *_args) - @strategy = proxy.strategy - @options = proxy.options - end - - def result - active? - end - - private - - def active? - @options[:remove_zero] - end + class RemoveZero < Base::RemoveZero end end end diff --git a/lib/numbers_and_words/strategies/figures_converter/options/ru/gender.rb b/lib/numbers_and_words/strategies/figures_converter/options/ru/gender.rb index ac30961b..b0482064 100644 --- a/lib/numbers_and_words/strategies/figures_converter/options/ru/gender.rb +++ b/lib/numbers_and_words/strategies/figures_converter/options/ru/gender.rb @@ -5,23 +5,7 @@ module Strategies module FiguresConverter module Options module Ru - class Gender - attr_accessor :strategy, :options - - def initialize(proxy, *_args) - @strategy = proxy.strategy - @options = proxy.options - end - - def result - active? ? @options[:gender].to_sym : :male - end - - private - - def active? - @options[:gender] - end + class Gender < Base::Gender end end end diff --git a/lib/numbers_and_words/strategies/figures_converter/options/ua/gender.rb b/lib/numbers_and_words/strategies/figures_converter/options/ua/gender.rb index 6dabbfec..274fd211 100644 --- a/lib/numbers_and_words/strategies/figures_converter/options/ua/gender.rb +++ b/lib/numbers_and_words/strategies/figures_converter/options/ua/gender.rb @@ -5,23 +5,7 @@ module Strategies module FiguresConverter module Options module Ua - class Gender - attr_accessor :strategy, :options - - def initialize(proxy, *_args) - @strategy = proxy.strategy - @options = proxy.options - end - - def result - active? ? @options[:gender].to_sym : :male - end - - private - - def active? - @options[:gender] - end + class Gender < Base::Gender end end end diff --git a/lib/numbers_and_words/translations/es.rb b/lib/numbers_and_words/translations/es.rb index f07ce1dd..3786c6dc 100644 --- a/lib/numbers_and_words/translations/es.rb +++ b/lib/numbers_and_words/translations/es.rb @@ -7,13 +7,13 @@ class Es < Base include NumbersAndWords::Translations::Extensions::FractionSignificance def zero(_options = {}) - t(%i[ones male].join('.'))[0] + t('ones.male')[0] end def ones(number, options = {}) return if options[:is_one_thousand] - return t(%i[ones apocopated].join('.')) if number == 1 && - options[:is_apocopated] + return t('ones.apocopated') if number == 1 && + options[:is_apocopated] t([:ones, options[:gender]].join('.'))[number] end @@ -23,13 +23,13 @@ def tens_with_ones(numbers, options = {}) end def twenties_with_ones(numbers, options = {}) - return t(%i[twenties apocopated].join('.')) if options[:is_apocopated] + return t('twenties.apocopated') if options[:is_apocopated] t([:twenties, options[:gender]].join('.'))[numbers[0]] end def hundreds(number, options = {}) - return t(%i[hundreds apocopated].join('.')) if options[:is_apocopated] + return t('hundreds.apocopated') if options[:is_apocopated] t([:hundreds, options[:gender]].join('.'))[number] end diff --git a/lib/numbers_and_words/translations/pt-BR.rb b/lib/numbers_and_words/translations/pt-BR.rb index 787e3b99..7c86f75d 100644 --- a/lib/numbers_and_words/translations/pt-BR.rb +++ b/lib/numbers_and_words/translations/pt-BR.rb @@ -27,14 +27,14 @@ def tens(number, options = {}) end def teens(number, options = {}) - return [tens(1, options), ' ', ones(number[0], options)].join if ordinal? options + return [tens(1, options), ones(number[0], options)].join(' ') if ordinal? options super(number, options) end def tens_with_ones(numbers, options = {}) connector = ordinal?(options) ? ' ' : " #{union} " - [tens(numbers[1], options), connector, ones(numbers[0], options)].join + [tens(numbers[1], options), ones(numbers[0], options)].join(connector) end def hundreds(number, options = {}) diff --git a/lib/numbers_and_words/translations/vi.rb b/lib/numbers_and_words/translations/vi.rb index ad4f2ef2..a7f564f1 100644 --- a/lib/numbers_and_words/translations/vi.rb +++ b/lib/numbers_and_words/translations/vi.rb @@ -6,8 +6,8 @@ class Vi < Base include NumbersAndWords::Translations::Families::Latin include NumbersAndWords::Translations::Extensions::FractionSignificance def ones_of_tens(number, options = {}) - return t(%i[units tens one].join('.')) if number == 1 - return t(%i[units tens five].join('.')) if number == 5 + return t('units.tens.one') if number == 1 + return t('units.tens.five') if number == 5 ones(number, options) end