numbers_and_words 0.10.0 → 0.11.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (202) hide show
  1. checksums.yaml +6 -14
  2. data/CHANGELOG.md +264 -0
  3. data/README.rdoc +154 -19
  4. data/lib/numbers_and_words/core_ext/array.rb +4 -2
  5. data/lib/numbers_and_words/core_ext/float.rb +3 -1
  6. data/lib/numbers_and_words/core_ext/integer.rb +3 -1
  7. data/lib/numbers_and_words/core_ext.rb +2 -0
  8. data/lib/numbers_and_words/helper_classes/array_extensions/helpers.rb +26 -16
  9. data/lib/numbers_and_words/helper_classes/figures_array.rb +9 -6
  10. data/lib/numbers_and_words/helper_classes/words_array.rb +6 -6
  11. data/lib/numbers_and_words/helper_classes.rb +3 -1
  12. data/lib/numbers_and_words/i18n/initialization.rb +4 -2
  13. data/lib/numbers_and_words/i18n/locales/numbers.cs.yml +95 -0
  14. data/lib/numbers_and_words/i18n/locales/numbers.de.yml +5 -4
  15. data/lib/numbers_and_words/i18n/locales/numbers.en-GB.yml +24 -8
  16. data/lib/numbers_and_words/i18n/locales/numbers.en.yml +24 -8
  17. data/lib/numbers_and_words/i18n/locales/numbers.es.yml +102 -13
  18. data/lib/numbers_and_words/i18n/locales/numbers.et.yml +4 -4
  19. data/lib/numbers_and_words/i18n/locales/numbers.fr.yml +73 -15
  20. data/lib/numbers_and_words/i18n/locales/numbers.hu.yml +11 -8
  21. data/lib/numbers_and_words/i18n/locales/numbers.hy.yml +7 -0
  22. data/lib/numbers_and_words/i18n/locales/numbers.it.yml +3 -3
  23. data/lib/numbers_and_words/i18n/locales/numbers.ka.yml +15 -0
  24. data/lib/numbers_and_words/i18n/locales/numbers.kz.yml +7 -0
  25. data/lib/numbers_and_words/i18n/locales/numbers.lt.yml +14 -15
  26. data/lib/numbers_and_words/i18n/locales/numbers.lv.yml +5 -6
  27. data/lib/numbers_and_words/i18n/locales/numbers.nl.yml +7 -4
  28. data/lib/numbers_and_words/i18n/locales/numbers.pt-BR.yml +121 -0
  29. data/lib/numbers_and_words/i18n/locales/numbers.pt.yml +25 -0
  30. data/lib/numbers_and_words/i18n/locales/numbers.ru.yml +39 -27
  31. data/lib/numbers_and_words/i18n/locales/numbers.se.yml +3 -3
  32. data/lib/numbers_and_words/i18n/locales/numbers.tr.yml +3 -3
  33. data/lib/numbers_and_words/i18n/locales/numbers.ua.yml +39 -15
  34. data/lib/numbers_and_words/i18n/locales/numbers.vi.yml +13 -0
  35. data/lib/numbers_and_words/i18n/pluralization.rb +6 -5
  36. data/lib/numbers_and_words/i18n/plurals/cs.rb +38 -0
  37. data/lib/numbers_and_words/i18n/plurals/lt.rb +17 -11
  38. data/lib/numbers_and_words/i18n/plurals/lv.rb +6 -4
  39. data/lib/numbers_and_words/i18n/plurals/plurals.rb +11 -7
  40. data/lib/numbers_and_words/i18n/plurals/ru.rb +23 -13
  41. data/lib/numbers_and_words/i18n/plurals/ua.rb +2 -0
  42. data/lib/numbers_and_words/i18n.rb +7 -5
  43. data/lib/numbers_and_words/strategies/array_joiner/languages/base.rb +3 -1
  44. data/lib/numbers_and_words/strategies/array_joiner/languages/cs.rb +12 -0
  45. data/lib/numbers_and_words/strategies/array_joiner/languages/{en_gb.rb → en-GB.rb} +3 -1
  46. data/lib/numbers_and_words/strategies/array_joiner/languages/en.rb +2 -0
  47. data/lib/numbers_and_words/strategies/array_joiner/languages/es.rb +12 -0
  48. data/lib/numbers_and_words/strategies/array_joiner/languages/families/base.rb +7 -6
  49. data/lib/numbers_and_words/strategies/array_joiner/languages/fr.rb +12 -0
  50. data/lib/numbers_and_words/strategies/array_joiner/languages/hu.rb +2 -0
  51. data/lib/numbers_and_words/strategies/array_joiner/languages/pt-BR.rb +12 -0
  52. data/lib/numbers_and_words/strategies/array_joiner/languages/ru.rb +2 -0
  53. data/lib/numbers_and_words/strategies/array_joiner/languages/ua.rb +2 -0
  54. data/lib/numbers_and_words/strategies/array_joiner/languages/vi.rb +12 -0
  55. data/lib/numbers_and_words/strategies/array_joiner/languages.rb +11 -4
  56. data/lib/numbers_and_words/strategies/array_joiner.rb +3 -2
  57. data/lib/numbers_and_words/strategies/figures_converter/decorators/base.rb +4 -2
  58. data/lib/numbers_and_words/strategies/figures_converter/decorators/cs/base.rb +14 -0
  59. data/lib/numbers_and_words/strategies/figures_converter/decorators/cs/fractional.rb +40 -0
  60. data/lib/numbers_and_words/strategies/figures_converter/decorators/cs/integral.rb +31 -0
  61. data/lib/numbers_and_words/strategies/figures_converter/decorators/{en_gb.rb → cs.rb} +5 -3
  62. data/lib/numbers_and_words/strategies/figures_converter/decorators/en/base.rb +3 -1
  63. data/lib/numbers_and_words/strategies/figures_converter/decorators/en/fractional.rb +4 -3
  64. data/lib/numbers_and_words/strategies/figures_converter/decorators/en/integral.rb +3 -1
  65. data/lib/numbers_and_words/strategies/figures_converter/decorators/{en_gb → en-GB}/base.rb +2 -0
  66. data/lib/numbers_and_words/strategies/figures_converter/decorators/{en_gb → en-GB}/fractional.rb +2 -0
  67. data/lib/numbers_and_words/strategies/figures_converter/decorators/{en_gb → en-GB}/integral.rb +2 -0
  68. data/lib/numbers_and_words/strategies/figures_converter/decorators/en-GB.rb +5 -0
  69. data/lib/numbers_and_words/strategies/figures_converter/decorators/en.rb +2 -0
  70. data/lib/numbers_and_words/strategies/figures_converter/decorators/es/base.rb +14 -0
  71. data/lib/numbers_and_words/strategies/figures_converter/decorators/es/fractional.rb +40 -0
  72. data/lib/numbers_and_words/strategies/figures_converter/decorators/es/integral.rb +14 -0
  73. data/lib/numbers_and_words/strategies/figures_converter/decorators/es.rb +5 -0
  74. data/lib/numbers_and_words/strategies/figures_converter/decorators/fr/base.rb +14 -0
  75. data/lib/numbers_and_words/strategies/figures_converter/decorators/fr/fractional.rb +39 -0
  76. data/lib/numbers_and_words/strategies/figures_converter/decorators/fr/integral.rb +14 -0
  77. data/lib/numbers_and_words/strategies/figures_converter/decorators/fr.rb +5 -0
  78. data/lib/numbers_and_words/strategies/figures_converter/decorators/hu/base.rb +3 -1
  79. data/lib/numbers_and_words/strategies/figures_converter/decorators/hu/fractional.rb +5 -4
  80. data/lib/numbers_and_words/strategies/figures_converter/decorators/hu/integral.rb +3 -1
  81. data/lib/numbers_and_words/strategies/figures_converter/decorators/hu.rb +3 -1
  82. data/lib/numbers_and_words/strategies/figures_converter/decorators/pt-BR/base.rb +14 -0
  83. data/lib/numbers_and_words/strategies/figures_converter/decorators/pt-BR/fractional.rb +39 -0
  84. data/lib/numbers_and_words/strategies/figures_converter/decorators/pt-BR/integral.rb +31 -0
  85. data/lib/numbers_and_words/strategies/figures_converter/decorators/pt-BR.rb +5 -0
  86. data/lib/numbers_and_words/strategies/figures_converter/decorators/ru/base.rb +3 -1
  87. data/lib/numbers_and_words/strategies/figures_converter/decorators/ru/fractional.rb +4 -3
  88. data/lib/numbers_and_words/strategies/figures_converter/decorators/ru/integral.rb +3 -2
  89. data/lib/numbers_and_words/strategies/figures_converter/decorators/ru.rb +2 -0
  90. data/lib/numbers_and_words/strategies/figures_converter/decorators/ua/base.rb +3 -1
  91. data/lib/numbers_and_words/strategies/figures_converter/decorators/ua/fractional.rb +4 -3
  92. data/lib/numbers_and_words/strategies/figures_converter/decorators/ua/integral.rb +3 -2
  93. data/lib/numbers_and_words/strategies/figures_converter/decorators/ua.rb +2 -0
  94. data/lib/numbers_and_words/strategies/figures_converter/decorators/vi/base.rb +14 -0
  95. data/lib/numbers_and_words/strategies/figures_converter/decorators/vi/fractional.rb +14 -0
  96. data/lib/numbers_and_words/strategies/figures_converter/decorators/vi/integral.rb +14 -0
  97. data/lib/numbers_and_words/strategies/figures_converter/decorators/vi.rb +5 -0
  98. data/lib/numbers_and_words/strategies/figures_converter/decorators.rb +17 -10
  99. data/lib/numbers_and_words/strategies/figures_converter/languages/base.rb +6 -4
  100. data/lib/numbers_and_words/strategies/figures_converter/languages/cs.rb +53 -0
  101. data/lib/numbers_and_words/strategies/figures_converter/languages/de.rb +15 -15
  102. data/lib/numbers_and_words/strategies/figures_converter/languages/{en_gb.rb → en-GB.rb} +3 -1
  103. data/lib/numbers_and_words/strategies/figures_converter/languages/en.rb +20 -12
  104. data/lib/numbers_and_words/strategies/figures_converter/languages/es.rb +58 -17
  105. data/lib/numbers_and_words/strategies/figures_converter/languages/et.rb +3 -4
  106. data/lib/numbers_and_words/strategies/figures_converter/languages/families/base.rb +7 -5
  107. data/lib/numbers_and_words/strategies/figures_converter/languages/families/cyrillic.rb +8 -6
  108. data/lib/numbers_and_words/strategies/figures_converter/languages/families/helpers.rb +12 -14
  109. data/lib/numbers_and_words/strategies/figures_converter/languages/fr.rb +14 -14
  110. data/lib/numbers_and_words/strategies/figures_converter/languages/hu.rb +11 -11
  111. data/lib/numbers_and_words/strategies/figures_converter/languages/{families/latin.rb → hy.rb} +3 -4
  112. data/lib/numbers_and_words/strategies/figures_converter/languages/it.rb +2 -1
  113. data/lib/numbers_and_words/strategies/figures_converter/languages/ka.rb +39 -0
  114. data/lib/numbers_and_words/strategies/figures_converter/languages/kz.rb +12 -0
  115. data/lib/numbers_and_words/strategies/figures_converter/languages/lt.rb +10 -14
  116. data/lib/numbers_and_words/strategies/figures_converter/languages/lv.rb +5 -23
  117. data/lib/numbers_and_words/strategies/figures_converter/languages/nl.rb +31 -7
  118. data/lib/numbers_and_words/strategies/figures_converter/languages/pt-BR.rb +118 -0
  119. data/lib/numbers_and_words/strategies/figures_converter/languages/pt.rb +29 -0
  120. data/lib/numbers_and_words/strategies/figures_converter/languages/ru.rb +2 -0
  121. data/lib/numbers_and_words/strategies/figures_converter/languages/se.rb +2 -1
  122. data/lib/numbers_and_words/strategies/figures_converter/languages/tr.rb +19 -1
  123. data/lib/numbers_and_words/strategies/figures_converter/languages/ua.rb +2 -0
  124. data/lib/numbers_and_words/strategies/figures_converter/languages/vi.rb +100 -0
  125. data/lib/numbers_and_words/strategies/figures_converter/languages.rb +18 -14
  126. data/lib/numbers_and_words/strategies/figures_converter/options/base/gender.rb +30 -0
  127. data/lib/numbers_and_words/strategies/figures_converter/options/base/ordinal.rb +28 -0
  128. data/lib/numbers_and_words/strategies/figures_converter/options/base/remove_zero.rb +30 -0
  129. data/lib/numbers_and_words/strategies/figures_converter/options/{en_gb.rb → base.rb} +5 -4
  130. data/lib/numbers_and_words/strategies/figures_converter/options/cs/gender.rb +17 -0
  131. data/lib/numbers_and_words/strategies/figures_converter/options/cs/ordinal.rb +14 -0
  132. data/lib/numbers_and_words/strategies/figures_converter/options/cs/remove_zero.rb +14 -0
  133. data/lib/numbers_and_words/strategies/figures_converter/options/cs.rb +5 -0
  134. data/lib/numbers_and_words/strategies/figures_converter/options/en/hundreds_with_union.rb +5 -3
  135. data/lib/numbers_and_words/strategies/figures_converter/options/en/ordinal.rb +8 -14
  136. data/lib/numbers_and_words/strategies/figures_converter/options/en/pronounced.rb +60 -0
  137. data/lib/numbers_and_words/strategies/figures_converter/options/en/remove_hyphen.rb +4 -3
  138. data/lib/numbers_and_words/strategies/figures_converter/options/en/remove_zero.rb +4 -19
  139. data/lib/numbers_and_words/strategies/figures_converter/options/{en_gb → en-GB}/hundreds_with_union.rb +3 -1
  140. data/lib/numbers_and_words/strategies/figures_converter/options/{en_gb → en-GB}/ordinal.rb +3 -1
  141. data/lib/numbers_and_words/strategies/figures_converter/options/en-GB/pronounced.rb +14 -0
  142. data/lib/numbers_and_words/strategies/figures_converter/options/{en_gb → en-GB}/remove_hyphen.rb +3 -1
  143. data/lib/numbers_and_words/strategies/figures_converter/options/{en_gb → en-GB}/remove_zero.rb +3 -1
  144. data/lib/numbers_and_words/strategies/figures_converter/options/en-GB.rb +7 -0
  145. data/lib/numbers_and_words/strategies/figures_converter/options/en.rb +4 -1
  146. data/lib/numbers_and_words/strategies/figures_converter/options/es/apocopated.rb +30 -0
  147. data/lib/numbers_and_words/strategies/figures_converter/options/es/gender.rb +14 -0
  148. data/lib/numbers_and_words/strategies/figures_converter/options/es/remove_zero.rb +14 -0
  149. data/lib/numbers_and_words/strategies/figures_converter/options/es.rb +5 -0
  150. data/lib/numbers_and_words/strategies/figures_converter/options/hu/ordinal.rb +4 -50
  151. data/lib/numbers_and_words/strategies/figures_converter/options/hu.rb +2 -0
  152. data/lib/numbers_and_words/strategies/figures_converter/options/nl/tens_of_hundreds.rb +30 -0
  153. data/lib/numbers_and_words/strategies/figures_converter/options/nl.rb +3 -0
  154. data/lib/numbers_and_words/strategies/figures_converter/options/pt-BR/gender.rb +14 -0
  155. data/lib/numbers_and_words/strategies/figures_converter/options/pt-BR/ordinal.rb +14 -0
  156. data/lib/numbers_and_words/strategies/figures_converter/options/pt-BR/remove_zero.rb +14 -0
  157. data/lib/numbers_and_words/strategies/figures_converter/options/pt-BR.rb +5 -0
  158. data/lib/numbers_and_words/strategies/figures_converter/options/ru/gender.rb +4 -18
  159. data/lib/numbers_and_words/strategies/figures_converter/options/ru.rb +2 -0
  160. data/lib/numbers_and_words/strategies/figures_converter/options/ua/gender.rb +4 -18
  161. data/lib/numbers_and_words/strategies/figures_converter/options/ua.rb +2 -0
  162. data/lib/numbers_and_words/strategies/figures_converter/options.rb +26 -9
  163. data/lib/numbers_and_words/strategies/figures_converter.rb +5 -4
  164. data/lib/numbers_and_words/strategies.rb +3 -1
  165. data/lib/numbers_and_words/translations/base.rb +4 -2
  166. data/lib/numbers_and_words/translations/cs.rb +48 -0
  167. data/lib/numbers_and_words/translations/de.rb +10 -8
  168. data/lib/numbers_and_words/translations/en-GB.rb +10 -0
  169. data/lib/numbers_and_words/translations/en.rb +2 -0
  170. data/lib/numbers_and_words/translations/es.rb +21 -20
  171. data/lib/numbers_and_words/translations/et.rb +4 -11
  172. data/lib/numbers_and_words/translations/extensions/fraction_significance.rb +9 -8
  173. data/lib/numbers_and_words/translations/families/base.rb +13 -11
  174. data/lib/numbers_and_words/translations/families/cyrillic.rb +9 -11
  175. data/lib/numbers_and_words/translations/families/latin.rb +7 -7
  176. data/lib/numbers_and_words/translations/fr.rb +19 -14
  177. data/lib/numbers_and_words/translations/hu.rb +6 -13
  178. data/lib/numbers_and_words/translations/hy.rb +21 -0
  179. data/lib/numbers_and_words/translations/it.rb +5 -3
  180. data/lib/numbers_and_words/translations/ka.rb +64 -0
  181. data/lib/numbers_and_words/translations/kz.rb +9 -0
  182. data/lib/numbers_and_words/translations/lt.rb +4 -12
  183. data/lib/numbers_and_words/translations/lv.rb +4 -12
  184. data/lib/numbers_and_words/translations/nl.rb +16 -4
  185. data/lib/numbers_and_words/translations/pt-BR.rb +77 -0
  186. data/lib/numbers_and_words/translations/pt.rb +20 -0
  187. data/lib/numbers_and_words/translations/ru.rb +2 -17
  188. data/lib/numbers_and_words/translations/se.rb +4 -2
  189. data/lib/numbers_and_words/translations/tr.rb +8 -2
  190. data/lib/numbers_and_words/translations/ua.rb +2 -13
  191. data/lib/numbers_and_words/translations/vi.rb +24 -0
  192. data/lib/numbers_and_words/translations.rb +11 -2
  193. data/lib/numbers_and_words/version.rb +3 -1
  194. data/lib/numbers_and_words/wrappers/float.rb +22 -16
  195. data/lib/numbers_and_words/wrappers/integer.rb +6 -4
  196. data/lib/numbers_and_words/wrappers.rb +3 -1
  197. data/lib/numbers_and_words.rb +2 -3
  198. metadata +108 -58
  199. data/lib/numbers_and_words/helper_classes/array_extensions/validations.rb +0 -19
  200. data/lib/numbers_and_words/i18n/plurals/es.rb +0 -11
  201. data/lib/numbers_and_words/i18n/plurals/fr.rb +0 -15
  202. data/lib/numbers_and_words/translations/en_gb.rb +0 -6
@@ -1,34 +1,75 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
4
6
  module Languages
5
7
  class Es < Base
6
- include Families::Latin
7
-
8
8
  def capacity_iteration
9
- words = []
10
- capacity_words = words_in_capacity(@current_capacity)
11
- words.push megs(capacity_words) unless capacity_words.empty?
9
+ super.compact
10
+ end
12
11
 
13
- if 0 < @current_capacity
14
- # eg 1000000 should be "un millon" not "uno millon"
15
- # 501000 should be "quinientos un mil" not "quinientos uno mil"
16
- # so we replace "uno" with "un" throughout
12
+ def zero
13
+ super unless maybe_remove_zero
14
+ end
15
+
16
+ def ones
17
+ super({ gender: gender,
18
+ is_one_thousand: one_thousand?,
19
+ is_apocopated: one_apocopated? })
20
+ end
17
21
 
18
- capacity_words = capacity_words.map{|word|
19
- word.gsub( @translations.ones(1), @translations.one )
20
- }
21
- end
22
+ def tens_with_ones
23
+ options = { gender: gender, is_apocopated: one_apocopated? }
24
+ return @translations.twenties_with_ones(@figures, options) if @figures.tens == 2
22
25
 
23
- words + capacity_words
26
+ super(options)
24
27
  end
25
28
 
26
29
  def hundreds
27
- super({:is_hundred => (figures[1,2] == [0,1] && simple_number_to_words.empty?)})
30
+ super({ gender: gender,
31
+ is_apocopated: hundred_apocopated? })
32
+ end
33
+
34
+ def megs
35
+ return @translations.megs(1, number: 1) if long_scale_thousand?
36
+
37
+ super({ number: @figures.number_in_capacity(@current_capacity) })
38
+ end
39
+
40
+ private
41
+
42
+ def one_thousand?
43
+ @current_capacity.odd? &&
44
+ @figures.ones == 1 &&
45
+ @figures.tens.nil? &&
46
+ @figures.hundreds.nil?
47
+ end
48
+
49
+ def long_scale_thousand?
50
+ @current_capacity.odd? &&
51
+ !@figures.number_in_capacity(@current_capacity - 1).zero?
52
+ end
53
+
54
+ def one_apocopated?
55
+ (@current_capacity.positive? && @figures.ones == 1) ||
56
+ @options.apocopated.result
57
+ end
58
+
59
+ def hundred_apocopated?
60
+ @figures.hundreds == 1 && @figures.round_hundred?
61
+ end
62
+
63
+ def gender
64
+ @current_capacity ||= 0
65
+
66
+ return :male if @current_capacity >= 2
67
+
68
+ @options.gender.result
28
69
  end
29
70
 
30
- def megs capacity_words
31
- super({:is_one => capacity_words == [@translations.ones(1)]})
71
+ def maybe_remove_zero
72
+ @options.remove_zero.result
32
73
  end
33
74
  end
34
75
  end
@@ -1,14 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
4
6
  module Languages
5
7
  class Et < Base
6
- include Families::Latin
7
-
8
8
  def megs
9
- super({:number => @figures.number_in_capacity(@current_capacity)})
9
+ super({ number: @figures.number_in_capacity(@current_capacity) })
10
10
  end
11
-
12
11
  end
13
12
  end
14
13
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
@@ -13,7 +15,7 @@ module NumbersAndWords
13
15
  number_without_capacity_to_words + complex_number_to_words
14
16
  elsif @figures.hundreds
15
17
  hundreds_number_to_words
16
- elsif @figures.tens or @figures.ones
18
+ elsif @figures.tens || @figures.ones
17
19
  simple_number_to_words
18
20
  else
19
21
  []
@@ -21,10 +23,10 @@ module NumbersAndWords
21
23
  end
22
24
 
23
25
  def complex_number_to_words
24
- (1..@figures.capacity_count).map { |capacity|
26
+ (1..@figures.capacity_count).map do |capacity|
25
27
  @current_capacity = capacity
26
28
  capacity_iteration
27
- }.flatten
29
+ end.flatten
28
30
  end
29
31
 
30
32
  def capacity_iteration
@@ -34,14 +36,14 @@ module NumbersAndWords
34
36
  words + capacity_words
35
37
  end
36
38
 
37
- def words_in_capacity capacity = 0
39
+ def words_in_capacity(capacity = 0)
38
40
  save_parent_figures do
39
41
  @figures = @parent_figures.figures_array_in_capacity(capacity)
40
42
  strings_logic
41
43
  end
42
44
  end
43
45
 
44
- alias_method :number_without_capacity_to_words, :words_in_capacity
46
+ alias number_without_capacity_to_words words_in_capacity
45
47
 
46
48
  def hundreds_number_to_words
47
49
  simple_number_to_words + [hundreds]
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
@@ -19,14 +21,14 @@ module NumbersAndWords
19
21
  end
20
22
  end
21
23
 
22
- [:ones, :tens_with_ones].each do |method_name|
23
- define_method(method_name) {
24
- super({:gender => gender})
25
- }
24
+ %i[ones tens_with_ones].each do |method_name|
25
+ define_method(method_name) do |*args|
26
+ super({ gender: gender }.merge(args.first || {}))
27
+ end
26
28
  end
27
29
 
28
- def megs
29
- super({:number => @figures.number_in_capacity(@current_capacity)})
30
+ def megs(*args)
31
+ super({ number: @figures.number_in_capacity(@current_capacity) }.merge(args.first || {}))
30
32
  end
31
33
  end
32
34
  end
@@ -1,31 +1,29 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
4
6
  module Languages
5
7
  module Families
6
8
  module Helpers
7
- [:zero].each do |method_name|
8
- define_method(method_name) { |*args|
9
- options = args.first || {}
10
- translate method_name, options
11
- }
9
+ def zero(*args)
10
+ options = args.first || {}
11
+ translate :zero, options
12
12
  end
13
13
 
14
- [:ones, :teens, :tens, :tens_with_ones, :hundreds].each do |method_name|
15
- define_method(method_name) { |*args|
14
+ %i[ones teens tens tens_with_ones hundreds].each do |method_name|
15
+ define_method(method_name) do |*args|
16
16
  options = args.first || {}
17
17
  translate method_name, @figures.send(method_name), options
18
- }
18
+ end
19
19
  end
20
20
 
21
- [:megs].each do |method_name|
22
- define_method(method_name) { |*args|
23
- options = args.first || {}
24
- translate method_name, @current_capacity, options
25
- }
21
+ def megs(*args)
22
+ options = args.first || {}
23
+ translate :megs, @current_capacity, options
26
24
  end
27
25
 
28
- def translate method_name, *args
26
+ def translate(method_name, *args)
29
27
  translations.send method_name, *args
30
28
  end
31
29
  end
@@ -1,37 +1,37 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
4
6
  module Languages
5
7
  class Fr < Base
6
- include Families::Latin
7
-
8
- private
9
-
10
8
  def capacity_iteration
11
9
  words = []
12
10
  capacity_words = words_in_capacity(@current_capacity)
13
11
  words.push(megs) unless capacity_words.empty?
14
- words += capacity_words unless is_a_thousand? and is_a_one?
12
+ words += capacity_words unless thousand? && one?
15
13
  words
16
14
  end
17
15
 
18
- def is_a_one?
19
- [translations.ones(1)] == words_in_capacity(@current_capacity)
16
+ def hundreds
17
+ super({ pluralize: simple_number_to_words.empty? })
20
18
  end
21
19
 
22
- def is_a_thousand?
23
- FiguresArray::THOUSAND_CAPACITY == @current_capacity
20
+ def megs
21
+ super({ number: @figures.number_in_capacity(@current_capacity) })
24
22
  end
25
23
 
26
- def hundreds
27
- super({:pluralize => simple_number_to_words.empty?})
24
+ private
25
+
26
+ def one?
27
+ words_in_capacity(@current_capacity) == [translations.ones(1)]
28
28
  end
29
29
 
30
- def megs
31
- super({:number => @figures.number_in_capacity(@current_capacity)})
30
+ def thousand?
31
+ @current_capacity == FiguresArray::THOUSAND_CAPACITY
32
32
  end
33
33
  end
34
34
  end
35
35
  end
36
36
  end
37
- end
37
+ end
@@ -1,12 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
4
6
  module Languages
5
7
  class Hu < Base
6
- include Families::Latin
7
-
8
8
  def print_words
9
- inner_reverse_words.reverse.join(greater_than_2000? && '-' || '')
9
+ inner_reverse_words.reverse.join(greater_than_2000? ? '-' : '')
10
10
  end
11
11
 
12
12
  def inner_reverse_words
@@ -22,7 +22,7 @@ module NumbersAndWords
22
22
  number_without_capacity_to_words + complex_number_to_words
23
23
  elsif @figures.hundreds
24
24
  [hundreds_number_to_words]
25
- elsif @figures.tens or @figures.ones
25
+ elsif @figures.tens || @figures.ones
26
26
  [simple_number_to_words]
27
27
  else
28
28
  []
@@ -31,10 +31,10 @@ module NumbersAndWords
31
31
 
32
32
  def complex_number_to_words
33
33
  count = @figures.capacity_count
34
- (1..count).map { |capacity|
34
+ (1..count).map do |capacity|
35
35
  @current_capacity = capacity
36
36
  capacity_iteration.flatten
37
- }.reject(&:empty?)
37
+ end.reject(&:empty?)
38
38
  end
39
39
 
40
40
  def simple_number_to_words
@@ -47,13 +47,13 @@ module NumbersAndWords
47
47
  end
48
48
  end
49
49
 
50
- [:zero, :ones, :teens, :tens, :tens_with_ones, :hundreds, :megs].each do |method_name|
51
- define_method(method_name) {
52
- super({:prefix => maybe_ordinal(method_name)})
53
- }
50
+ %i[zero ones teens tens tens_with_ones hundreds megs].each do |method_name|
51
+ define_method(method_name) do
52
+ super({ prefix: maybe_ordinal(method_name) })
53
+ end
54
54
  end
55
55
 
56
- def maybe_ordinal type
56
+ def maybe_ordinal(type)
57
57
  @options.ordinal.result type
58
58
  end
59
59
  end
@@ -1,11 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
4
6
  module Languages
5
- module Families
6
- module Latin
7
- include Base
8
- end
7
+ class Hy < Base
9
8
  end
10
9
  end
11
10
  end
@@ -1,9 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
4
6
  module Languages
5
7
  class It < Base
6
- include Families::Latin
7
8
  end
8
9
  end
9
10
  end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Languages
7
+ class Ka < Base
8
+ def capacity_iteration
9
+ words = []
10
+ capacity_words = words_in_capacity(@current_capacity)
11
+ words.push(megs) unless capacity_words.empty?
12
+ words += capacity_words unless thousand? && one?
13
+ words
14
+ end
15
+
16
+ def hundreds
17
+ super({ only_hundreds: figures[0, 2] == [0, 0] })
18
+ end
19
+
20
+ def megs
21
+ prefix = (:partials if @figures.hundreds || @figures.tens || @figures.ones)
22
+
23
+ super(prefix: prefix)
24
+ end
25
+
26
+ private
27
+
28
+ def one?
29
+ words_in_capacity(@current_capacity) == [translations.ones(1)]
30
+ end
31
+
32
+ def thousand?
33
+ @current_capacity == FiguresArray::THOUSAND_CAPACITY
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Languages
7
+ class Kz < Base
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -1,34 +1,30 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
4
6
  module Languages
5
7
  class Lt < Base
6
- include Families::Latin
7
-
8
- private
9
-
10
8
  def capacity_iteration
11
9
  words = []
12
10
  capacity_words = words_in_capacity(@current_capacity)
13
11
  words.push(megs) unless capacity_words.empty?
14
- words += capacity_words unless is_a_thousand? and is_a_one?
12
+ words += capacity_words unless thousand? && one?
15
13
  words
16
14
  end
17
15
 
18
- def is_a_one?
19
- [translations.ones(1)] == words_in_capacity(@current_capacity)
16
+ def megs
17
+ super({ number: @figures.number_in_capacity(@current_capacity) })
20
18
  end
21
19
 
22
- def is_a_thousand?
23
- FiguresArray::THOUSAND_CAPACITY == @current_capacity
24
- end
20
+ private
25
21
 
26
- def hundreds
27
- super({:is_hundred => (figures[1,2] == [0,1] && simple_number_to_words.empty?)})
22
+ def one?
23
+ words_in_capacity(@current_capacity) == [translations.ones(1)]
28
24
  end
29
25
 
30
- def megs
31
- super({:number => @figures.number_in_capacity(@current_capacity)})
26
+ def thousand?
27
+ @current_capacity == FiguresArray::THOUSAND_CAPACITY
32
28
  end
33
29
  end
34
30
  end
@@ -1,34 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
4
6
  module Languages
5
7
  class Lv < Base
6
- include Families::Latin
7
-
8
- private
9
-
10
- def capacity_iteration
11
- words = []
12
- capacity_words = words_in_capacity(@current_capacity)
13
- words.push(megs) unless capacity_words.empty?
14
- words += capacity_words unless is_a_thousand? and is_a_one?
15
- words
16
- end
17
-
18
- def is_a_one?
19
- [translations.ones(1)] == words_in_capacity(@current_capacity)
20
- end
21
-
22
- def is_a_thousand?
23
- FiguresArray::THOUSAND_CAPACITY == @current_capacity
24
- end
25
-
26
- def hundreds
27
- super({:is_hundred => (figures[1,2] == [0,1] && simple_number_to_words.empty?)})
8
+ def tens_with_ones
9
+ super separator: ' '
28
10
  end
29
11
 
30
12
  def megs
31
- super({:number => @figures.number_in_capacity(@current_capacity)})
13
+ super({ number: @figures.number_in_capacity(@current_capacity) })
32
14
  end
33
15
  end
34
16
  end
@@ -1,24 +1,48 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
4
6
  module Languages
5
7
  class Nl < Base
6
- include Families::Latin
7
-
8
8
  def hundreds_number_to_words
9
9
  [super.reverse.join]
10
10
  end
11
11
 
12
12
  def capacity_iteration
13
- if FiguresArray::THOUSAND_CAPACITY == @current_capacity
14
- words = []
15
- capacity_words = words_in_capacity(@current_capacity)
16
- words.push megs unless capacity_words.empty?
17
- capacity_words.empty? ? [] : [capacity_words, words].join
13
+ return super if @current_capacity != FiguresArray::THOUSAND_CAPACITY
14
+ return [] if apply_tens_of_hundreds?
15
+ return megs if figures.number_in_capacity(@current_capacity) == 1
16
+
17
+ capacity_words = words_in_capacity(@current_capacity)
18
+ capacity_words.empty? ? [] : [capacity_words, megs].join
19
+ end
20
+
21
+ def simple_number_to_words
22
+ if @figures.only_ones && @figures.ones == 1
23
+ [@translations.t(:loose_one)]
18
24
  else
19
25
  super
20
26
  end
21
27
  end
28
+
29
+ def number_without_capacity_to_words
30
+ return super unless apply_tens_of_hundreds?
31
+
32
+ base = save_parent_figures do
33
+ @figures = @parent_figures[2, 2].to_figures
34
+ simple_number_to_words
35
+ end
36
+ [([base, translate(:hundreds, 1)] + simple_number_to_words).join]
37
+ end
38
+
39
+ private
40
+
41
+ def apply_tens_of_hundreds?
42
+ @options.tens_of_hundreds.result &&
43
+ (1..9).cover?(figures.number_in_capacity(FiguresArray::THOUSAND_CAPACITY)) &&
44
+ figures.hundreds
45
+ end
22
46
  end
23
47
  end
24
48
  end
@@ -0,0 +1,118 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Languages
7
+ class PtBr < Base
8
+ %i[teens tens tens_with_ones].each do |method_name|
9
+ define_method(method_name) do
10
+ super(internal_options)
11
+ end
12
+ end
13
+
14
+ def zero
15
+ super unless maybe_remove_zero
16
+ end
17
+
18
+ def words
19
+ super.strip
20
+ end
21
+
22
+ def complex_number_to_words
23
+ super.compact
24
+ end
25
+
26
+ def capacity_iteration
27
+ words = []
28
+ capacity_words = words_in_capacity(current_capacity)
29
+ words.push(megs) unless capacity_words.empty? || (capacity_words.empty? && figures[0] == 1)
30
+ words + capacity_words
31
+ end
32
+
33
+ def ones
34
+ super internal_options.merge(is_one_thousand: one_thousand?)
35
+ end
36
+
37
+ def hundreds
38
+ super(internal_options.merge(is_hundred: hundred?, is_one_hundred: one_hundred?, gender: gender))
39
+ end
40
+
41
+ def megs
42
+ super(internal_options.merge(number: @figures.number_in_capacity(@current_capacity),
43
+ is_opaque: opaque?,
44
+ is_without_connector: without_connector?,
45
+ is_with_comma: with_comma?))
46
+ end
47
+
48
+ private
49
+
50
+ def internal_options
51
+ { gender: gender, prefix: maybe_ordinal }
52
+ end
53
+
54
+ def maybe_ordinal
55
+ @options.ordinal.result
56
+ end
57
+
58
+ def gender
59
+ return (options.gender.result || :male) if maybe_ordinal
60
+
61
+ if current_capacity&.positive? && figures[0] == 1
62
+ :male
63
+ else
64
+ options.gender.result
65
+ end
66
+ end
67
+
68
+ def hundred?
69
+ figures[0].zero? && figures[1].zero? && simple_number_to_words.empty?
70
+ end
71
+
72
+ def one_hundred?
73
+ hundred? && figures[2] == 1
74
+ end
75
+
76
+ def opaque?
77
+ figures.opaque? current_capacity
78
+ end
79
+
80
+ def one_thousand?
81
+ current_capacity == 1 &&
82
+ figures.ones == 1 &&
83
+ figures.tens.nil? &&
84
+ figures.hundreds.nil?
85
+ end
86
+
87
+ def without_connector?
88
+ return false if with_comma?
89
+ return true if figures.hundreds &&
90
+ (figures.tens_with_ones ||
91
+ figures.tens ||
92
+ figures.ones)
93
+
94
+ false
95
+ end
96
+
97
+ def with_comma?
98
+ return false unless @current_capacity > 1
99
+
100
+ # if any lower capacity is single word, in portuguese only tens are single words
101
+ number_under_capacity = figures.number_under_capacity(@current_capacity)
102
+ return false if number_under_capacity < 20
103
+
104
+ figures_under_capacity = figures.figures_array_under_capacity(@current_capacity)
105
+ return false if figures_under_capacity.count(0) == (figures_under_capacity.size - 1)
106
+
107
+ # else use comma
108
+ true
109
+ end
110
+
111
+ def maybe_remove_zero
112
+ @options.remove_zero.result
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end