numbers_and_words 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. checksums.yaml +15 -0
  2. data/README.rdoc +90 -1
  3. data/lib/numbers_and_words.rb +4 -3
  4. data/lib/numbers_and_words/core_ext.rb +1 -0
  5. data/lib/numbers_and_words/core_ext/array.rb +1 -1
  6. data/lib/numbers_and_words/core_ext/float.rb +5 -0
  7. data/lib/numbers_and_words/core_ext/integer.rb +2 -9
  8. data/lib/numbers_and_words/helper_classes.rb +2 -0
  9. data/lib/numbers_and_words/helper_classes/array_extensions/helpers.rb +81 -0
  10. data/lib/numbers_and_words/helper_classes/array_extensions/validations.rb +19 -0
  11. data/lib/numbers_and_words/helper_classes/figures_array.rb +18 -0
  12. data/lib/numbers_and_words/helper_classes/words_array.rb +11 -0
  13. data/lib/numbers_and_words/i18n/locales/numbers.en.yml +48 -0
  14. data/lib/numbers_and_words/i18n/locales/numbers.es.yml +15 -0
  15. data/lib/numbers_and_words/i18n/locales/numbers.hu.yml +16 -0
  16. data/lib/numbers_and_words/i18n/locales/numbers.ru.yml +27 -3
  17. data/lib/numbers_and_words/i18n/locales/numbers.se.yml +7 -0
  18. data/lib/numbers_and_words/i18n/locales/numbers.ua.yml +14 -2
  19. data/lib/numbers_and_words/i18n/pluralization.rb +1 -0
  20. data/lib/numbers_and_words/i18n/plurals/es.rb +11 -0
  21. data/lib/numbers_and_words/strategies.rb +16 -11
  22. data/lib/numbers_and_words/strategies/array_joiner.rb +31 -0
  23. data/lib/numbers_and_words/strategies/figures_converter.rb +33 -0
  24. data/lib/numbers_and_words/strategies/figures_converter/decorators.rb +39 -0
  25. data/lib/numbers_and_words/strategies/figures_converter/decorators/base.rb +18 -0
  26. data/lib/numbers_and_words/strategies/figures_converter/decorators/en.rb +3 -0
  27. data/lib/numbers_and_words/strategies/figures_converter/decorators/en/base.rb +12 -0
  28. data/lib/numbers_and_words/strategies/figures_converter/decorators/en/fractional.rb +38 -0
  29. data/lib/numbers_and_words/strategies/figures_converter/decorators/en/integral.rb +12 -0
  30. data/lib/numbers_and_words/strategies/figures_converter/decorators/hu.rb +3 -0
  31. data/lib/numbers_and_words/strategies/figures_converter/decorators/hu/base.rb +12 -0
  32. data/lib/numbers_and_words/strategies/figures_converter/decorators/hu/fractional.rb +38 -0
  33. data/lib/numbers_and_words/strategies/figures_converter/decorators/hu/integral.rb +12 -0
  34. data/lib/numbers_and_words/strategies/figures_converter/decorators/ru.rb +3 -0
  35. data/lib/numbers_and_words/strategies/figures_converter/decorators/ru/base.rb +12 -0
  36. data/lib/numbers_and_words/strategies/figures_converter/decorators/ru/fractional.rb +39 -0
  37. data/lib/numbers_and_words/strategies/figures_converter/decorators/ru/integral.rb +27 -0
  38. data/lib/numbers_and_words/strategies/figures_converter/decorators/ua.rb +3 -0
  39. data/lib/numbers_and_words/strategies/figures_converter/decorators/ua/base.rb +12 -0
  40. data/lib/numbers_and_words/strategies/figures_converter/decorators/ua/fractional.rb +39 -0
  41. data/lib/numbers_and_words/strategies/figures_converter/decorators/ua/integral.rb +27 -0
  42. data/lib/numbers_and_words/strategies/figures_converter/languages.rb +39 -0
  43. data/lib/numbers_and_words/strategies/figures_converter/languages/base.rb +29 -0
  44. data/lib/numbers_and_words/strategies/figures_converter/languages/en.rb +48 -0
  45. data/lib/numbers_and_words/strategies/figures_converter/languages/es.rb +37 -0
  46. data/lib/numbers_and_words/strategies/figures_converter/languages/families/base.rb +77 -0
  47. data/lib/numbers_and_words/strategies/figures_converter/languages/families/cyrillic.rb +34 -0
  48. data/lib/numbers_and_words/strategies/figures_converter/languages/families/helpers.rb +36 -0
  49. data/lib/numbers_and_words/strategies/figures_converter/languages/families/latin.rb +13 -0
  50. data/lib/numbers_and_words/strategies/figures_converter/languages/fr.rb +37 -0
  51. data/lib/numbers_and_words/strategies/figures_converter/languages/hu.rb +63 -0
  52. data/lib/numbers_and_words/strategies/figures_converter/languages/it.rb +11 -0
  53. data/lib/numbers_and_words/strategies/figures_converter/languages/nl.rb +26 -0
  54. data/lib/numbers_and_words/strategies/figures_converter/languages/ru.rb +11 -0
  55. data/lib/numbers_and_words/strategies/figures_converter/languages/se.rb +11 -0
  56. data/lib/numbers_and_words/strategies/figures_converter/languages/tr.rb +11 -0
  57. data/lib/numbers_and_words/strategies/figures_converter/languages/ua.rb +11 -0
  58. data/lib/numbers_and_words/strategies/figures_converter/options.rb +41 -0
  59. data/lib/numbers_and_words/strategies/figures_converter/options/en.rb +4 -0
  60. data/lib/numbers_and_words/strategies/figures_converter/options/en/hundreds_with_union.rb +33 -0
  61. data/lib/numbers_and_words/strategies/figures_converter/options/en/ordinal.rb +60 -0
  62. data/lib/numbers_and_words/strategies/figures_converter/options/en/remove_hyphen.rb +29 -0
  63. data/lib/numbers_and_words/strategies/figures_converter/options/en/remove_zero.rb +29 -0
  64. data/lib/numbers_and_words/strategies/figures_converter/options/hu.rb +1 -0
  65. data/lib/numbers_and_words/strategies/figures_converter/options/hu/ordinal.rb +60 -0
  66. data/lib/numbers_and_words/strategies/figures_converter/options/ru.rb +1 -0
  67. data/lib/numbers_and_words/strategies/figures_converter/options/ru/gender.rb +28 -0
  68. data/lib/numbers_and_words/strategies/figures_converter/options/ua.rb +1 -0
  69. data/lib/numbers_and_words/strategies/figures_converter/options/ua/gender.rb +28 -0
  70. data/lib/numbers_and_words/translations.rb +25 -0
  71. data/lib/numbers_and_words/{translations_helpers → translations}/base.rb +2 -2
  72. data/lib/numbers_and_words/translations/en.rb +8 -0
  73. data/lib/numbers_and_words/translations/es.rb +37 -0
  74. data/lib/numbers_and_words/translations/extensions/fraction_significance.rb +25 -0
  75. data/lib/numbers_and_words/translations/families/base.rb +33 -0
  76. data/lib/numbers_and_words/translations/families/cyrillic.rb +29 -0
  77. data/lib/numbers_and_words/translations/families/latin.rb +23 -0
  78. data/lib/numbers_and_words/translations/fr.rb +29 -0
  79. data/lib/numbers_and_words/translations/hu.rb +26 -0
  80. data/lib/numbers_and_words/translations/it.rb +15 -0
  81. data/lib/numbers_and_words/translations/nl.rb +15 -0
  82. data/lib/numbers_and_words/translations/ru.rb +25 -0
  83. data/lib/numbers_and_words/translations/se.rb +11 -0
  84. data/lib/numbers_and_words/translations/tr.rb +11 -0
  85. data/lib/numbers_and_words/translations/ua.rb +21 -0
  86. data/lib/numbers_and_words/version.rb +1 -1
  87. data/lib/numbers_and_words/wrappers.rb +2 -0
  88. data/lib/numbers_and_words/wrappers/float.rb +60 -0
  89. data/lib/numbers_and_words/wrappers/integer.rb +21 -0
  90. metadata +81 -44
  91. data/lib/numbers_and_words/array_additions.rb +0 -2
  92. data/lib/numbers_and_words/array_additions/helpers.rb +0 -44
  93. data/lib/numbers_and_words/array_additions/validations.rb +0 -9
  94. data/lib/numbers_and_words/figures_array.rb +0 -15
  95. data/lib/numbers_and_words/strategies/base.rb +0 -18
  96. data/lib/numbers_and_words/strategies/en.rb +0 -8
  97. data/lib/numbers_and_words/strategies/families/base.rb +0 -71
  98. data/lib/numbers_and_words/strategies/families/cyrillic.rb +0 -18
  99. data/lib/numbers_and_words/strategies/families/latin.rb +0 -9
  100. data/lib/numbers_and_words/strategies/fr.rb +0 -32
  101. data/lib/numbers_and_words/strategies/it.rb +0 -8
  102. data/lib/numbers_and_words/strategies/nl.rb +0 -23
  103. data/lib/numbers_and_words/strategies/ru.rb +0 -8
  104. data/lib/numbers_and_words/strategies/tr.rb +0 -8
  105. data/lib/numbers_and_words/strategies/ua.rb +0 -8
  106. data/lib/numbers_and_words/translations_helpers.rb +0 -11
  107. data/lib/numbers_and_words/translations_helpers/en.rb +0 -12
  108. data/lib/numbers_and_words/translations_helpers/families/base.rb +0 -30
  109. data/lib/numbers_and_words/translations_helpers/families/cyrillic.rb +0 -28
  110. data/lib/numbers_and_words/translations_helpers/families/latin.rb +0 -23
  111. data/lib/numbers_and_words/translations_helpers/fr.rb +0 -34
  112. data/lib/numbers_and_words/translations_helpers/it.rb +0 -16
  113. data/lib/numbers_and_words/translations_helpers/nl.rb +0 -18
  114. data/lib/numbers_and_words/translations_helpers/ru.rb +0 -8
  115. data/lib/numbers_and_words/translations_helpers/tr.rb +0 -8
  116. data/lib/numbers_and_words/translations_helpers/ua.rb +0 -8
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MGQyNDhhNTY5MjhjZTcyYjZjMjg0Y2RhNGVmYWJiNzAwZTU4NWZjNw==
5
+ data.tar.gz: !binary |-
6
+ NzNkZTQ1YTUzMDRkMDI2MTY4MjMzZmU1ZDI0ZWZkNGU4MjBlMzFiYQ==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ MDhjMTY3MTg4Mjc1NTBhNDczOTVlYjJhNWMxOWIyOTBjNDI4MjBhYmQxNWRl
10
+ MGQ1YWMyNzJkMzBkMjAwYTdhMzcyZTAzMjExZGI5Yzg2ZmFiN2ExZTQ1Yjkw
11
+ NjJmMzk5YmJkMzljOWRiMjMxYjEzZTdmZDgxNDJiYzQ4MzcyZjM=
12
+ data.tar.gz: !binary |-
13
+ NDdmN2Y5ODgyYzA4YjI0OWVlM2ZmNjgxMWEyODE5NGJmNDkyOWExZjJjZGZk
14
+ YWQzMWIzN2MzOTUwNmJkYzkxNjhhZjBiODNmNGVmNDk4ZWFjYjM1YzZhOTI3
15
+ ZGViYzkyNWMxOTU3MzY2ZDM2ZjlkY2Q0ODNhOWFhOWFjZWI0MzE=
data/README.rdoc CHANGED
@@ -1,4 +1,10 @@
1
- == numbers_and_words {<img src="https://secure.travis-ci.org/kslazarev/numbers_and_words.png" />}[http://travis-ci.org/kslazarev/numbers_and_words] {<img src="https://codeclimate.com/badge.png" />}[https://codeclimate.com/github/kslazarev/numbers_and_words]
1
+ == numbers_and_words
2
+
3
+ {<img src="https://badge.fury.io/rb/numbers_and_words.png" alt="Gem Version" />}[http://badge.fury.io/rb/numbers_and_words]
4
+ {<img src="https://gemnasium.com/kslazarev/numbers_and_words.png" alt="Dependency Status" />}[https://gemnasium.com/kslazarev/numbers_and_words]
5
+ {<img src="https://codeclimate.com/github/kslazarev/numbers_and_words.png" />}[https://codeclimate.com/github/kslazarev/numbers_and_words]
6
+ {<img src="https://secure.travis-ci.org/kslazarev/numbers_and_words.png" />}[http://travis-ci.org/kslazarev/numbers_and_words]
7
+ {<img src="https://coveralls.io/repos/kslazarev/numbers_and_words/badge.png?branch=development" alt="Coverage Status" />}[https://coveralls.io/r/kslazarev/numbers_and_words]
2
8
 
3
9
  Convert numbers to words using the I18n library.
4
10
 
@@ -6,15 +12,20 @@ Convert numbers to words using the I18n library.
6
12
 
7
13
  Converti les nombres en lettres en utilisant la librairie I18n.
8
14
 
15
+ Számok betűvel írva az I18n könyvtár segítségével.
16
+
9
17
  == Supported Languages / Языки / Langues Supportées
10
18
 
11
19
  * English
20
+ * Spanish
12
21
  * Русский
13
22
  * Français
14
23
  * Українська
24
+ * Magyar
15
25
  * Türkçe**
16
26
  * Italiano**
17
27
  * Nederlands**
28
+ * Swedish**
18
29
 
19
30
  ** Experimental
20
31
 
@@ -23,70 +34,147 @@ Converti les nombres en lettres en utilisant la librairie I18n.
23
34
  I18n.with_locale(:en) { 42.to_words }
24
35
  => "forty-two"
25
36
 
37
+ I18n.with_locale(:es) { 42.to_words }
38
+ => "cuarenta y dos"
39
+
26
40
  I18n.with_locale(:ru) { 42.to_words }
27
41
  => "сорок два"
28
42
 
29
43
  I18n.with_locale(:fr) { 42.to_words }
30
44
  => "quarante-deux"
31
45
 
46
+ I18n.with_locale(:hu) { 42.to_words }
47
+ => "negyvenkettő"
48
+
32
49
  21.to_words
33
50
  => "twenty-one"
51
+ => "veintiuno"
34
52
  => "двадцать один"
35
53
  => "vingt et un"
36
54
  => "двадцять один"
55
+ => "huszonegy"
37
56
  => "yirmi bir"
38
57
  => "ventiuno"
39
58
  => "éénentwintig"
59
+ => "tjugo-en"
40
60
 
41
61
  231.to_words
42
62
  => "two hundred thirty-one"
63
+ => "doscientos treinta y uno"
43
64
  => "двести тридцать один"
44
65
  => "deux cent trente-trois"
45
66
  => "двiстi тридцять один"
67
+ => "kettőszázharmincegy"
46
68
  => "iki yüz otuz bir"
47
69
  => "2 cento trentauno"
48
70
  => "tweehonderdéénendertig"
71
+ => "två hundra trettio-en"
49
72
 
50
73
  4030.to_words
51
74
  => "four thousand thirty"
75
+ => "cuatro mil treinta"
52
76
  => "четыре тысячи тридцать"
53
77
  => "quatre mille trente"
54
78
  => "чотири тисячi тридцять"
79
+ => "négyezer-harminc"
55
80
  => "dört bin otuz"
56
81
  => "quattro mille trenta"
57
82
  => "vierthousanddertig"
83
+ => "fyra tusen trettio"
58
84
 
59
85
  1000100.to_words
60
86
  => "one million one hundred"
87
+ => "un millón cien"
61
88
  => "один миллион сто"
62
89
  => "un million cent"
63
90
  => "один мiльйон сто"
91
+ => "egymillió-egyszáz"
64
92
  => "bir milyon bir yüz"
65
93
  => "uno milione 1 cento"
66
94
  => "één miljoen honderd"
95
+ => "en miljoner en hundra"
67
96
 
68
97
  1000000000000000000000000000000000.to_words
69
98
  => "one decillion"
99
+ => "un quintillardo"
70
100
  => "один дециллион"
71
101
  => "un quintilliard"
72
102
  => "один децильйон"
103
+ => "egykvintilliárd"
73
104
  => "bir desilyon"
74
105
  => "uno decillion"
75
106
  => "één decillion"
107
+ => "en decillion"
76
108
 
77
109
  [1, 2, 3].to_words
78
110
  => ["one", "two", "three"]
111
+ => ["uno", "dos", "tres"]
79
112
  => ["один", "два", "три"]
80
113
  => ["un", "deux", "trois"]
114
+ => ["egy", "kettő", "három"]
81
115
 
82
116
  [11, 22, 133].to_words
83
117
  => ["eleven", "twenty-two", "one hundred thirty-three"]
118
+ => ["once", "veintidos", "ciento treinta y tres"]
84
119
  => ["одиннадцать", "двадцать два", "сто тридцать три"]
85
120
  => ["onze", "vingt-deux", "cent trente-trois"]
86
121
  => ["одинадцять", "двадцять два", "сто тридцять три"]
122
+ => ["tizenegy", "huszonkettő", "egyszázharminchárom"]
87
123
  => ["on bir", "yirmi iki", "bir yüz otuz üç"]
88
124
  => ["undici", "ventidue", "1 cento trentatre"]
89
125
  => ["elf", "tweeentwintig", "honderddrieendertig"]
126
+ => ["elva", "tjugo-två", "en hundra trettio-tre"]
127
+
128
+ 21.77.to_words
129
+ => "twenty-one and seventy-seven hundredths"
130
+ => "двадцать одна целая и семьдесят семь сотых"
131
+ => "двадцять одна цiла i сiмдесят сiм сотих"
132
+ => "huszonegy egész hetvenhét század"
133
+
134
+ == Language options / Языковые опции
135
+
136
+ * English
137
+
138
+ Ordinal form: (ordinal: [true || false])
139
+
140
+ I18n.with_locale(:en) { 21.to_words ordinal: true }
141
+ => "twenty-first"
142
+
143
+ Remove hyphen between tens and ones: (remove_hyphen: [true || false])
144
+
145
+ I18n.with_locale(:en) { 21.to_words remove_hyphen: true }
146
+ => "twenty one"
147
+
148
+ Add 'and' between hundreds and tens: (hundreds_with_union: [true || false])
149
+
150
+ I18n.with_locale(:en) { 111.to_words hundreds_with_union: true }
151
+ => "one hundred and eleven"
152
+
153
+ Remove 'zero' from integral part of float: (remove_zero: [true || false])
154
+
155
+ I18n.with_locale(:en) { 0.7.to_words remove_zero: true }
156
+ => "seven tenths"
157
+
158
+ * Russian
159
+
160
+ Change gender form: (gender: [:female || :male || :neuter])
161
+
162
+ I18n.with_locale(:ru) { 1001.to_words gender: :neuter }
163
+ => "одна тысяча одно"
164
+
165
+ * Ukranian
166
+
167
+ Change gender form: (gender: [:female || :male || :neuter])
168
+
169
+ I18n.with_locale(:ru) { 1001.to_words gender: :neuter }
170
+ => "одна тисяча одне"
171
+
172
+ * Hungarian
173
+
174
+ Ordinal form: (ordinal: [true || false])
175
+
176
+ I18n.with_locale(:hu) { 21.to_words ordinal: true }
177
+ => "huszonegyedik"
90
178
 
91
179
  == Requirements / Требования / Configuration Requise
92
180
 
@@ -115,3 +203,4 @@ Send a pull request. Bonus points for topic branches.
115
203
  * Daniel Doubrovkine (link:http://github.com/dblock)
116
204
  * Sergey Shkirando (mailto:shkirando.s@yandex.ru)
117
205
  * Ulrich Sossou (Github[http://github.com/sorich87], {Personal Page}[http://ulrichsossou.com/])
206
+ * eLod (link:http://github.com/eLod)
@@ -2,12 +2,13 @@ require 'rubygems'
2
2
  require 'i18n'
3
3
  require 'i18n/backend/pluralization'
4
4
  require 'active_support/inflector'
5
+ require 'active_support/core_ext/object'
5
6
 
6
- require 'numbers_and_words/translations_helpers'
7
+ require 'numbers_and_words/translations'
7
8
  require 'numbers_and_words/strategies'
8
- require 'numbers_and_words/array_additions'
9
- require 'numbers_and_words/figures_array'
9
+ require 'numbers_and_words/helper_classes'
10
10
  require 'numbers_and_words/core_ext'
11
+ require 'numbers_and_words/wrappers'
11
12
  require 'numbers_and_words/i18n'
12
13
  require 'numbers_and_words/version'
13
14
 
@@ -1,2 +1,3 @@
1
1
  require 'numbers_and_words/core_ext/integer'
2
+ require 'numbers_and_words/core_ext/float'
2
3
  require 'numbers_and_words/core_ext/array'
@@ -1,5 +1,5 @@
1
1
  class Array
2
- def to_words
2
+ def to_words options = {}
3
3
  map &:to_words
4
4
  end
5
5
 
@@ -0,0 +1,5 @@
1
+ class Float
2
+ def to_words options = {}
3
+ NumbersAndWords::Wrappers::Float.new(self).to_words options
4
+ end
5
+ end
@@ -1,12 +1,5 @@
1
1
  class Integer
2
-
3
- def to_words
4
- to_figures_array.to_words NumbersAndWords::Strategies::Base.factory
5
- end
6
-
7
- private
8
-
9
- def to_figures_array
10
- to_s.split(//).map(&:to_i).to_figures
2
+ def to_words options = {}
3
+ NumbersAndWords::Wrappers::Integer.new(self).to_words options
11
4
  end
12
5
  end
@@ -0,0 +1,2 @@
1
+ require 'numbers_and_words/helper_classes/figures_array'
2
+ require 'numbers_and_words/helper_classes/words_array'
@@ -0,0 +1,81 @@
1
+ module NumbersAndWords
2
+ module ArrayExtensions
3
+ module Helpers
4
+ MICRO_CAPACITY_SHIFT = 2
5
+ FIGURES_IN_CAPACITY = 3
6
+ THOUSAND_CAPACITY = 1
7
+ ONES_SHIFT = 1
8
+
9
+ def capacity_length
10
+ length - ONES_SHIFT
11
+ end
12
+
13
+ def capacity_count
14
+ count = capacity_length / FIGURES_IN_CAPACITY
15
+ 0 == count ? nil : count
16
+ end
17
+
18
+ def figures_array_in_capacity capacity
19
+ self[capacity * FIGURES_IN_CAPACITY, FIGURES_IN_CAPACITY]
20
+ end
21
+
22
+ def number_in_capacity capacity
23
+ figures_array_in_capacity(capacity).reverse.join.to_i
24
+ end
25
+
26
+ def is_a_thousand_capacity? capacity
27
+ THOUSAND_CAPACITY == capacity
28
+ end
29
+
30
+ def ones
31
+ self[0].to_i if 0 < self[0].to_i
32
+ end
33
+
34
+ def teens
35
+ tens_with_ones if 1 == tens
36
+ end
37
+
38
+ def tens
39
+ self[1].to_i if self[1] && 0 < self[1].to_i
40
+ end
41
+
42
+ def tens_with_ones
43
+ [ones, tens] if ones && tens
44
+ end
45
+
46
+ def hundreds
47
+ self[2].to_i if 0 < self[2].to_i
48
+ end
49
+
50
+ def sub_capacity
51
+ capacity_length % FIGURES_IN_CAPACITY
52
+ end
53
+
54
+ def fraction_index
55
+ index '.'
56
+ end
57
+
58
+ def fraction_capacity
59
+ [fraction_capacity_count, fraction_sub_capacity]
60
+ end
61
+
62
+ def fraction_capacity_count
63
+ capacity_count.nil? ? sub_capacity : capacity_count + MICRO_CAPACITY_SHIFT
64
+ end
65
+
66
+ def fraction_sub_capacity
67
+ sub_capacity unless capacity_count.nil?
68
+ end
69
+
70
+ def ordinal_index
71
+ index { |figure| figure != 0 }
72
+ end
73
+
74
+ def ordinal_capacity
75
+ count = ordinal_index / FIGURES_IN_CAPACITY
76
+ 0 == count ? nil : count
77
+ end
78
+ end
79
+ end
80
+ end
81
+
@@ -0,0 +1,19 @@
1
+ module NumbersAndWords
2
+ module ArrayExtensions
3
+ module Validations
4
+ #VALID_CHARACTERS = ("0".."9").to_a.push(".").freeze
5
+
6
+ def validate_figure_array!
7
+ #if invalid_characters.any?
8
+ # invalid = invalid_characters.uniq.join ', '
9
+ # raise "Figures may contain only numbers and `.` (invalid characters: #{invalid})."
10
+ #end
11
+ #raise "Figures may contain only 1 `.` (#{count '.'} found)." if count(".") > 1
12
+ end
13
+
14
+ #def invalid_characters
15
+ # reject { |character| VALID_CHARACTERS.include? character }
16
+ #end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,18 @@
1
+ require 'numbers_and_words/helper_classes/array_extensions/helpers'
2
+ require 'numbers_and_words/helper_classes/array_extensions/validations'
3
+
4
+ module NumbersAndWords
5
+ class FiguresArray < Array
6
+ include ArrayExtensions::Helpers
7
+ include ArrayExtensions::Validations
8
+
9
+ def to_words options = {}
10
+ validate_figure_array!
11
+ Strategies.figures_converter.new(self, options).run
12
+ end
13
+
14
+ def reverse
15
+ super.to_figures
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,11 @@
1
+ require 'numbers_and_words/helper_classes/array_extensions/helpers'
2
+ require 'numbers_and_words/helper_classes/array_extensions/validations'
3
+
4
+ module NumbersAndWords
5
+ class WordsArray < Array
6
+
7
+ def join options = {}
8
+ Strategies.array_joiner.new(self.to_a, options).run
9
+ end
10
+ end
11
+ end
@@ -5,3 +5,51 @@ en:
5
5
  tens: [zero, ten, twenty, thirty, forty, fifty, sixty, seventy, eighty, ninety]
6
6
  hundreds: hundred
7
7
  mega: [ones, thousand, million, billion, trillion, quadrillion, quintillion, sextillion, septillion, octillion, nonillion, decillion]
8
+ ordinal:
9
+ ones: [zeroth, first, second, third, fourth, fifth, sixth, seventh, eighth, ninth]
10
+ teens: [tenth, eleventh, twelfth, thirteenth, fourteenth, fifteenth, sixteenth, seventeenth, eighteenth, nineteenth]
11
+ tens: [zeroth, tenth, twentieth, thirtieth, fortieth, fiftieth, sixtieth, seventieth, eightieth, ninetieth]
12
+ hundreds: hundredth
13
+ mega: [zeroth, thousandth, millionth, billionth, trillionth, quadrillionth, quintillionth, sextillionth, septillionth, octillionth, nonillionth, decillionth]
14
+ fraction_separator: and
15
+ micro: [_, tenths, hundredths, thousandths, millionths, billionths, trillionths, quadrillionths, quintillionths, sextillionths, septillionths, octillionths, nonillionths, decillionths]
16
+ tenths:
17
+ one: tenth
18
+ other: tenths
19
+ hundredths:
20
+ one: hundredth
21
+ other: hundredths
22
+ thousandths:
23
+ one: thousandth
24
+ other: thousandths
25
+ millionths:
26
+ one: millionth
27
+ other: millionths
28
+ billionths:
29
+ one: billionth
30
+ other: billionths
31
+ trillionths:
32
+ one: trillionth
33
+ other: trillionths
34
+ quadrillionths:
35
+ one: quadrillionth
36
+ other: quadrillionths
37
+ quintillionths:
38
+ one: quintillionth
39
+ other: quintillionths
40
+ sextillionths:
41
+ one: sextillionth
42
+ other: sextillionths
43
+ septillionths:
44
+ one: septillionth
45
+ other: septillionths
46
+ octillionths:
47
+ one: octillionth
48
+ other: octillionths
49
+ nonillionths:
50
+ one: nonillionth
51
+ other: nonillionths
52
+ decillionths:
53
+ one: decillionth
54
+ other: decillionths
55
+ union: and