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
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Languages
7
+ class Pt < Base
8
+ def hundreds
9
+ super({ is_hundred: hundred?, is_one_hundred: one_hundred? })
10
+ end
11
+
12
+ def megs
13
+ super({ number: @figures.number_in_capacity(@current_capacity) })
14
+ end
15
+
16
+ private
17
+
18
+ def hundred?
19
+ figures[0].zero? && figures[1].zero? && simple_number_to_words.empty?
20
+ end
21
+
22
+ def one_hundred?
23
+ hundred? && figures[2] == 1
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
@@ -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 Se < Base
6
- include Families::Latin
7
8
  end
8
9
  end
9
10
  end
@@ -1,9 +1,27 @@
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 Tr < Base
6
- include Families::Latin
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
+ private
17
+
18
+ def one?
19
+ words_in_capacity(@current_capacity) == [translations.ones(1)]
20
+ end
21
+
22
+ def thousand?
23
+ @current_capacity == FiguresArray::THOUSAND_CAPACITY
24
+ end
7
25
  end
8
26
  end
9
27
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
@@ -0,0 +1,100 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Languages
7
+ class Vi < Base
8
+ def print_words
9
+ value = super
10
+ remove_billion_noice(value)
11
+ end
12
+
13
+ def strings_logic
14
+ if fractional?
15
+ if fraction_number_zeros_leading.zero?
16
+ @options.options[:integeral] = true
17
+ integeral_string_logic
18
+ else
19
+ fractional_with_zero_leading_string_logic
20
+ end
21
+ else
22
+ integeral_string_logic
23
+ end
24
+ end
25
+
26
+ def fractional_with_zero_leading_string_logic
27
+ leading_zeros = [0] * fraction_number_zeros_leading
28
+ (@figures + leading_zeros).map(&:to_words)
29
+ end
30
+
31
+ def integeral_string_logic
32
+ if @figures.capacity_count
33
+ number_without_capacity_to_words + complex_number_to_words
34
+ elsif hundreds?
35
+ hundreds_number_to_words
36
+ elsif @figures.tens || @figures.ones
37
+ simple_number_to_words
38
+ else
39
+ []
40
+ end
41
+ end
42
+
43
+ def hundreds?
44
+ @figures.hundreds ||
45
+ (@figures.size == 3 && (@figures.teens || @figures.tens || @figures.ones))
46
+ end
47
+
48
+ def hundreds(options = {})
49
+ if @figures.hundreds.to_i.zero?
50
+ translate :hundreds, 0, options
51
+ else
52
+ super
53
+ end
54
+ end
55
+
56
+ def ones(options = {})
57
+ if @figures.capacity_length >= 2
58
+ ones_union(options)
59
+ else
60
+ super
61
+ end
62
+ end
63
+
64
+ def ones_union(options = {})
65
+ translate :ones_union, @figures.ones, options
66
+ end
67
+
68
+ def fractional?
69
+ !@options.options[:fractional].nil? && !@options.options[:integeral]
70
+ end
71
+
72
+ def fraction_length
73
+ return 0 unless @options.options[:fractional]
74
+
75
+ @options.options[:fractional][:length]
76
+ end
77
+
78
+ def fraction_number_zeros_leading
79
+ fraction_length - @figures.length
80
+ end
81
+
82
+ def remove_billion_noice(value)
83
+ parts = value.split(billion_unit).map(&:strip)
84
+ if value.end_with?(billion_unit)
85
+ parts.insert(-1, billion_unit).join(' ')
86
+ else
87
+ return value if parts.size <= 2
88
+
89
+ parts.insert(-2, billion_unit).join(' ')
90
+ end
91
+ end
92
+
93
+ def billion_unit
94
+ translate :mega, 3
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
@@ -1,37 +1,41 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'numbers_and_words/strategies/figures_converter/languages/families/helpers'
2
4
  require 'numbers_and_words/strategies/figures_converter/languages/families/base'
3
-
4
5
  require 'numbers_and_words/strategies/figures_converter/languages/base'
5
6
 
6
- require 'numbers_and_words/strategies/figures_converter/languages/families/latin'
7
-
7
+ require 'numbers_and_words/strategies/figures_converter/languages/cs'
8
+ require 'numbers_and_words/strategies/figures_converter/languages/de'
8
9
  require 'numbers_and_words/strategies/figures_converter/languages/en'
9
- require 'numbers_and_words/strategies/figures_converter/languages/en_gb'
10
+ require 'numbers_and_words/strategies/figures_converter/languages/en-GB'
11
+ require 'numbers_and_words/strategies/figures_converter/languages/es'
12
+ require 'numbers_and_words/strategies/figures_converter/languages/et'
10
13
  require 'numbers_and_words/strategies/figures_converter/languages/fr'
11
14
  require 'numbers_and_words/strategies/figures_converter/languages/hu'
12
- require 'numbers_and_words/strategies/figures_converter/languages/et'
13
- require 'numbers_and_words/strategies/figures_converter/languages/se'
14
15
  require 'numbers_and_words/strategies/figures_converter/languages/it'
16
+ require 'numbers_and_words/strategies/figures_converter/languages/ka'
17
+ require 'numbers_and_words/strategies/figures_converter/languages/lt'
18
+ require 'numbers_and_words/strategies/figures_converter/languages/lv'
15
19
  require 'numbers_and_words/strategies/figures_converter/languages/nl'
20
+ require 'numbers_and_words/strategies/figures_converter/languages/pt-BR'
21
+ require 'numbers_and_words/strategies/figures_converter/languages/pt'
22
+ require 'numbers_and_words/strategies/figures_converter/languages/se'
16
23
  require 'numbers_and_words/strategies/figures_converter/languages/tr'
17
- require 'numbers_and_words/strategies/figures_converter/languages/es'
18
- require 'numbers_and_words/strategies/figures_converter/languages/lv'
19
- require 'numbers_and_words/strategies/figures_converter/languages/lt'
20
- require 'numbers_and_words/strategies/figures_converter/languages/de'
24
+ require 'numbers_and_words/strategies/figures_converter/languages/hy'
25
+ require 'numbers_and_words/strategies/figures_converter/languages/kz'
21
26
 
22
27
  require 'numbers_and_words/strategies/figures_converter/languages/families/cyrillic'
23
-
24
28
  require 'numbers_and_words/strategies/figures_converter/languages/ru'
25
29
  require 'numbers_and_words/strategies/figures_converter/languages/ua'
26
-
30
+ require 'numbers_and_words/strategies/figures_converter/languages/vi'
27
31
 
28
32
  module NumbersAndWords
29
33
  module Strategies
30
34
  module FiguresConverter
31
35
  module Languages
32
36
  class << self
33
- def factory strategy
34
- "#{name}::#{I18n.language_class_name}".constantize.new strategy
37
+ def factory(strategy)
38
+ Object.const_get("#{name}::#{I18n.language_class_name}").new strategy
35
39
  end
36
40
  end
37
41
  end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Options
7
+ module Base
8
+ class Gender
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? ? @options[:gender].to_sym : :male
18
+ end
19
+
20
+ private
21
+
22
+ def active?
23
+ @options[:gender]
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Options
7
+ module Base
8
+ class Ordinal
9
+ def initialize(proxy, *_args)
10
+ @strategy = proxy.strategy
11
+ @options = proxy.options
12
+ end
13
+
14
+ def result
15
+ return :ordinal if active?
16
+ end
17
+
18
+ private
19
+
20
+ def active?
21
+ @options[:ordinal]
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Options
7
+ module Base
8
+ class RemoveZero
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[:remove_zero]
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,4 +1,5 @@
1
- require 'numbers_and_words/strategies/figures_converter/options/en_gb/hundreds_with_union'
2
- require 'numbers_and_words/strategies/figures_converter/options/en_gb/remove_hyphen'
3
- require 'numbers_and_words/strategies/figures_converter/options/en_gb/ordinal'
4
- require 'numbers_and_words/strategies/figures_converter/options/en_gb/remove_zero'
1
+ # frozen_string_literal: true
2
+
3
+ require 'numbers_and_words/strategies/figures_converter/options/base/gender'
4
+ require 'numbers_and_words/strategies/figures_converter/options/base/ordinal'
5
+ require 'numbers_and_words/strategies/figures_converter/options/base/remove_zero'
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Options
7
+ module Cs
8
+ class Gender < Base::Gender
9
+ def result
10
+ active? ? @options[:gender].to_sym : :female
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ 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 Cs
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 Cs
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/cs/gender'
4
+ require 'numbers_and_words/strategies/figures_converter/options/cs/remove_zero'
5
+ require 'numbers_and_words/strategies/figures_converter/options/cs/ordinal'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
@@ -6,12 +8,12 @@ module NumbersAndWords
6
8
  class HundredsWithUnion
7
9
  attr_accessor :strategy, :options
8
10
 
9
- def initialize proxy, *args, &block
11
+ def initialize(proxy, *_args)
10
12
  @strategy = proxy.strategy
11
13
  @options = proxy.options
12
14
  end
13
15
 
14
- def modify_or_leave hundreds
16
+ def modify_or_leave(hundreds)
15
17
  hundreds = "#{hundreds} #{translations.union}" if active? && !round_hundred?
16
18
  hundreds
17
19
  end
@@ -34,4 +36,4 @@ module NumbersAndWords
34
36
  end
35
37
  end
36
38
  end
37
- end
39
+ end
@@ -1,29 +1,22 @@
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 En
6
- class Ordinal
8
+ class Ordinal < Base::Ordinal
7
9
  ZERO_TYPE = :zero
8
10
  HUNDRED_TYPE = :hundreds
9
11
  MEGS_TYPE = :megs
10
12
 
11
- def initialize proxy, *args, &block
12
- @strategy = proxy.strategy
13
- @options = proxy.options
14
- end
15
-
16
- def result type
13
+ def result(type)
17
14
  @type = type
18
- MEGS_TYPE != type ? check_simple_numbers : check_megs_numbers
15
+ type == MEGS_TYPE ? check_megs_numbers : check_simple_numbers
19
16
  end
20
17
 
21
18
  private
22
19
 
23
- def active?
24
- @options[:ordinal]
25
- end
26
-
27
20
  def check_simple_numbers
28
21
  :ordinal if simple_numbers_condition && active?
29
22
  end
@@ -34,7 +27,8 @@ module NumbersAndWords
34
27
 
35
28
  def simple_numbers_condition
36
29
  current_capacity.nil? &&
37
- (HUNDRED_TYPE != @type || (HUNDRED_TYPE == @type && simple_number_to_words.empty?))
30
+ (@type != HUNDRED_TYPE ||
31
+ (@type == HUNDRED_TYPE && simple_number_to_words.empty?))
38
32
  end
39
33
 
40
34
  def megs_numbers_condition
@@ -57,4 +51,4 @@ module NumbersAndWords
57
51
  end
58
52
  end
59
53
  end
60
- end
54
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Options
7
+ module En
8
+ class Pronounced
9
+ attr_accessor :strategy, :options
10
+
11
+ def initialize(proxy, *_args)
12
+ @strategy = proxy.strategy
13
+ @options = proxy.options
14
+ end
15
+
16
+ def active?
17
+ @options[:pronounced]
18
+ end
19
+
20
+ def process(language, figures)
21
+ if figures.capacity_count
22
+ handle_thousands language, figures
23
+ elsif figures.hundreds
24
+ handle_hundreds language, figures
25
+ elsif figures.tens || figures.ones
26
+ language.simple_number_to_words
27
+ else
28
+ []
29
+ end
30
+ end
31
+
32
+ def handle_thousands(language, figures)
33
+ _units, _tens, hundreds, thousands = *figures.to_a.dup
34
+ if hundreds.zero?
35
+ language.number_without_capacity_to_words + language.complex_number_to_words
36
+ else
37
+ result = tens_with_oh language, figures
38
+ result.push "#{thousands}#{hundreds}".to_i.to_words
39
+ end
40
+ end
41
+
42
+ def handle_hundreds(language, figures)
43
+ _units, _tens, hundreds = *figures.to_a.dup
44
+ result = tens_with_oh language, figures
45
+ result.push hundreds.to_words
46
+ end
47
+
48
+ def tens_with_oh(language, figures)
49
+ units, tens = *figures.to_a.dup
50
+ return (units.zero? ? ['hundred'] : [language.ones, 'oh']) if tens.zero?
51
+ return [language.teens] if figures.teens
52
+
53
+ [language.complex_tens]
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
@@ -6,12 +8,11 @@ module NumbersAndWords
6
8
  class RemoveHyphen
7
9
  attr_accessor :strategy, :options
8
10
 
9
- def initialize proxy, *args, &block
11
+ def initialize(proxy, *_args)
10
12
  @strategy = proxy.strategy
11
13
  @options = proxy.options
12
14
  end
13
15
 
14
-
15
16
  def result
16
17
  active? ? ' ' : '-'
17
18
  end
@@ -26,4 +27,4 @@ module NumbersAndWords
26
27
  end
27
28
  end
28
29
  end
29
- end
30
+ end
@@ -1,29 +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 En
6
- class RemoveZero
7
- attr_accessor :strategy, :options
8
-
9
- def initialize proxy, *args, &block
10
- @strategy = proxy.strategy
11
- @options = proxy.options
12
- end
13
-
14
-
15
- def result
16
- active?
17
- end
18
-
19
- private
20
-
21
- def active?
22
- @options[:remove_zero]
23
- end
8
+ class RemoveZero < Base::RemoveZero
24
9
  end
25
10
  end
26
11
  end
27
12
  end
28
13
  end
29
- end
14
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
@@ -9,4 +11,4 @@ module NumbersAndWords
9
11
  end
10
12
  end
11
13
  end
12
- end
14
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
@@ -9,4 +11,4 @@ module NumbersAndWords
9
11
  end
10
12
  end
11
13
  end
12
- 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 EnGb
8
+ class Pronounced < En::Pronounced
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
@@ -9,4 +11,4 @@ module NumbersAndWords
9
11
  end
10
12
  end
11
13
  end
12
- end
14
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NumbersAndWords
2
4
  module Strategies
3
5
  module FiguresConverter
@@ -9,4 +11,4 @@ module NumbersAndWords
9
11
  end
10
12
  end
11
13
  end
12
- end
14
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'numbers_and_words/strategies/figures_converter/options/en-GB/hundreds_with_union'
4
+ require 'numbers_and_words/strategies/figures_converter/options/en-GB/remove_hyphen'
5
+ require 'numbers_and_words/strategies/figures_converter/options/en-GB/ordinal'
6
+ require 'numbers_and_words/strategies/figures_converter/options/en-GB/pronounced'
7
+ require 'numbers_and_words/strategies/figures_converter/options/en-GB/remove_zero'