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,4 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'numbers_and_words/strategies/figures_converter/options/en/hundreds_with_union'
2
4
  require 'numbers_and_words/strategies/figures_converter/options/en/remove_hyphen'
3
5
  require 'numbers_and_words/strategies/figures_converter/options/en/ordinal'
4
- require 'numbers_and_words/strategies/figures_converter/options/en/remove_zero'
6
+ require 'numbers_and_words/strategies/figures_converter/options/en/pronounced'
7
+ require 'numbers_and_words/strategies/figures_converter/options/en/remove_zero'
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Options
7
+ module Es
8
+ class Apocopated
9
+ attr_accessor :strategy, :options
10
+
11
+ def initialize(proxy, *_args)
12
+ @strategy = proxy.strategy
13
+ @options = proxy.options
14
+ end
15
+
16
+ def result
17
+ active?
18
+ end
19
+
20
+ private
21
+
22
+ def active?
23
+ @options[:apocopated]
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Options
7
+ module Es
8
+ class Gender < Base::Gender
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Options
7
+ module Es
8
+ class RemoveZero < Base::RemoveZero
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'numbers_and_words/strategies/figures_converter/options/es/apocopated'
4
+ require 'numbers_and_words/strategies/figures_converter/options/es/gender'
5
+ require 'numbers_and_words/strategies/figures_converter/options/es/remove_zero'
@@ -1,60 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
4
6
  module Options
5
7
  module Hu
6
- class Ordinal
7
- ZERO_TYPE = :zero
8
- HUNDRED_TYPE = :hundreds
9
- MEGS_TYPE = :megs
10
-
11
- def initialize proxy, *args, &block
12
- @strategy = proxy.strategy
13
- @options = proxy.options
14
- end
15
-
16
- def result type
17
- @type = type
18
- MEGS_TYPE != type ? check_simple_numbers : check_megs_numbers
19
- end
20
-
21
- private
22
-
23
- def active?
24
- @options[:ordinal]
25
- end
26
-
27
- def check_simple_numbers
28
- :ordinal if simple_numbers_condition && active?
29
- end
30
-
31
- def check_megs_numbers
32
- :ordinal if megs_numbers_condition && active?
33
- end
34
-
35
- def simple_numbers_condition
36
- current_capacity.nil? &&
37
- (HUNDRED_TYPE != @type || (HUNDRED_TYPE == @type && simple_number_to_words.empty?))
38
- end
39
-
40
- def megs_numbers_condition
41
- current_capacity == language_figures.ordinal_capacity
42
- end
43
-
44
- def simple_number_to_words
45
- @strategy.language.simple_number_to_words
46
- end
47
-
48
- def current_capacity
49
- @strategy.language.current_capacity
50
- end
51
-
52
- def language_figures
53
- @strategy.language.parent_figures
54
- end
8
+ class Ordinal < En::Ordinal
55
9
  end
56
10
  end
57
11
  end
58
12
  end
59
13
  end
60
- end
14
+ end
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'numbers_and_words/strategies/figures_converter/options/hu/ordinal'
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Options
7
+ module Nl
8
+ class TensOfHundreds
9
+ attr_accessor :strategy, :options
10
+
11
+ def initialize(proxy, *_args)
12
+ @strategy = proxy.strategy
13
+ @options = proxy.options
14
+ end
15
+
16
+ def result
17
+ active?
18
+ end
19
+
20
+ private
21
+
22
+ def active?
23
+ @options[:tens_of_hundreds]
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'numbers_and_words/strategies/figures_converter/options/nl/tens_of_hundreds'
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Options
7
+ module PtBr
8
+ class Gender < Base::Gender
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Options
7
+ module PtBr
8
+ class Ordinal < Base::Ordinal
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Options
7
+ module PtBr
8
+ class RemoveZero < Base::RemoveZero
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'numbers_and_words/strategies/figures_converter/options/pt-BR/gender'
4
+ require 'numbers_and_words/strategies/figures_converter/options/pt-BR/ordinal'
5
+ require 'numbers_and_words/strategies/figures_converter/options/pt-BR/remove_zero'
@@ -1,28 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
4
6
  module Options
5
7
  module Ru
6
- class Gender
7
- attr_accessor :strategy, :options
8
-
9
- def initialize proxy, *args, &block
10
- @strategy = proxy.strategy
11
- @options = proxy.options
12
- end
13
-
14
- def result
15
- active? ? @options[:gender].to_sym : :male
16
- end
17
-
18
- private
19
-
20
- def active?
21
- @options[:gender]
22
- end
8
+ class Gender < Base::Gender
23
9
  end
24
10
  end
25
11
  end
26
12
  end
27
13
  end
28
- end
14
+ end
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'numbers_and_words/strategies/figures_converter/options/ru/gender'
@@ -1,28 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
4
6
  module Options
5
7
  module Ua
6
- class Gender
7
- attr_accessor :strategy, :options
8
-
9
- def initialize proxy, *args, &block
10
- @strategy = proxy.strategy
11
- @options = proxy.options
12
- end
13
-
14
- def result
15
- active? ? @options[:gender].to_sym : :male
16
- end
17
-
18
- private
19
-
20
- def active?
21
- @options[:gender]
22
- end
8
+ class Gender < Base::Gender
23
9
  end
24
10
  end
25
11
  end
26
12
  end
27
13
  end
28
- end
14
+ end
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'numbers_and_words/strategies/figures_converter/options/ua/gender'
@@ -1,8 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'numbers_and_words/strategies/figures_converter/options/base'
1
4
  require 'numbers_and_words/strategies/figures_converter/options/en'
2
- require 'numbers_and_words/strategies/figures_converter/options/en_gb'
5
+ require 'numbers_and_words/strategies/figures_converter/options/en-GB'
6
+ require 'numbers_and_words/strategies/figures_converter/options/es'
7
+ require 'numbers_and_words/strategies/figures_converter/options/hu'
8
+ require 'numbers_and_words/strategies/figures_converter/options/nl'
9
+ require 'numbers_and_words/strategies/figures_converter/options/pt-BR'
3
10
  require 'numbers_and_words/strategies/figures_converter/options/ru'
4
11
  require 'numbers_and_words/strategies/figures_converter/options/ua'
5
- require 'numbers_and_words/strategies/figures_converter/options/hu'
12
+ require 'numbers_and_words/strategies/figures_converter/options/cs'
6
13
 
7
14
  module NumbersAndWords
8
15
  module Strategies
@@ -11,21 +18,31 @@ module NumbersAndWords
11
18
  class Proxy
12
19
  attr_accessor :strategy, :options
13
20
 
14
- def initialize strategy, options
21
+ def initialize(strategy, options)
15
22
  @strategy = strategy
16
23
  @options = options
17
24
  end
18
25
 
19
- def method_missing method_name, *args, &block
20
- proxy_class_name(method_name).constantize.new self, args, block
26
+ def method_missing(method_name, *args, &block)
27
+ method = Object.const_get(proxy_class_name(method_name))
28
+
29
+ if method
30
+ method.new(self, args, block)
31
+ else
32
+ super
33
+ end
21
34
  rescue NameError
22
- return nil
35
+ nil
36
+ end
37
+
38
+ def respond_to_missing?(method_name, include_private: false)
39
+ Object.const_get(proxy_class_name(method_name)) || super
23
40
  end
24
41
 
25
42
  private
26
43
 
27
- def proxy_class_name method_name
28
- "#{module_name}::#{I18n.language_class_name}::#{method_name.to_s.camelcase}"
44
+ def proxy_class_name(method_name)
45
+ "#{module_name}::#{I18n.language_class_name}::#{method_name.to_s.split('_').collect(&:capitalize).join}"
29
46
  end
30
47
 
31
48
  def module_name
@@ -35,4 +52,4 @@ module NumbersAndWords
35
52
  end
36
53
  end
37
54
  end
38
- end
55
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'numbers_and_words/strategies/figures_converter/languages'
2
4
  require 'numbers_and_words/strategies/figures_converter/options'
3
5
  require 'numbers_and_words/strategies/figures_converter/decorators'
@@ -6,10 +8,9 @@ module NumbersAndWords
6
8
  module Strategies
7
9
  module FiguresConverter
8
10
  class Base
9
-
10
11
  attr_accessor :options, :figures, :translations, :language, :decorator
11
12
 
12
- def initialize figures, options = {}
13
+ def initialize(figures, options = {})
13
14
  @figures = figures.reverse
14
15
 
15
16
  @decorator = Decorators.factory(self, options)
@@ -24,8 +25,8 @@ module NumbersAndWords
24
25
 
25
26
  private
26
27
 
27
- def around
28
- decorator.run { yield }
28
+ def around(&block)
29
+ decorator.run(&block)
29
30
  end
30
31
  end
31
32
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'numbers_and_words/strategies/figures_converter'
2
4
  require 'numbers_and_words/strategies/array_joiner'
3
5
 
@@ -13,4 +15,4 @@ module NumbersAndWords
13
15
  end
14
16
  end
15
17
  end
16
- end
18
+ end
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Translations
3
5
  class Base
4
6
  I18N_NAMESPACE = :numbers
5
7
 
6
- def t attribute, options = {}
7
- ::I18n.t attribute, options.merge(:scope => I18N_NAMESPACE)
8
+ def t(attribute, options = {})
9
+ ::I18n.t attribute, **options.merge(scope: I18N_NAMESPACE)
8
10
  end
9
11
  end
10
12
  end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Translations
5
+ class Cs < Base
6
+ include NumbersAndWords::Translations::Families::Base
7
+ include NumbersAndWords::Translations::Extensions::FractionSignificance
8
+
9
+ def zero(options = {})
10
+ ones(0, options)
11
+ end
12
+
13
+ def ones(number, options = {})
14
+ t([options[:prefix], :ones, options[:gender]].join('.'))[number]
15
+ end
16
+
17
+ def tens(number, options = {})
18
+ t([options[:prefix], :tens, gender_to_use(options)].join('.'))[number]
19
+ end
20
+
21
+ def teens(numbers, options = {})
22
+ t([options[:prefix], :teens, gender_to_use(options)].join('.'))[numbers[0]]
23
+ end
24
+
25
+ def tens_with_ones(numbers, options = {})
26
+ [tens(numbers[1], options), ones(numbers[0], options)].join(' ')
27
+ end
28
+
29
+ def hundreds(number, options = {})
30
+ t([options[:prefix], :hundreds, gender_to_use(options)].join('.'))[number]
31
+ end
32
+
33
+ def integral(number, _options = {})
34
+ t(:integral, count: number)
35
+ end
36
+
37
+ private
38
+
39
+ def ordinal?(options)
40
+ options[:prefix] == :ordinal
41
+ end
42
+
43
+ def gender_to_use(options)
44
+ ordinal?(options) ? options[:gender] : nil
45
+ end
46
+ end
47
+ end
48
+ end
@@ -1,24 +1,26 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Translations
3
5
  class De < Base
4
- include NumbersAndWords::Translations::Families::Latin
6
+ include NumbersAndWords::Translations::Families::Base
5
7
  DEFAULT_POSTFIX = :combine
6
8
 
7
- def ones number, options = {}
9
+ def ones(number, options = {})
8
10
  t([options[:prefix], :ones, options[:postfix] || DEFAULT_POSTFIX].join('.'))[number]
9
11
  end
10
12
 
11
- def tens_with_ones numbers, options = {}
12
- [tens(numbers[1]), ones(numbers[0], options)].reverse.join 'und'
13
+ def tens_with_ones(numbers, options = {})
14
+ [tens(numbers[1]), ones(numbers[0], options)].reverse.join(union)
13
15
  end
14
16
 
15
- def hundreds number, options = {}
16
- [ones(number), t(:hundreds)].join('')
17
+ def hundreds(number, _options = {})
18
+ [ones(number), t(:hundreds)].join
17
19
  end
18
20
 
19
- def zero options = {}
21
+ def zero(_options = {})
20
22
  ones 0
21
23
  end
22
24
  end
23
25
  end
24
- end
26
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Translations
5
+ class EnGb < Base
6
+ include NumbersAndWords::Translations::Families::Latin
7
+ include NumbersAndWords::Translations::Extensions::FractionSignificance
8
+ end
9
+ end
10
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Translations
3
5
  class En < Base
@@ -1,36 +1,37 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Translations
3
5
  class Es < Base
4
- include NumbersAndWords::Translations::Families::Latin
5
-
6
- TENS_CASE = 2
6
+ include NumbersAndWords::Translations::Families::Base
7
+ include NumbersAndWords::Translations::Extensions::FractionSignificance
7
8
 
8
- def one options = {}
9
- t(:one)
9
+ def zero(_options = {})
10
+ t('ones.male')[0]
10
11
  end
11
12
 
12
- def ones number, options = {}
13
- t(:ones)[number]
14
- end
13
+ def ones(number, options = {})
14
+ return if options[:is_one_thousand]
15
+ return t('ones.apocopated') if number == 1 &&
16
+ options[:is_apocopated]
15
17
 
16
- def tens numbers, options = {}
17
- options[:alone] = true if options[:alone].nil?
18
- (numbers == TENS_CASE && options[:alone]) ? t(:twenty) : super(numbers)
18
+ t([:ones, options[:gender]].join('.'))[number]
19
19
  end
20
20
 
21
- def tens_with_ones numbers, options = {}
22
- inter = numbers[1] == TENS_CASE ? "" : " y "
23
- [tens(numbers[1], :alone => false), ones(numbers[0])].join inter
21
+ def tens_with_ones(numbers, options = {})
22
+ super numbers, options.merge(separator: " #{union} ")
24
23
  end
25
24
 
26
- def hundreds number, options = {}
27
- options[:is_hundred] = false if options[:is_hundred].nil?
28
- options[:is_hundred] ? t(:one_hundred) : t(:hundreds)[number - 1]
25
+ def twenties_with_ones(numbers, options = {})
26
+ return t('twenties.apocopated') if options[:is_apocopated]
27
+
28
+ t([:twenties, options[:gender]].join('.'))[numbers[0]]
29
29
  end
30
30
 
31
- def megs capacity, options = {}
32
- options[:is_one] = false if options[:is_one].nil?
33
- options[:is_one] ? t(:mega)[capacity] : t(:megas)[capacity]
31
+ def hundreds(number, options = {})
32
+ return t('hundreds.apocopated') if options[:is_apocopated]
33
+
34
+ t([:hundreds, options[:gender]].join('.'))[number]
34
35
  end
35
36
  end
36
37
  end
@@ -1,19 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Translations
3
5
  class Et < Base
4
6
  include NumbersAndWords::Translations::Families::Latin
5
7
 
6
- def tens_with_ones numbers, options = {}
7
- if numbers[1] == 1
8
- [ones(numbers[0]), tens(numbers[1], :alone => false)].join ''
9
- else
10
- [tens(numbers[1], :alone => false), ones(numbers[0])].join ' '
11
- end
12
- end
13
-
14
- def hundreds number, options = {}
15
- options[:separator] = ''
16
- super number, options
8
+ def hundreds(number, _options = {})
9
+ super number, separator: ''
17
10
  end
18
11
  end
19
12
  end
@@ -1,22 +1,23 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Translations
3
5
  module Extensions
4
6
  module FractionSignificance
5
-
6
- def micros capacity, number = nil, separator = '-'
7
+ def micros(capacity, number = nil)
7
8
  micro, prefix = capacity
8
- micros = number ? t(micro(micro), :count => number) : micro(micro)
9
- [micro_prefix(prefix), micros].compact.join separator
9
+ micros = number ? t(micro(micro), count: number) : micro(micro)
10
+ [micro_prefix(prefix), micros].compact.join(t('micro_prefix.union'))
10
11
  end
11
12
 
12
- def micro capacity
13
+ def micro(capacity)
13
14
  t(:micro)[capacity]
14
15
  end
15
16
 
16
- def micro_prefix capacity
17
+ def micro_prefix(capacity)
17
18
  case capacity
18
- when 2 then t(:hundreds)
19
- when 1 then tens(1)
19
+ when 2 then t('micro_prefix.hundreds')
20
+ when 1 then t('micro_prefix.tens')
20
21
  end
21
22
  end
22
23
  end