numbers_and_words 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. data/README.rdoc +41 -11
  2. data/lib/numbers_and_words/array_additions/helpers.rb +2 -2
  3. data/lib/numbers_and_words/core_ext.rb +1 -1
  4. data/lib/numbers_and_words/i18n.rb +1 -1
  5. data/lib/numbers_and_words/i18n/initialization.rb +7 -5
  6. data/lib/numbers_and_words/i18n/locales/numbers.fr.yml +43 -0
  7. data/lib/numbers_and_words/i18n/locales/numbers.it.yml +7 -0
  8. data/lib/numbers_and_words/i18n/locales/numbers.nl.yml +7 -0
  9. data/lib/numbers_and_words/i18n/locales/numbers.tr.yml +1 -1
  10. data/lib/numbers_and_words/i18n/pluralization.rb +1 -0
  11. data/lib/numbers_and_words/i18n/plurals/fr.rb +15 -0
  12. data/lib/numbers_and_words/i18n/plurals/ru.rb +1 -1
  13. data/lib/numbers_and_words/strategies.rb +6 -0
  14. data/lib/numbers_and_words/strategies/base.rb +7 -0
  15. data/lib/numbers_and_words/strategies/en.rb +1 -64
  16. data/lib/numbers_and_words/strategies/families/base.rb +71 -0
  17. data/lib/numbers_and_words/strategies/families/cyrillic.rb +18 -0
  18. data/lib/numbers_and_words/strategies/families/latin.rb +9 -0
  19. data/lib/numbers_and_words/strategies/fr.rb +32 -0
  20. data/lib/numbers_and_words/strategies/it.rb +8 -0
  21. data/lib/numbers_and_words/strategies/nl.rb +23 -0
  22. data/lib/numbers_and_words/strategies/ru.rb +1 -64
  23. data/lib/numbers_and_words/strategies/tr.rb +1 -64
  24. data/lib/numbers_and_words/strategies/ua.rb +4 -2
  25. data/lib/numbers_and_words/translations_helpers.rb +7 -0
  26. data/lib/numbers_and_words/translations_helpers/en.rb +2 -31
  27. data/lib/numbers_and_words/translations_helpers/families/base.rb +30 -0
  28. data/lib/numbers_and_words/translations_helpers/families/cyrillic.rb +28 -0
  29. data/lib/numbers_and_words/translations_helpers/families/latin.rb +23 -0
  30. data/lib/numbers_and_words/translations_helpers/fr.rb +34 -0
  31. data/lib/numbers_and_words/translations_helpers/it.rb +16 -0
  32. data/lib/numbers_and_words/translations_helpers/nl.rb +18 -0
  33. data/lib/numbers_and_words/translations_helpers/ru.rb +1 -34
  34. data/lib/numbers_and_words/translations_helpers/tr.rb +1 -34
  35. data/lib/numbers_and_words/translations_helpers/ua.rb +8 -0
  36. data/lib/numbers_and_words/version.rb +1 -1
  37. metadata +22 -2
data/README.rdoc CHANGED
@@ -1,17 +1,24 @@
1
- == numbers_and_words {<img src="https://secure.travis-ci.org/kslazarev/numbers_and_words.png" />}[http://travis-ci.org/kslazarev/numbers_and_words]
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]
2
2
 
3
3
  Convert numbers to words using the I18n library.
4
4
 
5
5
  Перевод чисел в слова при помощи библиотеки I18n.
6
6
 
7
- == Supported Languages / Языки
7
+ Converti les nombres en lettres en utilisant la librairie I18n.
8
+
9
+ == Supported Languages / Языки / Langues Supportées
8
10
 
9
11
  * English
10
12
  * Русский
13
+ * Français
11
14
  * Українська
12
- * Türkçe
15
+ * Türkçe**
16
+ * Italiano**
17
+ * Nederlands**
18
+
19
+ ** Experimental
13
20
 
14
- == Examples / Примеры
21
+ == Examples / Примеры / Exemples
15
22
 
16
23
  I18n.with_locale(:en) { 42.to_words }
17
24
  => "forty-two"
@@ -19,60 +26,82 @@ Convert numbers to words using the I18n library.
19
26
  I18n.with_locale(:ru) { 42.to_words }
20
27
  => "сорок два"
21
28
 
29
+ I18n.with_locale(:fr) { 42.to_words }
30
+ => "quarante-deux"
31
+
22
32
  21.to_words
23
33
  => "twenty-one"
24
34
  => "двадцать один"
35
+ => "vingt et un"
25
36
  => "двадцять один"
26
37
  => "yirmi bir"
38
+ => "ventiuno"
39
+ => "éénentwintig"
27
40
 
28
41
  231.to_words
29
42
  => "two hundred thirty-one"
30
43
  => "двести тридцать один"
44
+ => "deux cent trente-trois"
31
45
  => "двiстi тридцять один"
32
46
  => "iki yüz otuz bir"
47
+ => "2 cento trentauno"
48
+ => "tweehonderdéénendertig"
33
49
 
34
50
  4030.to_words
35
51
  => "four thousand thirty"
36
52
  => "четыре тысячи тридцать"
53
+ => "quatre mille trente"
37
54
  => "чотири тисячi тридцять"
38
55
  => "dört bin otuz"
56
+ => "quattro mille trenta"
57
+ => "vierthousanddertig"
39
58
 
40
59
  1000100.to_words
41
60
  => "one million one hundred"
42
61
  => "один миллион сто"
62
+ => "un million cent"
43
63
  => "один мiльйон сто"
44
64
  => "bir milyon bir yüz"
65
+ => "uno milione 1 cento"
66
+ => "één miljoen honderd"
45
67
 
46
68
  1000000000000000000000000000000000.to_words
47
69
  => "one decillion"
48
70
  => "один дециллион"
71
+ => "un quintilliard"
49
72
  => "один децильйон"
50
73
  => "bir desilyon"
74
+ => "uno decillion"
75
+ => "één decillion"
51
76
 
52
77
  [1, 2, 3].to_words
53
78
  => ["one", "two", "three"]
54
79
  => ["один", "два", "три"]
80
+ => ["un", "deux", "trois"]
55
81
 
56
82
  [11, 22, 133].to_words
57
83
  => ["eleven", "twenty-two", "one hundred thirty-three"]
58
84
  => ["одиннадцать", "двадцать два", "сто тридцать три"]
85
+ => ["onze", "vingt-deux", "cent trente-trois"]
59
86
  => ["одинадцять", "двадцять два", "сто тридцять три"]
60
87
  => ["on bir", "yirmi iki", "bir yüz otuz üç"]
88
+ => ["undici", "ventidue", "1 cento trentatre"]
89
+ => ["elf", "tweeentwintig", "honderddrieendertig"]
61
90
 
62
- == Requirements / Требования
91
+ == Requirements / Требования / Configuration Requise
63
92
 
64
- * 1.8.7 <= Ruby (compatible with/совместимость с Ruby 1.9, JRuby and Rubinius);
65
- * 0.5.0 <= I18n (earlier versions not tested/ранние версии не тестировались);
93
+ * 1.8.7 <= Ruby (compatible with/совместимость с/compatible avec Ruby 1.9, JRuby and/и/et Rubinius);
94
+ * 0.5.0 <= I18n (earlier versions not tested/ранние версии не тестировались/versions précédentes non testées);
66
95
 
67
- == Installation / Установка
96
+ == Installation / Установка / Installation
68
97
 
69
98
  gem install numbers_and_words
70
99
 
71
- == License / Лицензия
100
+ == License / Лицензия / Licence
72
101
 
73
102
  MIT License
74
103
 
75
- == Bugs and Language Support / Поправки и Новые Языки
104
+ == Bugs and Language Support / Поправки и Новые Языки / Bugs et Support d'autres Langues
76
105
 
77
106
  See CHANGELOG.md for last changes.
78
107
 
@@ -80,8 +109,9 @@ Fork the project. Make your feature addition or bug fix with tests.
80
109
 
81
110
  Send a pull request. Bonus points for topic branches.
82
111
 
83
- == Contacts / Контакты
112
+ == Contacts / Контакты / Contacts
84
113
 
85
114
  * Kirill Lazarev (mailto:k.s.lazarev@gmail.com)
86
115
  * Daniel Doubrovkine (link:http://github.com/dblock)
87
116
  * Sergey Shkirando (mailto:shkirando.s@yandex.ru)
117
+ * Ulrich Sossou (Github[http://github.com/sorich87], {Personal Page}[http://ulrichsossou.com/])
@@ -4,8 +4,8 @@ module NumbersAndWords
4
4
  THOUSAND_CAPACITY = 1
5
5
 
6
6
  def capacity_count
7
- count = (self.length.to_f / 3).ceil
8
- 1 == count ? nil : count
7
+ count = (self.length.to_f / 3).ceil - 1
8
+ 0 == count ? nil : count
9
9
  end
10
10
 
11
11
  def figures_array_in_capacity capacity
@@ -1,2 +1,2 @@
1
1
  require 'numbers_and_words/core_ext/integer'
2
- require 'numbers_and_words/core_ext/array'
2
+ require 'numbers_and_words/core_ext/array'
@@ -9,4 +9,4 @@ module NumbersAndWords
9
9
  Dir[File.join File.dirname(__FILE__), "i18n/#{directory}", "**/#{ext}"]
10
10
  end
11
11
  end
12
- end
12
+ end
@@ -3,20 +3,22 @@ module NumbersAndWords
3
3
  module Initialization
4
4
  extend self
5
5
 
6
+ attr_accessor :languages
7
+
6
8
  def init
7
9
  locale_files.each { |locale_file| ::I18n.load_path << locale_file}
8
10
  NumbersAndWords::I18n::Pluralization.init
9
11
  end
10
12
 
13
+ def languages
14
+ @languages ||= (locale_files.map{|path| path.split(/[\/.]/)[-2]})
15
+ end
16
+
11
17
  private
12
18
 
13
19
  def locale_files
14
20
  I18n.files 'locales', '*.*'
15
21
  end
16
-
17
- def languages
18
- locale_files.map{|path| path.split /[\/.]/}[-2]
19
- end
20
22
  end
21
23
  end
22
- end
24
+ end
@@ -0,0 +1,43 @@
1
+ fr:
2
+ numbers:
3
+ ones: [zéro, un, deux, trois, quatre, cinq, six, sept, huit, neuf]
4
+ teens: [dix, onze, douze, treize, quatorze, quinze, seize, dix-sept, dix-huit, dix-neuf]
5
+ tens: [zéro, dix, vingt, trente, quarante, cinquante, soixante, soixante-dix, quatre-vingt, quatre-vingt-dix]
6
+ mega: [ones, thousands, millions, billions, trillions, quadrillions, quintillion, sextillions, septillions, octillions, nonillions, decillions]
7
+ eighty: quatre-vingts
8
+ hundreds:
9
+ one: cent
10
+ many: cents
11
+ thousands:
12
+ one: mille
13
+ many: mille
14
+ millions:
15
+ one: million
16
+ many: millions
17
+ billions:
18
+ one: milliard
19
+ many: milliards
20
+ trillions:
21
+ one: billion
22
+ many: billions
23
+ quadrillions:
24
+ one: billiard
25
+ many: billiards
26
+ quintillions:
27
+ one: trillion
28
+ many: trillions
29
+ sextillions:
30
+ one: trilliard
31
+ many: trilliards
32
+ septillions:
33
+ one: quadrillion
34
+ many: quadrillions
35
+ octillions:
36
+ one: quadrilliard
37
+ many: quadrilliards
38
+ nonillions:
39
+ one: quintillion
40
+ many: quintillions
41
+ decillions:
42
+ one: quintilliard
43
+ many: quintilliards
@@ -0,0 +1,7 @@
1
+ it:
2
+ numbers:
3
+ ones: [zero, uno, due, tre, quattro, cinque, sei, sette, otto, nove]
4
+ teens: [dieci, undici, dodici, tredici, quattordici, quindici, sedici, diciasette, diciotto, diciannove]
5
+ tens: [zero, dieci, venti, trenta, quaranta, cinquanta, sessanta, settanta, ottanta, novanta]
6
+ hundreds: cento
7
+ mega: [ones, mille, milione, miliardo, triliardo, quadrillion, quintillion, sextillion, septillion, octillion, nonillion, decillion]
@@ -0,0 +1,7 @@
1
+ nl:
2
+ numbers:
3
+ ones: [nul, één, twee, drie, vier, vijf, zes, zeven, acht, negen]
4
+ teens: [tien, elf, twaalf, dertien, veertien, vijftien, zestien, zeventien, achttien, negentien]
5
+ tens: [nul, tien, twintig, dertig, veertig, vijftig, zestig, zeventig, tachtig, negentig]
6
+ hundreds: honderd
7
+ mega: [degenen, duizend, miljoen, miljard, biljoen, biljard, triljoen, triljard, septiljoen, octillion, noniljoen, decillion]
@@ -4,4 +4,4 @@ tr:
4
4
  teens: ['on', on bir, on iki, on üç, on dört, on beş, on altı, on yedi, on sekiz, on dokuz]
5
5
  tens: [sıfır, 'on', yirmi, otuz, kırk, elli, altmış, yetmiş, seksen, doksan]
6
6
  hundreds: yüz
7
- mega: [bir, bin, milyon, milyar, trilyon, katrilyon, kentilyon, seksilyon, septilyon, oktilyon, nonilyon, desilyon]
7
+ mega: [bir, bin, milyon, milyar, trilyon, katrilyon, kentilyon, seksilyon, septilyon, oktilyon, nonilyon, desilyon]
@@ -1,5 +1,6 @@
1
1
  require 'numbers_and_words/i18n/plurals/ru'
2
2
  require 'numbers_and_words/i18n/plurals/ua'
3
+ require 'numbers_and_words/i18n/plurals/fr'
3
4
 
4
5
  module NumbersAndWords
5
6
  module I18n
@@ -0,0 +1,15 @@
1
+ module NumbersAndWords
2
+ module I18n
3
+ module Plurals
4
+ module Fr
5
+ RULE = lambda { |n| one_conditions(n) ? :one : :many }
6
+
7
+ extend self
8
+
9
+ def one_conditions n
10
+ n % 10 == 1 && n % 100 != 11
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -25,4 +25,4 @@ module NumbersAndWords
25
25
  end
26
26
  end
27
27
  end
28
- end
28
+ end
@@ -1,5 +1,11 @@
1
1
  require 'numbers_and_words/strategies/base'
2
+ require 'numbers_and_words/strategies/families/base'
3
+ require 'numbers_and_words/strategies/families/cyrillic'
4
+ require 'numbers_and_words/strategies/families/latin'
2
5
  require 'numbers_and_words/strategies/ru'
3
6
  require 'numbers_and_words/strategies/en'
4
7
  require 'numbers_and_words/strategies/ua'
5
8
  require 'numbers_and_words/strategies/tr'
9
+ require 'numbers_and_words/strategies/fr'
10
+ require 'numbers_and_words/strategies/nl'
11
+ require 'numbers_and_words/strategies/it'
@@ -6,6 +6,13 @@ module NumbersAndWords
6
6
  def self.factory
7
7
  "NumbersAndWords::Strategies::#{::I18n.locale.to_s.titleize}".constantize.new
8
8
  end
9
+
10
+ def convert figures
11
+ @figures = figures.reverse
12
+ @words = strings
13
+
14
+ @words.empty? ? zero : @words.reverse.join(' ')
15
+ end
9
16
  end
10
17
  end
11
18
  end
@@ -1,71 +1,8 @@
1
1
  module NumbersAndWords
2
2
  module Strategies
3
3
  class En < Base
4
+ include Families::Latin
4
5
  include NumbersAndWords::TranslationsHelpers::En
5
-
6
- attr_accessor :figures_in_previous_capacity
7
-
8
- def convert figures
9
- @figures = figures.reverse
10
-
11
- @words = strings
12
- @words.empty? ? zero : @words.reverse.join(' ')
13
- end
14
-
15
- private
16
-
17
- def strings
18
- if figures.capacity_count
19
- complex_to_words
20
- elsif figures.hundreds
21
- simple_hundreds_to_words
22
- elsif figures.tens or figures.ones
23
- simple_to_words
24
- else
25
- []
26
- end
27
- end
28
-
29
- def complex_to_words
30
- words = []
31
- figures.capacity_count.times do |capacity|
32
- number_in_capacity_by_words = save_parent_figures do |parent_figures|
33
- @figures = parent_figures.figures_array_in_capacity(capacity)
34
- strings
35
- end
36
-
37
- unless number_in_capacity_by_words.empty?
38
- words.push translation_megs(capacity) if 0 < capacity
39
- words += number_in_capacity_by_words
40
- end
41
- end
42
- words
43
- end
44
-
45
- def simple_hundreds_to_words
46
- simple_to_words + [translation_hundreds(figures.hundreds)]
47
- end
48
-
49
- def simple_to_words
50
- if figures.teens
51
- [translation_teens(figures.ones)]
52
- elsif figures.tens
53
- figures.ones ?
54
- [translation_tens_with_ones(figures.tens_with_ones)] :
55
- [translation_tens(figures.tens)]
56
- elsif figures.ones
57
- [translation_ones(figures.ones)]
58
- else
59
- []
60
- end
61
- end
62
-
63
- def save_parent_figures
64
- parent_figures = @figures
65
- result = yield(parent_figures)
66
- @figures = parent_figures
67
- result
68
- end
69
6
  end
70
7
  end
71
8
  end
@@ -0,0 +1,71 @@
1
+ module NumbersAndWords
2
+ module Strategies
3
+ module Families
4
+ module Base
5
+
6
+ private
7
+
8
+ def strings
9
+ if figures.capacity_count
10
+ number_without_capacity_to_words + complex_number_to_words
11
+ elsif figures.hundreds
12
+ hundreds_number_to_words
13
+ elsif figures.tens or figures.ones
14
+ simple_number_to_words
15
+ else
16
+ []
17
+ end
18
+ end
19
+
20
+ def complex_number_to_words
21
+ (1..figures.capacity_count).map{|capacity| capacity_iteration(capacity)}.flatten
22
+ end
23
+
24
+ def capacity_iteration capacity
25
+ words = []
26
+ capacity_words = words_in_capacity(capacity)
27
+ words.push(translation_megs(capacity)) unless capacity_words.empty?
28
+ words + capacity_words
29
+ end
30
+
31
+ def words_in_capacity capacity = 0
32
+ save_parent_figures do |parent_figures|
33
+ @figures = parent_figures.figures_array_in_capacity(capacity)
34
+ strings
35
+ end
36
+ end
37
+
38
+ alias_method :number_without_capacity_to_words, :words_in_capacity
39
+
40
+ def hundreds_number_to_words
41
+ simple_number_to_words + [translation_hundreds(figures.hundreds)]
42
+ end
43
+
44
+ def complex_tens
45
+ figures.ones ?
46
+ translation_tens_with_ones(figures.tens_with_ones) :
47
+ translation_tens(figures.tens)
48
+ end
49
+
50
+ def simple_number_to_words
51
+ if figures.teens
52
+ [translation_teens(figures.ones)]
53
+ elsif figures.tens
54
+ [complex_tens]
55
+ elsif figures.ones
56
+ [translation_ones(figures.ones)]
57
+ else
58
+ []
59
+ end
60
+ end
61
+
62
+ def save_parent_figures
63
+ parent_figures = @figures
64
+ result = yield(parent_figures)
65
+ @figures = parent_figures
66
+ result
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,18 @@
1
+ module NumbersAndWords
2
+ module Strategies
3
+ module Families
4
+ module Cyrillic
5
+ include NumbersAndWords::Strategies::Families::Base
6
+
7
+ attr_accessor :current_capacity
8
+
9
+ private
10
+
11
+ def words_in_capacity capacity = 0
12
+ @current_capacity = capacity
13
+ super
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,9 @@
1
+ module NumbersAndWords
2
+ module Strategies
3
+ module Families
4
+ module Latin
5
+ include NumbersAndWords::Strategies::Families::Base
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,32 @@
1
+ module NumbersAndWords
2
+ module Strategies
3
+ class Fr < Base
4
+ include Families::Latin
5
+ include NumbersAndWords::TranslationsHelpers::Fr
6
+
7
+ private
8
+
9
+ def capacity_iteration capacity
10
+ words = []
11
+ capacity_words = words_in_capacity(capacity)
12
+ words.push(translation_megs(capacity)) unless capacity_words.empty?
13
+ words += capacity_words unless is_a_thousand?(capacity) and is_a_one?(capacity_words)
14
+ words
15
+ end
16
+
17
+ def is_a_one? capacity_words
18
+ [t(:ones)[1]] == capacity_words
19
+ end
20
+
21
+ def is_a_thousand? capacity
22
+ FiguresArray::THOUSAND_CAPACITY == capacity
23
+ end
24
+
25
+ def hundreds_number_to_words
26
+ simple_number_to_words + [
27
+ translation_hundreds(figures.hundreds, simple_number_to_words.empty?)
28
+ ]
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,8 @@
1
+ module NumbersAndWords
2
+ module Strategies
3
+ class It < Base
4
+ include Families::Latin
5
+ include NumbersAndWords::TranslationsHelpers::It
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,23 @@
1
+ module NumbersAndWords
2
+ module Strategies
3
+ class Nl < Base
4
+ include Families::Latin
5
+ include NumbersAndWords::TranslationsHelpers::Nl
6
+
7
+ def hundreds_number_to_words
8
+ [super.reverse.join]
9
+ end
10
+
11
+ def capacity_iteration capacity
12
+ if FiguresArray::THOUSAND_CAPACITY == capacity
13
+ words = []
14
+ capacity_words = words_in_capacity(capacity)
15
+ words.push(translation_megs(capacity)) unless capacity_words.empty?
16
+ capacity_words.empty? ? [] : [capacity_words, words].join
17
+ else
18
+ super
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,71 +1,8 @@
1
1
  module NumbersAndWords
2
2
  module Strategies
3
3
  class Ru < Base
4
+ include Families::Cyrillic
4
5
  include NumbersAndWords::TranslationsHelpers::Ru
5
-
6
- def convert figures
7
- @figures = figures.reverse
8
- @words = strings
9
-
10
- @words.empty? ? zero : @words.reverse.join(' ')
11
- end
12
-
13
- private
14
-
15
- def strings gender = :male
16
- if figures.capacity_count
17
- complex_to_words
18
- elsif figures.hundreds
19
- simple_hundreds_to_words gender
20
- elsif figures.tens or figures.ones
21
- simple_to_words gender
22
- else
23
- []
24
- end
25
- end
26
-
27
- def complex_to_words
28
- words = []
29
- figures.capacity_count.times do |capacity|
30
- number_in_capacity_by_words = save_parent_figures do
31
- @figures = figures.figures_array_in_capacity(capacity)
32
- strings figures.is_a_thousand_capacity?(capacity) ? :female : :male
33
- end
34
-
35
- unless number_in_capacity_by_words.empty?
36
- if 0 < capacity
37
- words.push translation_megs(capacity, figures.number_in_capacity(capacity))
38
- end
39
- words += number_in_capacity_by_words
40
- end
41
- end
42
- words
43
- end
44
-
45
- def simple_hundreds_to_words gender
46
- simple_to_words(gender) + [translation_hundreds(figures.hundreds)]
47
- end
48
-
49
- def simple_to_words gender
50
- if figures.teens
51
- [translation_teens(figures.ones)]
52
- elsif figures.tens
53
- figures.ones ?
54
- [translation_tens_with_ones(figures.tens_with_ones, gender)] :
55
- [translation_tens(figures.tens)]
56
- elsif figures.ones
57
- [translation_ones(figures.ones, gender)]
58
- else
59
- []
60
- end
61
- end
62
-
63
- def save_parent_figures
64
- parent_figures = @figures
65
- result = yield
66
- @figures = parent_figures
67
- result
68
- end
69
6
  end
70
7
  end
71
8
  end
@@ -1,71 +1,8 @@
1
1
  module NumbersAndWords
2
2
  module Strategies
3
3
  class Tr < Base
4
+ include Families::Latin
4
5
  include NumbersAndWords::TranslationsHelpers::Tr
5
-
6
- attr_accessor :figures_in_previous_capacity
7
-
8
- def convert figures
9
- @figures = figures.reverse
10
-
11
- @words = strings
12
- @words.empty? ? zero : @words.reverse.join(' ')
13
- end
14
-
15
- private
16
-
17
- def strings
18
- if figures.capacity_count
19
- complex_to_words
20
- elsif figures.hundreds
21
- simple_hundreds_to_words
22
- elsif figures.tens or figures.ones
23
- simple_to_words
24
- else
25
- []
26
- end
27
- end
28
-
29
- def complex_to_words
30
- words = []
31
- figures.capacity_count.times do |capacity|
32
- number_in_capacity_by_words = save_parent_figures do |parent_figures|
33
- @figures = parent_figures.figures_array_in_capacity(capacity)
34
- strings
35
- end
36
-
37
- unless number_in_capacity_by_words.empty?
38
- words.push translation_megs(capacity) if 0 < capacity
39
- words += number_in_capacity_by_words
40
- end
41
- end
42
- words
43
- end
44
-
45
- def simple_hundreds_to_words
46
- simple_to_words + [translation_hundreds(figures.hundreds)]
47
- end
48
-
49
- def simple_to_words
50
- if figures.teens
51
- [translation_teens(figures.ones)]
52
- elsif figures.tens
53
- figures.ones ?
54
- [translation_tens_with_ones(figures.tens_with_ones)] :
55
- [translation_tens(figures.tens)]
56
- elsif figures.ones
57
- [translation_ones(figures.ones)]
58
- else
59
- []
60
- end
61
- end
62
-
63
- def save_parent_figures
64
- parent_figures = @figures
65
- result = yield(parent_figures)
66
- @figures = parent_figures
67
- result
68
- end
69
6
  end
70
7
  end
71
8
  end
@@ -1,6 +1,8 @@
1
1
  module NumbersAndWords
2
2
  module Strategies
3
- class Ua < Ru
3
+ class Ua < Base
4
+ include Families::Cyrillic
5
+ include NumbersAndWords::TranslationsHelpers::Ua
4
6
  end
5
7
  end
6
- end
8
+ end
@@ -1,4 +1,11 @@
1
1
  require 'numbers_and_words/translations_helpers/base'
2
+ require 'numbers_and_words/translations_helpers/families/base'
3
+ require 'numbers_and_words/translations_helpers/families/cyrillic'
4
+ require 'numbers_and_words/translations_helpers/families/latin'
2
5
  require 'numbers_and_words/translations_helpers/ru'
3
6
  require 'numbers_and_words/translations_helpers/en'
7
+ require 'numbers_and_words/translations_helpers/ua'
4
8
  require 'numbers_and_words/translations_helpers/tr'
9
+ require 'numbers_and_words/translations_helpers/fr'
10
+ require 'numbers_and_words/translations_helpers/nl'
11
+ require 'numbers_and_words/translations_helpers/it'
@@ -2,39 +2,10 @@ module NumbersAndWords
2
2
  module TranslationsHelpers
3
3
  module En
4
4
  include NumbersAndWords::TranslationsHelpers::Base
5
-
6
- private
7
-
8
- def translation_teens number
9
- t(:teens)[number]
10
- end
11
-
12
- def translation_tens number
13
- t(:tens)[number]
14
- end
15
-
16
- def translation_ones number
17
- t(:ones)[number]
18
- end
5
+ include NumbersAndWords::TranslationsHelpers::Families::Latin
19
6
 
20
7
  def translation_tens_with_ones numbers
21
- [translation_tens(numbers[1]), translation_ones(numbers[0])].join '-'
22
- end
23
-
24
- def translation_union
25
- t :union
26
- end
27
-
28
- def translation_hundreds number
29
- [t(:ones)[number], t(:hundreds)].join ' '
30
- end
31
-
32
- def translation_megs capacity
33
- t(:mega)[capacity]
34
- end
35
-
36
- def zero
37
- t(:ones)[0]
8
+ super numbers, '-'
38
9
  end
39
10
  end
40
11
  end
@@ -0,0 +1,30 @@
1
+ module NumbersAndWords
2
+ module TranslationsHelpers
3
+ module Families
4
+ module Base
5
+
6
+ private
7
+
8
+ def translation_teens number
9
+ t(:teens)[number]
10
+ end
11
+
12
+ def translation_tens number
13
+ t(:tens)[number]
14
+ end
15
+
16
+ def translation_tens_with_ones numbers, separator = ' '
17
+ [translation_tens(numbers[1]), translation_ones(numbers[0])].join separator
18
+ end
19
+
20
+ def translation_megs capacity, number = nil
21
+ number ? t(translation_mega(capacity), :count => number) : t(:mega)[capacity]
22
+ end
23
+
24
+ def translation_mega capacity
25
+ t(:mega)[capacity]
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,28 @@
1
+ module NumbersAndWords
2
+ module TranslationsHelpers
3
+ module Families
4
+ module Cyrillic
5
+ include NumbersAndWords::TranslationsHelpers::Families::Base
6
+
7
+ private
8
+
9
+ def translation_ones number
10
+ gender = figures.is_a_thousand_capacity?(current_capacity) ? :female : :male
11
+ t([:ones, gender].join('_'))[number]
12
+ end
13
+
14
+ def translation_hundreds number
15
+ t(:hundreds)[number]
16
+ end
17
+
18
+ def translation_megs capacity
19
+ super(capacity, figures.number_in_capacity(capacity))
20
+ end
21
+
22
+ def zero
23
+ t(:ones_male)[0]
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,23 @@
1
+ module NumbersAndWords
2
+ module TranslationsHelpers
3
+ module Families
4
+ module Latin
5
+ include NumbersAndWords::TranslationsHelpers::Families::Base
6
+
7
+ private
8
+
9
+ def translation_ones number
10
+ t(:ones)[number]
11
+ end
12
+
13
+ def translation_hundreds number
14
+ [t(:ones)[number], t(:hundreds)].join ' '
15
+ end
16
+
17
+ def zero
18
+ t(:ones)[0]
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,34 @@
1
+ module NumbersAndWords
2
+ module TranslationsHelpers
3
+ module Fr
4
+ include NumbersAndWords::TranslationsHelpers::Base
5
+ include NumbersAndWords::TranslationsHelpers::Families::Latin
6
+
7
+ SPECIAL_TENS_CASE = 8
8
+
9
+ private
10
+
11
+ def translation_tens number, alone = true
12
+ (SPECIAL_TENS_CASE == number and alone) ? t(:eighty) : super(number)
13
+ end
14
+
15
+ def translation_tens_with_ones numbers
16
+ if [7, 9].include? numbers[1]
17
+ [translation_tens(numbers[1] - 1, false), translation_teens(numbers[0])].join '-'
18
+ else
19
+ union = numbers[0] == 1 ? ' et ' : '-'
20
+ [translation_tens(numbers[1], false), translation_ones(numbers[0])].join union
21
+ end
22
+ end
23
+
24
+ def translation_hundreds number, pluralize = false
25
+ hundreds = t(:hundreds, :count => pluralize ? number : 1)
26
+ (number == 1) ? hundreds : [t(:ones)[number], hundreds].join(' ')
27
+ end
28
+
29
+ def translation_megs capacity
30
+ super(capacity, figures.number_in_capacity(capacity))
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,16 @@
1
+ module NumbersAndWords
2
+ module TranslationsHelpers
3
+ module It
4
+ include NumbersAndWords::TranslationsHelpers::Base
5
+ include NumbersAndWords::TranslationsHelpers::Families::Latin
6
+
7
+ def translation_tens_with_ones numbers
8
+ super numbers, ''
9
+ end
10
+
11
+ def translation_hundreds number
12
+ [[number], t(:hundreds)].join ' '
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ module NumbersAndWords
2
+ module TranslationsHelpers
3
+ module Nl
4
+ include NumbersAndWords::TranslationsHelpers::Base
5
+ include NumbersAndWords::TranslationsHelpers::Families::Latin
6
+
7
+ private
8
+
9
+ def translation_tens_with_ones numbers
10
+ [translation_ones(numbers[0]), translation_tens(numbers[1])].join 'en'
11
+ end
12
+
13
+ def translation_hundreds number
14
+ 1 == number ? t(:hundreds) : [t(:ones)[number], t(:hundreds)].join
15
+ end
16
+ end
17
+ end
18
+ end
@@ -2,40 +2,7 @@ module NumbersAndWords
2
2
  module TranslationsHelpers
3
3
  module Ru
4
4
  include NumbersAndWords::TranslationsHelpers::Base
5
-
6
- private
7
-
8
- def translation_megs capacity, number
9
- t translation_mega(capacity), :count => number
10
- end
11
-
12
- def translation_teens number
13
- t(:teens)[number]
14
- end
15
-
16
- def translation_tens number
17
- t(:tens)[number]
18
- end
19
-
20
- def translation_ones number, gender
21
- t([:ones, gender].join('_'))[number]
22
- end
23
-
24
- def translation_tens_with_ones numbers, gender
25
- [translation_tens(numbers[1]), translation_ones(numbers[0], gender)].join ' '
26
- end
27
-
28
- def translation_hundreds number
29
- t(:hundreds)[number]
30
- end
31
-
32
- def translation_mega capacity
33
- t(:mega)[capacity]
34
- end
35
-
36
- def zero
37
- t(:ones_male)[0]
38
- end
5
+ include NumbersAndWords::TranslationsHelpers::Families::Cyrillic
39
6
  end
40
7
  end
41
8
  end
@@ -2,40 +2,7 @@ module NumbersAndWords
2
2
  module TranslationsHelpers
3
3
  module Tr
4
4
  include NumbersAndWords::TranslationsHelpers::Base
5
-
6
- private
7
-
8
- def translation_teens number
9
- t(:teens)[number]
10
- end
11
-
12
- def translation_tens number
13
- t(:tens)[number]
14
- end
15
-
16
- def translation_ones number
17
- t(:ones)[number]
18
- end
19
-
20
- def translation_tens_with_ones numbers
21
- [translation_tens(numbers[1]), translation_ones(numbers[0])].join ' '
22
- end
23
-
24
- def translation_union
25
- t :union
26
- end
27
-
28
- def translation_hundreds number
29
- [t(:ones)[number], t(:hundreds)].join ' '
30
- end
31
-
32
- def translation_megs capacity
33
- t(:mega)[capacity]
34
- end
35
-
36
- def zero
37
- t(:ones)[0]
38
- end
5
+ include NumbersAndWords::TranslationsHelpers::Families::Latin
39
6
  end
40
7
  end
41
8
  end
@@ -0,0 +1,8 @@
1
+ module NumbersAndWords
2
+ module TranslationsHelpers
3
+ module Ua
4
+ include NumbersAndWords::TranslationsHelpers::Base
5
+ include NumbersAndWords::TranslationsHelpers::Families::Cyrillic
6
+ end
7
+ end
8
+ end
@@ -1,3 +1,3 @@
1
1
  module NumbersAndWords
2
- VERSION = '0.4.0'
2
+ VERSION = '0.5.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: numbers_and_words
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-24 00:00:00.000000000 Z
12
+ date: 2012-10-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: i18n
@@ -94,24 +94,41 @@ files:
94
94
  - lib/numbers_and_words/i18n.rb
95
95
  - lib/numbers_and_words/i18n/initialization.rb
96
96
  - lib/numbers_and_words/i18n/locales/numbers.en.yml
97
+ - lib/numbers_and_words/i18n/locales/numbers.fr.yml
98
+ - lib/numbers_and_words/i18n/locales/numbers.it.yml
99
+ - lib/numbers_and_words/i18n/locales/numbers.nl.yml
97
100
  - lib/numbers_and_words/i18n/locales/numbers.ru.yml
98
101
  - lib/numbers_and_words/i18n/locales/numbers.tr.yml
99
102
  - lib/numbers_and_words/i18n/locales/numbers.ua.yml
100
103
  - lib/numbers_and_words/i18n/pluralization.rb
104
+ - lib/numbers_and_words/i18n/plurals/fr.rb
101
105
  - lib/numbers_and_words/i18n/plurals/plurals.rb
102
106
  - lib/numbers_and_words/i18n/plurals/ru.rb
103
107
  - lib/numbers_and_words/i18n/plurals/ua.rb
104
108
  - lib/numbers_and_words/strategies.rb
105
109
  - lib/numbers_and_words/strategies/base.rb
106
110
  - lib/numbers_and_words/strategies/en.rb
111
+ - lib/numbers_and_words/strategies/families/base.rb
112
+ - lib/numbers_and_words/strategies/families/cyrillic.rb
113
+ - lib/numbers_and_words/strategies/families/latin.rb
114
+ - lib/numbers_and_words/strategies/fr.rb
115
+ - lib/numbers_and_words/strategies/it.rb
116
+ - lib/numbers_and_words/strategies/nl.rb
107
117
  - lib/numbers_and_words/strategies/ru.rb
108
118
  - lib/numbers_and_words/strategies/tr.rb
109
119
  - lib/numbers_and_words/strategies/ua.rb
110
120
  - lib/numbers_and_words/translations_helpers.rb
111
121
  - lib/numbers_and_words/translations_helpers/base.rb
112
122
  - lib/numbers_and_words/translations_helpers/en.rb
123
+ - lib/numbers_and_words/translations_helpers/families/base.rb
124
+ - lib/numbers_and_words/translations_helpers/families/cyrillic.rb
125
+ - lib/numbers_and_words/translations_helpers/families/latin.rb
126
+ - lib/numbers_and_words/translations_helpers/fr.rb
127
+ - lib/numbers_and_words/translations_helpers/it.rb
128
+ - lib/numbers_and_words/translations_helpers/nl.rb
113
129
  - lib/numbers_and_words/translations_helpers/ru.rb
114
130
  - lib/numbers_and_words/translations_helpers/tr.rb
131
+ - lib/numbers_and_words/translations_helpers/ua.rb
115
132
  - lib/numbers_and_words/version.rb
116
133
  - LICENSE.txt
117
134
  - README.rdoc
@@ -128,6 +145,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
128
145
  - - ! '>='
129
146
  - !ruby/object:Gem::Version
130
147
  version: '0'
148
+ segments:
149
+ - 0
150
+ hash: 4516807369747815083
131
151
  required_rubygems_version: !ruby/object:Gem::Requirement
132
152
  none: false
133
153
  requirements: