money_in_words 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 386cca35e9cbb23ea7edc7de5636421a490da873
4
+ data.tar.gz: 38ff827111e84f2ed79f4b43cf420f86f4a21cdd
5
+ SHA512:
6
+ metadata.gz: d12fe6af1abcacee0aeb352dd465aa02c37d916725182b04105e28583c2dd27928ad54a472629a8affaa86ea7178f0fcc2efc0f436789be626a3fa6af7700731
7
+ data.tar.gz: 72b2a1a4343edc8859f8317f30bc7f63b010848e44b013b10c77607919a6b181a48de6d7cc6fb409dd28a47ff05b2327f0cf1537595081ecf1609af5c13aa064
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in money_in_words.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 gmitrev
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,88 @@
1
+ # Money in Words
2
+
3
+ Turns numbers into words/money. Bulgarian only for the time being.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'money_in_words'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install money_in_words
20
+
21
+ ## Convert numbers to words
22
+ Only works with integers:
23
+
24
+ require "money_in_words"
25
+
26
+ 0.to_words
27
+ => "нула"
28
+
29
+ 1.to_words
30
+ => "един"
31
+
32
+ 1.to_words(article: :neuter)
33
+ => "едно"
34
+
35
+ 1.to_words(article: :female)
36
+ => "една"
37
+
38
+ 11.to_words
39
+ => "единадесет"
40
+
41
+ 33.to_words
42
+ => "тридесет и три"
43
+
44
+ 2000.to_words
45
+ => "две хиляди"
46
+
47
+ 2001.to_words
48
+ => "две хиляди и един"
49
+
50
+ 2001.to_words(article: :female)
51
+ => "две хиляди и една"
52
+
53
+
54
+ ## Conver numbers to money
55
+
56
+ require "money_in_words"
57
+
58
+ 0.to_money
59
+ => "нула лева"
60
+
61
+ 0.5.to_money
62
+ => "нула лева и петдесет стотинки"
63
+
64
+ 0.5.to_money(show_zero_leva: false)
65
+ => "петдесет стотинки"
66
+
67
+ 1.to_money
68
+ => "един лев"
69
+
70
+ 1.to_money(show_zero_stotinki: true)
71
+ => "един лев и нула стотинки"
72
+
73
+ 1.01.to_money
74
+ => "един лев и една стотинка"
75
+
76
+ 1.5.to_money
77
+ => "един лев и петдесет стотинки"
78
+
79
+ 1.53.to_money
80
+ => "един лев и петдесет и три стотинки"
81
+
82
+ ## Contributing
83
+
84
+ 1. Fork it
85
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
86
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
87
+ 4. Push to the branch (`git push origin my-new-feature`)
88
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require 'rspec/core/rake_task'
2
+ require "bundler/gem_tasks"
3
+
4
+
5
+ RSpec::Core::RakeTask.new(:spec) do |task|
6
+ task.rspec_opts = ['--color', '--format', 'nested' ]
7
+ end
8
+
9
+ task :default => :spec
@@ -0,0 +1,5 @@
1
+ class Float
2
+ def to_money(options={})
3
+ MoneyInWords::Money.new(self, options).to_words
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ class Integer
2
+ def to_words(options={})
3
+ MoneyInWords::Integer.new(self, options).to_words
4
+ end
5
+
6
+ def to_money(options={})
7
+ MoneyInWords::Money.new(self.to_f, options).to_words
8
+ end
9
+ end
@@ -0,0 +1,103 @@
1
+ require 'pry'
2
+ module MoneyInWords
3
+ class Integer
4
+
5
+ SEPARATOR = ' и '
6
+ ONES = {
7
+ male: %w(нула един два три четири пет шест седем осем девет),
8
+ female: %w(нула една две три четири пет шест седем осем девет),
9
+ neuter: %w(нула едно две три четири пет шест седем осем девет)
10
+ }
11
+ TEENS = %w(десет единадесет дванадесет тринадесет четиринадесет петнадесет шестнадесет седемнадесет осемнадесет деветнадесет)
12
+
13
+ TENS = %w(_ _ двадесет тридесет четиридесет петдесет шестдесет седемдесет осемдесет деветдесет)
14
+ HUNDREDS = %W(#{""} сто двеста триста четиристотин петстотин шестстоин седемстотин осемстотин деветстотин)
15
+
16
+ def initialize(num, options={})
17
+ @num = num
18
+ @options = options
19
+ @article = options[:article] || :male
20
+ end
21
+
22
+ def to_words
23
+ groups = split_number(@num)
24
+ groups.map!{ |h| numerize(h) }
25
+ groups = mega(groups)
26
+ groups.reject!(&:blank?)
27
+ groups = mega_join(groups)
28
+ groups.strip
29
+ end
30
+
31
+ def padleft!(a, n, x)
32
+ a.insert(0, *Array.new([0, n-a.length].max, x))
33
+ end
34
+
35
+ def split_number(num)
36
+ num.to_i.to_s.split(//).map(&:to_i).reverse.each_slice(3).to_a.map(&:reverse).reverse
37
+ end
38
+
39
+ def numerize(triple)
40
+ hun, ten, one = padleft!(triple, 3, 0)
41
+ num = []
42
+ num << HUNDREDS[hun] if hun > 0
43
+
44
+ case ten
45
+ when 0
46
+ num << ONES[@article][one] if one != 0
47
+ when 1
48
+ num << TEENS[one]
49
+ else
50
+ num << TENS[ten]
51
+ num << ONES[@article][one] if one != 0
52
+ end
53
+ njoin(num)
54
+ end
55
+
56
+ def mega(nums)
57
+ mega = %W(#{""} хиляди милионa милиарда)
58
+
59
+ nums.each_with_index.map do |num, i|
60
+ place = nums.length - i - 1
61
+
62
+ # Две хиляди, не два хиляди
63
+ num = 'две' if num == 'два' && place == 1
64
+
65
+ num = ONES[@article][0] if num == '' && place == 0 && nums.count == 1
66
+
67
+ if num == ONES[@article][1] && place == 1
68
+ 'хиляда'
69
+ else
70
+ "#{num} #{mega[place]}"
71
+ end
72
+ end
73
+ end
74
+
75
+ def mega_join(arr, separator=SEPARATOR)
76
+ case arr.length
77
+ when 0
78
+ ''
79
+ when 1
80
+ arr.first
81
+ else
82
+ if arr.last.include?(SEPARATOR)
83
+ arr.join(" ")
84
+ else
85
+ arr[0...-1].join(" ") + separator + arr.last.to_s
86
+ end
87
+ end
88
+
89
+ end
90
+
91
+ def njoin(num, separator=SEPARATOR)
92
+ case num.length
93
+ when 0
94
+ ''
95
+ when 1
96
+ num.first
97
+ else
98
+ num[0...-1].join(" ") + separator + num.last.to_s
99
+ end
100
+ end
101
+
102
+ end
103
+ end
@@ -0,0 +1,76 @@
1
+ module MoneyInWords
2
+ class Money
3
+
4
+ attr_accessor :levs, :stotinki
5
+
6
+ LEVS = {
7
+ zero: 'лева',
8
+ one: 'лев',
9
+ many: 'лева'
10
+ }
11
+
12
+ STOTINKI = {
13
+ zero: 'стотинки',
14
+ one: 'стотинка',
15
+ many: 'стотинки'
16
+ }
17
+
18
+ def initialize(num, options={})
19
+ @num = num
20
+ @levs, @stotinki = split_number
21
+
22
+ @levs = @levs.to_i
23
+ @stotinki = @stotinki.ljust(2, '0').to_i
24
+
25
+ @options = {
26
+ show_zero_leva: true,
27
+ show_zero_stotinki: false
28
+ }.merge(options)
29
+ end
30
+
31
+ def to_words
32
+ [leva_to_words, stotinki_to_words].compact.join(" и ")
33
+ end
34
+
35
+ def split_number
36
+ @num.to_s.split(".")
37
+ end
38
+
39
+ def levs_suffix
40
+ if @levs == 0
41
+ LEVS[:zero]
42
+ elsif @levs == 1
43
+ LEVS[:one]
44
+ else
45
+ LEVS[:many]
46
+ end
47
+ end
48
+
49
+ def stotinki_suffix
50
+ if @stotinki == 0
51
+ STOTINKI[:zero]
52
+ elsif @stotinki == 1
53
+ STOTINKI[:one]
54
+ else
55
+ STOTINKI[:many]
56
+ end
57
+ end
58
+
59
+ def leva_to_words
60
+ if @levs == 0 && !@options[:show_zero_leva]
61
+ nil
62
+ else
63
+ @levs.to_words + " " + levs_suffix
64
+ end
65
+ end
66
+
67
+ def stotinki_to_words
68
+ if @stotinki == 0 && !@options[:show_zero_stotinki]
69
+ nil
70
+ else
71
+ @stotinki.to_words(article: :female) + " " + stotinki_suffix
72
+ end
73
+ end
74
+
75
+ end
76
+ end
@@ -0,0 +1,3 @@
1
+ module MoneyInWords
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,39 @@
1
+ require "money_in_words/integer"
2
+ # require "money_in_words/float"
3
+ require "money_in_words/money"
4
+ require "money_in_words/core_ext/integer"
5
+ require "money_in_words/core_ext/float"
6
+ require "money_in_words/version"
7
+
8
+ module MoneyInWords
9
+
10
+ def self.to_words(num)
11
+ case num
12
+ when Integer
13
+ MoneyInWords::Integer.new(num).to_words
14
+ when Float
15
+ MoneyInWords::Float.new(num).to_words
16
+ end
17
+ end
18
+
19
+ end
20
+
21
+ class String
22
+ BLANK_RE = /\A[[:space:]]*\z/
23
+
24
+ # A string is blank if it's empty or contains whitespaces only:
25
+ #
26
+ # ''.blank? # => true
27
+ # ' '.blank? # => true
28
+ # "\t\n\r".blank? # => true
29
+ # ' blah '.blank? # => false
30
+ #
31
+ # Unicode whitespace is supported:
32
+ #
33
+ # "\u00a0".blank? # => true
34
+ #
35
+ # @return [true, false]
36
+ def blank?
37
+ BLANK_RE === self
38
+ end
39
+ end
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'money_in_words/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "money_in_words"
8
+ spec.version = MoneyInWords::VERSION
9
+ spec.authors = ["gmitrev"]
10
+ spec.email = ["gvmitrev@gmail.com"]
11
+ spec.summary = %q{Convert money in words}
12
+ spec.description = %q{}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "rspec"
24
+ spec.add_development_dependency "pry"
25
+ end
data/scratchpad.rb ADDED
@@ -0,0 +1,223 @@
1
+ num = 414.92
2
+
3
+ def num_to_words num
4
+
5
+ currency = {
6
+ zero: "лева",
7
+ one: 'лев',
8
+ many: 'лева'
9
+ }
10
+
11
+ levs = num.to_i
12
+ stotinki = (num % 1).round(2)
13
+
14
+ base = %w(нула един два три четири пет шест седем осем девет)
15
+ teens = %w(десет единадесет дванадесет тринадесет четиринадесет петнадесет шестнадесет седемнадесет осемнадесет)
16
+ tens = %w(десет двадесет тридесет четиридесет петдесет шестдесет седемдесет осемдесет деветдесет)
17
+ hundreds = %w(сто двеста триста четиристотин петстотин шестстоин седемстотин осемстотин деветстотин)
18
+ thousands = {
19
+ one: "хиляда",
20
+ many: 'хиляди'
21
+ }
22
+ millions = {
23
+ one: "милион",
24
+ many: 'милиона'
25
+ }
26
+ d = %w(хиляда, милион, милиард, билион)
27
+
28
+
29
+
30
+ levs.to_s.split(//)
31
+ end
32
+
33
+
34
+ class String
35
+ BLANK_RE = /\A[[:space:]]*\z/
36
+
37
+ # A string is blank if it's empty or contains whitespaces only:
38
+ #
39
+ # ''.blank? # => true
40
+ # ' '.blank? # => true
41
+ # "\t\n\r".blank? # => true
42
+ # ' blah '.blank? # => false
43
+ #
44
+ # Unicode whitespace is supported:
45
+ #
46
+ # "\u00a0".blank? # => true
47
+ #
48
+ # @return [true, false]
49
+ def blank?
50
+ BLANK_RE === self
51
+ end
52
+ end
53
+
54
+
55
+ split_number(1_000_000.0)
56
+
57
+ def padleft!(a, n, x)
58
+ a.insert(0, *Array.new([0, n-a.length].max, x))
59
+ end
60
+ def padright!(a, n, x)
61
+ a.fill(x, a.length...n)
62
+ end
63
+
64
+
65
+ def split_number(num)
66
+ num.to_i.to_s.split(//).map(&:to_i).reverse.each_slice(3).to_a.map(&:reverse).reverse
67
+ end
68
+
69
+
70
+ def numerize(triple)
71
+ base = %w(нула един два три четири пет шест седем осем девет)
72
+ teens = %w(десет единадесет дванадесет тринадесет четиринадесет петнадесет шестнадесет седемнадесет осемнадесет деветнадесет)
73
+
74
+ tens = %w(_ _ двадесет тридесет четиридесет петдесет шестдесет седемдесет осемдесет деветдесет)
75
+ hundreds = %w(_ сто двеста триста четиристотин петстотин шестстоин седемстотин осемстотин деветстотин)
76
+ base[triple.first]
77
+ separator = ' и '
78
+
79
+ case triple.size
80
+ when 1
81
+ base[triple.last]
82
+ when 2
83
+ case triple.first
84
+ when 0
85
+ base[triple.last]
86
+ when 1
87
+ teens[triple.last]
88
+ else
89
+ if triple.last == 0
90
+ tens[triple.first]
91
+ else
92
+ tens[triple.first] + separator + ones(triple.last)
93
+ end
94
+ end
95
+ when 3
96
+ return hundreds[triple.first] if triple.drop(1) == [0,0]
97
+
98
+ case triple[1]
99
+ when *[0,1]
100
+ hundreds[triple.first] + separator + numerize(triple.drop(1))
101
+ else
102
+ hundreds[triple.first] + " " + numerize(triple.drop(1))
103
+ end
104
+ end
105
+
106
+ end
107
+
108
+ def njoin(num, separator=' и ')
109
+ case num.length
110
+ when 0
111
+ ''
112
+ when 1
113
+ num.first
114
+ else
115
+ num[0...-1].join(" ") + separator + num.last.to_s
116
+ end
117
+ end
118
+ njoin [1,2,3]
119
+
120
+ def numerize2(triple)
121
+ ones = %w(нула един два три четири пет шест седем осем девет)
122
+ teens = %w(десет единадесет дванадесет тринадесет четиринадесет петнадесет шестнадесет седемнадесет осемнадесет деветнадесет)
123
+
124
+ tens = %w(_ _ двадесет тридесет четиридесет петдесет шестдесет седемдесет осемдесет деветдесет)
125
+ hundreds = %W(#{""} сто двеста триста четиристотин петстотин шестстоин седемстотин осемстотин деветстотин)
126
+
127
+ hun, ten, one = padleft!(triple, 3, 0)
128
+ num = []
129
+ num << hundreds[hun] if hun > 0
130
+
131
+ case ten
132
+ when 0
133
+ num << ones[one] if one != 0
134
+ when 1
135
+ num << teens[one]
136
+ else
137
+ num << tens[ten]
138
+ num << ones[one] if one != 0
139
+ end
140
+ njoin(num)
141
+ end
142
+
143
+ numerize2([1,0,0])
144
+ numerize2([3,3,0])
145
+ numerize2([0,1,1])
146
+ numerize2([0,0,1])
147
+ numerize2([0,6,1])
148
+
149
+ def mega(nums)
150
+ mega = %W(#{""} хиляди милионa милиарда)
151
+
152
+ nums.each_with_index.map do |num, i|
153
+ place = nums.length - i - 1
154
+
155
+ # Две хиляди, не два хиляди
156
+ num = 'две' if num == 'два' && place == 1
157
+ if num == 'един' && place == 1
158
+ 'хиляда'
159
+ else
160
+ "#{num} #{mega[place]}"
161
+ end
162
+ end
163
+ end
164
+
165
+ def join2(arr, separator=' и ')
166
+ case arr.length
167
+ when 0
168
+ ''
169
+ when 1
170
+ arr.first
171
+ else
172
+ if arr.last.include?(" и ")
173
+ arr.join(" ")
174
+ else
175
+ arr[0...-1].join(" ") + separator + arr.last.to_s
176
+ end
177
+ end
178
+
179
+ end
180
+
181
+ mega(["двадесет", "сто"])
182
+ mega(["триста", "двадесет", "сто"])
183
+ join2 mega(["седем", "триста", "двадесет", "сто и седем"])
184
+
185
+ def wololo(num)
186
+ groups = split_number(num)
187
+ groups.map!{ |h| numerize2(h) }
188
+ groups = mega(groups)
189
+ groups.reject!(&:blank?)
190
+ groups = join2(groups)
191
+ end
192
+
193
+ wololo(1231)
194
+
195
+ wololo(5)
196
+ wololo(15)
197
+ wololo(20)
198
+ wololo(35)
199
+ wololo(77)
200
+ wololo(100)
201
+ wololo(101)
202
+ wololo(111)
203
+ wololo(121)
204
+ wololo(2000)
205
+
206
+
207
+ 0.to_money
208
+ 0.5.to_money
209
+ 0.5.to_money(show_zero_leva: false)
210
+ 1.to_money
211
+ 1.to_money(show_zero_stotinki: true)
212
+ 1.01.to_money
213
+ 1.5.to_money
214
+ 1.53.to_money
215
+
216
+ 0.to_words
217
+ 1.to_words
218
+ 1.to_words(article: :neuter)
219
+ 1.to_words(article: :female)
220
+ 11.to_words
221
+ 33.to_words
222
+ 2000.to_words
223
+ 2001.to_words
@@ -0,0 +1,152 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Money in Words' do
4
+
5
+ describe "Integers" do
6
+
7
+ describe 'Male' do
8
+ FIXTURES = [
9
+ [0, 'нула'],
10
+ [1, 'един'],
11
+ [2, 'два'],
12
+ [3, 'три'],
13
+ [4, 'четири'],
14
+ [5, 'пет'],
15
+ [6, 'шест'],
16
+ [7, 'седем'],
17
+ [8, 'осем'],
18
+ [9, 'девет'],
19
+ [10, 'десет'],
20
+ [11, 'единадесет'],
21
+ [12, 'дванадесет'],
22
+ [13, 'тринадесет'],
23
+ [14, 'четиринадесет'],
24
+ [15, 'петнадесет'],
25
+ [16, 'шестнадесет'],
26
+ [17, 'седемнадесет'],
27
+ [18, 'осемнадесет'],
28
+ [19, 'деветнадесет'],
29
+ [20, 'двадесет'],
30
+ [22, 'двадесет и два'],
31
+ [30, 'тридесет'],
32
+ [60, 'шестдесет'],
33
+ [66, 'шестдесет и шест'],
34
+ [99, 'деветдесет и девет'],
35
+ [100, 'сто'],
36
+ [101, 'сто и един'],
37
+ [112, 'сто и дванадесет'],
38
+ [120, 'сто и двадесет'],
39
+ [123, 'сто двадесет и три'],
40
+ [223, 'двеста двадесет и три'],
41
+ [1000, 'хиляда'],
42
+ [1001, 'хиляда и един'],
43
+ [1010, 'хиляда и десет'],
44
+ [1011, 'хиляда и единадесет'],
45
+ [1100, 'хиляда и сто'],
46
+ [1101, 'хиляда сто и един'],
47
+ [1111, 'хиляда сто и единадесет'],
48
+ [1126, 'хиляда сто двадесет и шест'],
49
+ [2000, 'две хиляди'],
50
+ [2500, 'две хиляди и петстотин'],
51
+ ]
52
+
53
+ FIXTURES.each do |f|
54
+ it "male example #{f.first} " do
55
+ expect(f.first.to_words).to eq f.last
56
+ end
57
+ end
58
+ end
59
+
60
+ describe 'Female' do
61
+ FIXTURES = [
62
+ [0, 'нула'],
63
+ [1, 'една'],
64
+ [2, 'две'],
65
+ [3, 'три'],
66
+ [4, 'четири'],
67
+ [5, 'пет'],
68
+ [6, 'шест'],
69
+ [7, 'седем'],
70
+ [8, 'осем'],
71
+ [9, 'девет'],
72
+ [10, 'десет'],
73
+ [11, 'единадесет'],
74
+ [12, 'дванадесет'],
75
+ [13, 'тринадесет'],
76
+ [14, 'четиринадесет'],
77
+ [15, 'петнадесет'],
78
+ [16, 'шестнадесет'],
79
+ [17, 'седемнадесет'],
80
+ [18, 'осемнадесет'],
81
+ [19, 'деветнадесет'],
82
+ [20, 'двадесет'],
83
+ [22, 'двадесет и две'],
84
+ [30, 'тридесет'],
85
+ [60, 'шестдесет'],
86
+ [66, 'шестдесет и шест'],
87
+ [99, 'деветдесет и девет'],
88
+ [100, 'сто'],
89
+ [101, 'сто и една'],
90
+ [112, 'сто и дванадесет'],
91
+ [120, 'сто и двадесет'],
92
+ [123, 'сто двадесет и три'],
93
+ [223, 'двеста двадесет и три'],
94
+ [1000, 'хиляда'],
95
+ [1001, 'хиляда и една'],
96
+ [1010, 'хиляда и десет'],
97
+ [1011, 'хиляда и единадесет'],
98
+ [1100, 'хиляда и сто'],
99
+ [1101, 'хиляда сто и една'],
100
+ [1111, 'хиляда сто и единадесет'],
101
+ [1126, 'хиляда сто двадесет и шест'],
102
+ [2000, 'две хиляди'],
103
+ [2500, 'две хиляди и петстотин'],
104
+ ]
105
+
106
+ FIXTURES.each do |f|
107
+ it "female example #{f.first} " do
108
+ expect(f.first.to_words(article: :female)).to eq f.last
109
+ end
110
+ end
111
+ end
112
+
113
+ end
114
+
115
+ describe "Money" do
116
+
117
+ FIXTURES = [
118
+ [0, 'нула лева'],
119
+ [0.5, 'нула лева и петдесет стотинки'],
120
+ [1, 'един лев'],
121
+ [1.2, 'един лев и двадесет стотинки'],
122
+ [2.22, 'два лева и двадесет и две стотинки'],
123
+ [3.99, 'три лева и деветдесет и девет стотинки'],
124
+ [4.01, 'четири лева и една стотинка'],
125
+ [5.11, 'пет лева и единадесет стотинки'],
126
+ [2500.08, 'две хиляди и петстотин лева и осем стотинки'],
127
+ ]
128
+
129
+ FIXTURES.each do |f|
130
+ it "example #{f.first} " do
131
+ expect(f.first.to_money).to eq f.last
132
+ end
133
+ end
134
+
135
+ it "example 3 without stotinki" do
136
+ expect(3.to_money(show_zero_stotinki: false)).to eq "три лева"
137
+ end
138
+
139
+ it "example 3 with stotinki" do
140
+ expect(3.to_money(show_zero_stotinki: true)).to eq "три лева и нула стотинки"
141
+ end
142
+
143
+ it "example 0.50 with leva" do
144
+ expect(0.5.to_money(show_zero_leva: true)).to eq "нула лева и петдесет стотинки"
145
+ end
146
+
147
+ it "example 0.50 without leva" do
148
+ expect(0.5.to_money(show_zero_leva: false)).to eq "петдесет стотинки"
149
+ end
150
+
151
+ end
152
+ end
@@ -0,0 +1,15 @@
1
+ require 'bundler/setup'
2
+ Bundler.setup
3
+
4
+ require 'money_in_words'
5
+
6
+
7
+ RSpec.configure do |config|
8
+ config.treat_symbols_as_metadata_keys_with_true_values = true
9
+ config.run_all_when_everything_filtered = true
10
+ config.filter_run :focus
11
+ config.filter_run_excluding :brute
12
+
13
+
14
+ config.order = 'random'
15
+ end
metadata ADDED
@@ -0,0 +1,117 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: money_in_words
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - gmitrev
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-08-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: ''
70
+ email:
71
+ - gvmitrev@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".gitignore"
77
+ - Gemfile
78
+ - LICENSE.txt
79
+ - README.md
80
+ - Rakefile
81
+ - lib/money_in_words.rb
82
+ - lib/money_in_words/core_ext/float.rb
83
+ - lib/money_in_words/core_ext/integer.rb
84
+ - lib/money_in_words/integer.rb
85
+ - lib/money_in_words/money.rb
86
+ - lib/money_in_words/version.rb
87
+ - money_in_words.gemspec
88
+ - scratchpad.rb
89
+ - spec/money_in_words_spec.rb
90
+ - spec/spec_helper.rb
91
+ homepage: ''
92
+ licenses:
93
+ - MIT
94
+ metadata: {}
95
+ post_install_message:
96
+ rdoc_options: []
97
+ require_paths:
98
+ - lib
99
+ required_ruby_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ required_rubygems_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ requirements: []
110
+ rubyforge_project:
111
+ rubygems_version: 2.2.2
112
+ signing_key:
113
+ specification_version: 4
114
+ summary: Convert money in words
115
+ test_files:
116
+ - spec/money_in_words_spec.rb
117
+ - spec/spec_helper.rb