number_to_words_ru 0.2.3 → 0.3.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/LICENSE.txt +20 -0
  2. data/README.rdoc +68 -0
  3. data/lib/initializers/i18n.rb +1 -1
  4. data/lib/locales/numbers.en.yml +2 -3
  5. data/lib/locales/plurals.rb +24 -16
  6. data/lib/numbers_and_words/array_additions/helpers.rb +50 -0
  7. data/lib/numbers_and_words/array_additions/validations.rb +9 -0
  8. data/lib/numbers_and_words/array_additions.rb +2 -0
  9. data/lib/numbers_and_words/core_ext/array.rb +9 -0
  10. data/lib/numbers_and_words/core_ext/integer.rb +12 -0
  11. data/lib/numbers_and_words/figures_array.rb +15 -0
  12. data/lib/{number_to_words_ru → numbers_and_words}/pluralization.rb +0 -0
  13. data/lib/numbers_and_words/strategies/base.rb +11 -0
  14. data/lib/numbers_and_words/strategies/en.rb +71 -0
  15. data/lib/numbers_and_words/strategies/ru.rb +71 -0
  16. data/lib/numbers_and_words/strategies.rb +3 -0
  17. data/lib/numbers_and_words/translations_helpers/base.rb +11 -0
  18. data/lib/numbers_and_words/translations_helpers/en.rb +41 -0
  19. data/lib/numbers_and_words/translations_helpers/ru.rb +41 -0
  20. data/lib/numbers_and_words/translations_helpers.rb +3 -0
  21. data/lib/numbers_and_words/version.rb +3 -0
  22. data/lib/numbers_and_words.rb +30 -0
  23. metadata +96 -31
  24. data/lib/number_to_words_ru/array_additions/helpers.rb +0 -48
  25. data/lib/number_to_words_ru/array_additions/validations.rb +0 -7
  26. data/lib/number_to_words_ru/array_additions.rb +0 -2
  27. data/lib/number_to_words_ru/core_ext/array.rb +0 -5
  28. data/lib/number_to_words_ru/core_ext/integer.rb +0 -11
  29. data/lib/number_to_words_ru/figures_array.rb +0 -9
  30. data/lib/number_to_words_ru/strategies/base.rb +0 -10
  31. data/lib/number_to_words_ru/strategies/en.rb +0 -69
  32. data/lib/number_to_words_ru/strategies/ru.rb +0 -69
  33. data/lib/number_to_words_ru/strategies.rb +0 -3
  34. data/lib/number_to_words_ru/translations_helpers/base.rb +0 -9
  35. data/lib/number_to_words_ru/translations_helpers/en.rb +0 -37
  36. data/lib/number_to_words_ru/translations_helpers/ru.rb +0 -37
  37. data/lib/number_to_words_ru/translations_helpers.rb +0 -3
  38. data/lib/number_to_words_ru.rb +0 -26
  39. data/spec/number_to_words_ru/array/ru_spec.rb +0 -27
  40. data/spec/number_to_words_ru/integer/ru_spec.rb +0 -293
  41. data/spec/spec_helper.rb +0 -8
metadata CHANGED
@@ -1,46 +1,113 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: number_to_words_ru
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Kirill Lazarev
9
- autorequire: number_to_words_ru
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-15 00:00:00.000000000Z
13
- dependencies: []
14
- description: Simple convert number to russian words using I18N.
12
+ date: 2012-03-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: i18n
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: activesupport
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: jeweler
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description: ! '#DEPRECATED. Use ''numbers_and_words'' instead. Convert numbers to
79
+ words using I18N.'
15
80
  email: k.s.lazarev@gmail.com
16
81
  executables: []
17
82
  extensions: []
18
- extra_rdoc_files: []
83
+ extra_rdoc_files:
84
+ - LICENSE.txt
85
+ - README.rdoc
19
86
  files:
20
87
  - lib/initializers/i18n.rb
21
88
  - lib/locales/numbers.en.yml
22
89
  - lib/locales/numbers.ru.yml
23
90
  - lib/locales/plurals.rb
24
- - lib/number_to_words_ru/array_additions/helpers.rb
25
- - lib/number_to_words_ru/array_additions/validations.rb
26
- - lib/number_to_words_ru/array_additions.rb
27
- - lib/number_to_words_ru/core_ext/array.rb
28
- - lib/number_to_words_ru/core_ext/integer.rb
29
- - lib/number_to_words_ru/figures_array.rb
30
- - lib/number_to_words_ru/pluralization.rb
31
- - lib/number_to_words_ru/strategies/base.rb
32
- - lib/number_to_words_ru/strategies/en.rb
33
- - lib/number_to_words_ru/strategies/ru.rb
34
- - lib/number_to_words_ru/strategies.rb
35
- - lib/number_to_words_ru/translations_helpers/base.rb
36
- - lib/number_to_words_ru/translations_helpers/en.rb
37
- - lib/number_to_words_ru/translations_helpers/ru.rb
38
- - lib/number_to_words_ru/translations_helpers.rb
39
- - lib/number_to_words_ru.rb
40
- - spec/number_to_words_ru/array/ru_spec.rb
41
- - spec/number_to_words_ru/integer/ru_spec.rb
42
- - spec/spec_helper.rb
43
- homepage: http://github.com/kslazarev/number_to_words_ru
91
+ - lib/numbers_and_words.rb
92
+ - lib/numbers_and_words/array_additions.rb
93
+ - lib/numbers_and_words/array_additions/helpers.rb
94
+ - lib/numbers_and_words/array_additions/validations.rb
95
+ - lib/numbers_and_words/core_ext/array.rb
96
+ - lib/numbers_and_words/core_ext/integer.rb
97
+ - lib/numbers_and_words/figures_array.rb
98
+ - lib/numbers_and_words/pluralization.rb
99
+ - lib/numbers_and_words/strategies.rb
100
+ - lib/numbers_and_words/strategies/base.rb
101
+ - lib/numbers_and_words/strategies/en.rb
102
+ - lib/numbers_and_words/strategies/ru.rb
103
+ - lib/numbers_and_words/translations_helpers.rb
104
+ - lib/numbers_and_words/translations_helpers/base.rb
105
+ - lib/numbers_and_words/translations_helpers/en.rb
106
+ - lib/numbers_and_words/translations_helpers/ru.rb
107
+ - lib/numbers_and_words/version.rb
108
+ - LICENSE.txt
109
+ - README.rdoc
110
+ homepage: http://github.com/kslazarev/numbers_and_words
44
111
  licenses:
45
112
  - MIT
46
113
  post_install_message:
@@ -53,9 +120,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
53
120
  - - ! '>='
54
121
  - !ruby/object:Gem::Version
55
122
  version: '0'
56
- segments:
57
- - 0
58
- hash: 1036402517106089977
59
123
  required_rubygems_version: !ruby/object:Gem::Requirement
60
124
  none: false
61
125
  requirements:
@@ -64,8 +128,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
64
128
  version: '0'
65
129
  requirements: []
66
130
  rubyforge_project:
67
- rubygems_version: 1.8.10
131
+ rubygems_version: 1.8.21
68
132
  signing_key:
69
133
  specification_version: 3
70
- summary: Simple convert number to russian words using I18N.
134
+ summary: ! '#DEPRECATED. Use ''numbers_and_words'' instead. Convert numbers to words
135
+ using I18N.'
71
136
  test_files: []
@@ -1,48 +0,0 @@
1
- module ArrayAdditions
2
- module Helpers
3
- THOUSAND_CAPACITY = 1
4
-
5
- def capacity_count
6
- count = (self.length.to_f / 3).ceil
7
- 1 == count ? nil : count
8
- end
9
-
10
- def figures_array_in_capacity capacity
11
- self[capacity * 3, 3]
12
- end
13
-
14
- def number_in_capacity capacity
15
- figures_array_in_capacity(capacity).reverse.join.to_i
16
- end
17
-
18
- def number_for_gender capacity
19
- figures = figures_array_in_capacity(capacity)
20
- teens = figures.teens
21
- teens ? teens.join.to_i : figures.first
22
- end
23
-
24
- def is_a_thousand_capacity? capacity
25
- THOUSAND_CAPACITY == capacity
26
- end
27
-
28
- def ones
29
- self[0] if 0 < self[0].to_i
30
- end
31
-
32
- def teens
33
- tens_with_ones if 1 == tens
34
- end
35
-
36
- def tens
37
- self[1] if self[1] and 0 < self[1].to_i
38
- end
39
-
40
- def tens_with_ones
41
- [ones, tens] if ones and tens
42
- end
43
-
44
- def hundreds
45
- self[2] if 0 < self[2].to_i
46
- end
47
- end
48
- end
@@ -1,7 +0,0 @@
1
- module ArrayAdditions
2
- module Validations
3
- def validate_figure_array!
4
-
5
- end
6
- end
7
- end
@@ -1,2 +0,0 @@
1
- require 'number_to_words_ru/array_additions/helpers'
2
- require 'number_to_words_ru/array_additions/validations'
@@ -1,5 +0,0 @@
1
- class Array
2
- def to_words
3
- map &:to_words
4
- end
5
- end
@@ -1,11 +0,0 @@
1
- class Integer
2
- def to_words
3
- to_figures_array.to_words Strategies::Base.factory
4
- end
5
-
6
- private
7
-
8
- def to_figures_array
9
- FiguresArray.new to_s.split(//).map(&:to_i)
10
- end
11
- end
@@ -1,9 +0,0 @@
1
- class FiguresArray < Array
2
- include ArrayAdditions::Helpers
3
- include ArrayAdditions::Validations
4
-
5
- def to_words strategy, options = nil
6
- validate_figure_array!
7
- strategy.convert self
8
- end
9
- end
@@ -1,10 +0,0 @@
1
- module Strategies
2
- class Base
3
- attr_accessor :figures, :words
4
-
5
- def self.factory
6
- "Strategies::#{I18n.locale.to_s.titleize}".constantize.new
7
- end
8
- end
9
- end
10
-
@@ -1,69 +0,0 @@
1
- module Strategies
2
- class En < Base
3
- include TranslationsHelpers::En
4
-
5
- attr_accessor :figures_in_previous_capacity
6
-
7
- def convert figures
8
- @figures = figures.reverse
9
-
10
- @words = strings
11
- @words.empty? ? zero : @words.reverse.join(' ')
12
- end
13
-
14
- private
15
-
16
- def strings
17
- if figures.capacity_count
18
- complex_to_words
19
- elsif figures.hundreds
20
- simple_hundreds_to_words
21
- elsif figures.tens or figures.ones
22
- simple_to_words
23
- else
24
- []
25
- end
26
- end
27
-
28
- def complex_to_words
29
- words = []
30
- figures.capacity_count.times do |capacity|
31
- number_in_capacity_by_words = save_parent_figures do |parent_figures|
32
- @figures = parent_figures.figures_array_in_capacity(capacity)
33
- strings
34
- end
35
-
36
- unless number_in_capacity_by_words.empty?
37
- words.push translation_megs(capacity) if 0 < capacity
38
- words += number_in_capacity_by_words
39
- end
40
- end
41
- words
42
- end
43
-
44
- def simple_hundreds_to_words
45
- simple_to_words + [translation_hundreds(figures.hundreds)]
46
- end
47
-
48
- def simple_to_words
49
- if figures.teens
50
- [translation_teens(figures.ones)]
51
- elsif figures.tens
52
- figures.ones ?
53
- [translation_tens_with_ones(figures.tens_with_ones)] :
54
- [translation_tens(figures.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
@@ -1,69 +0,0 @@
1
- module Strategies
2
- class Ru < Base
3
- include TranslationsHelpers::Ru
4
-
5
- def convert figures
6
- @figures = figures.reverse
7
- @words = strings
8
-
9
- @words.empty? ? zero : @words.reverse.join(' ')
10
- end
11
-
12
- private
13
-
14
- def strings gender = :male
15
- if figures.capacity_count
16
- complex_to_words
17
- elsif figures.hundreds
18
- simple_hundreds_to_words gender
19
- elsif figures.tens or figures.ones
20
- simple_to_words gender
21
- else
22
- []
23
- end
24
- end
25
-
26
- def complex_to_words
27
- words = []
28
- figures.capacity_count.times do |capacity|
29
- number_in_capacity_by_words = save_parent_figures do
30
- @figures = figures.figures_array_in_capacity(capacity)
31
- strings figures.is_a_thousand_capacity?(capacity) ? :female : :male
32
- end
33
-
34
- unless number_in_capacity_by_words.empty?
35
- if 0 < capacity
36
- words.push translation_megs(capacity, figures.number_for_gender(capacity))
37
- end
38
- words += number_in_capacity_by_words
39
- end
40
- end
41
- words
42
- end
43
-
44
- def simple_hundreds_to_words gender
45
- simple_to_words(gender) + [translation_hundreds(figures.hundreds)]
46
- end
47
-
48
- def simple_to_words gender
49
- if figures.teens
50
- [translation_teens(figures.ones)]
51
- elsif figures.tens
52
- figures.ones ?
53
- [translation_tens_with_ones(figures.tens_with_ones, gender)] :
54
- [translation_tens(figures.tens)]
55
- elsif figures.ones
56
- [translation_ones(figures.ones, gender)]
57
- else
58
- []
59
- end
60
- end
61
-
62
- def save_parent_figures
63
- parent_figures = @figures
64
- result = yield
65
- @figures = parent_figures
66
- result
67
- end
68
- end
69
- end
@@ -1,3 +0,0 @@
1
- require 'number_to_words_ru/strategies/base'
2
- require 'number_to_words_ru/strategies/ru'
3
- require 'number_to_words_ru/strategies/en'
@@ -1,9 +0,0 @@
1
- module TranslationsHelpers
2
- module Base
3
- I18N_NAMESPACE = :numbers
4
-
5
- def t attribute, options = {}
6
- I18n.t attribute, options.merge(:scope => I18N_NAMESPACE)
7
- end
8
- end
9
- end
@@ -1,37 +0,0 @@
1
- module TranslationsHelpers::En
2
- include TranslationsHelpers::Base
3
-
4
- private
5
-
6
- def translation_megs capacity
7
- t(:mega)[capacity]
8
- end
9
-
10
- def translation_teens number
11
- t(:teens)[number]
12
- end
13
-
14
- def translation_tens number
15
- t(:tens)[number]
16
- end
17
-
18
- def translation_ones number
19
- t(:ones)[number]
20
- end
21
-
22
- def translation_tens_with_ones numbers
23
- [translation_tens(numbers[1]), translation_ones(numbers[0])].join '-'
24
- end
25
-
26
- def translation_union
27
- t :union
28
- end
29
-
30
- def translation_hundreds number
31
- [t(:ones)[number], t(:hundreds)].join ' '
32
- end
33
-
34
- def zero
35
- t(:ones_male)[0]
36
- end
37
- end
@@ -1,37 +0,0 @@
1
- module TranslationsHelpers::Ru
2
- include TranslationsHelpers::Base
3
-
4
- private
5
-
6
- def translation_megs capacity, number
7
- t translation_mega(capacity), :count => number
8
- end
9
-
10
- def translation_teens number
11
- t(:teens)[number]
12
- end
13
-
14
- def translation_tens number
15
- t(:tens)[number]
16
- end
17
-
18
- def translation_ones number, gender
19
- t([:ones, gender].join('_'))[number]
20
- end
21
-
22
- def translation_tens_with_ones numbers, gender
23
- [translation_tens(numbers[1]), translation_ones(numbers[0], gender)].join ' '
24
- end
25
-
26
- def translation_hundreds number
27
- t(:hundreds)[number]
28
- end
29
-
30
- def translation_mega capacity
31
- t(:mega)[capacity]
32
- end
33
-
34
- def zero
35
- t(:ones_male)[0]
36
- end
37
- end
@@ -1,3 +0,0 @@
1
- require 'number_to_words_ru/translations_helpers/base'
2
- require 'number_to_words_ru/translations_helpers/ru'
3
- require 'number_to_words_ru/translations_helpers/en'
@@ -1,26 +0,0 @@
1
- require 'rubygems'
2
- require 'i18n'
3
- require 'initializers/i18n'
4
- require 'active_support/inflector'
5
-
6
- require 'number_to_words_ru/translations_helpers'
7
- require 'number_to_words_ru/strategies'
8
- require 'number_to_words_ru/array_additions'
9
- require 'number_to_words_ru/figures_array'
10
-
11
- require 'number_to_words_ru/core_ext/integer'
12
- require 'number_to_words_ru/core_ext/array'
13
-
14
- module I18nInitialization
15
- extend self
16
-
17
- def init
18
- I18n.load_path << locale_files
19
- end
20
-
21
- def locale_files
22
- Dir[File.join(File.dirname(__FILE__), 'locales', '**/*')]
23
- end
24
- end
25
-
26
- I18nInitialization.init
@@ -1,27 +0,0 @@
1
- require './spec/spec_helper'
2
-
3
- describe Array do
4
- around :each do |example|
5
- I18n.with_locale(:ru) do
6
- example.run
7
- end
8
- end
9
-
10
-
11
- describe 'to_words' do
12
- context 'simple example' do
13
- subject { [1, 2, 3] }
14
- its(:to_words) { should == 3.times.map { |number| t(:ones_male)[number + 1] } }
15
- end
16
-
17
- context 'complex example' do
18
- subject { [101, 21, 13] }
19
-
20
- its(:to_words) { should == [
21
- [t(:hundreds)[1], t(:ones_male)[1]].join(' '),
22
- [t(:tens)[2], t(:ones_male)[1]].join(' '),
23
- t(:teens)[3]
24
- ] }
25
- end
26
- end
27
- end