ru_propisju 2.1.0 → 2.1.1
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.
- data/History.txt +4 -0
- data/lib/ru_propisju.rb +22 -19
- data/ru_propisju.gemspec +3 -3
- data/test/test_ru_propisju.rb +9 -2
- metadata +7 -7
data/History.txt
CHANGED
data/lib/ru_propisju.rb
CHANGED
@@ -6,7 +6,7 @@ $KCODE = 'u' if RUBY_VERSION < '1.9.0'
|
|
6
6
|
# RuPropisju.rublej(123) # "сто двадцать три рубля"
|
7
7
|
module RuPropisju
|
8
8
|
|
9
|
-
VERSION = '2.1.
|
9
|
+
VERSION = '2.1.1'
|
10
10
|
|
11
11
|
# http://www.xe.com/symbols.php
|
12
12
|
# (лица, приближенные форексам и всяким там валютам и курсам)
|
@@ -178,17 +178,16 @@ module RuPropisju
|
|
178
178
|
# rublej(345.2) #=> "триста сорок пять рублей 20 копеек"
|
179
179
|
def rublej(amount, locale = :ru)
|
180
180
|
parts = []
|
181
|
-
|
181
|
+
locale_data = pick_locale(TRANSLATIONS, locale)
|
182
182
|
|
183
|
-
integrals =
|
184
|
-
fractions =
|
185
|
-
|
186
|
-
parts <<
|
187
|
-
|
183
|
+
integrals = locale_data[:rub_integral]
|
184
|
+
fractions = locale_data[:rub_fraction]
|
185
|
+
|
186
|
+
parts << propisju_int(amount.to_i, 1, integrals, locale) unless amount.to_i == 0
|
188
187
|
if amount.kind_of?(Float)
|
189
188
|
remainder = (amount.divmod(1)[1]*100).round
|
190
|
-
if remainder == 100
|
191
|
-
parts = [
|
189
|
+
if (remainder == 100)
|
190
|
+
parts = [propisju_int(amount.to_i + 1, 1, integrals, locale)]
|
192
191
|
else
|
193
192
|
kop = remainder.to_i
|
194
193
|
unless kop.zero?
|
@@ -196,7 +195,7 @@ module RuPropisju
|
|
196
195
|
end
|
197
196
|
end
|
198
197
|
end
|
199
|
-
|
198
|
+
|
200
199
|
parts.join(' ')
|
201
200
|
end
|
202
201
|
|
@@ -292,13 +291,13 @@ module RuPropisju
|
|
292
291
|
# RuPropisju.propisju_shtuk(21, 3, "колесо", "колеса", "колес") #=> "двадцать одно колесо"
|
293
292
|
# RuPropisju.propisju_shtuk(21, 1, "мужик", "мужика", "мужиков") #=> "двадцать один мужик"
|
294
293
|
def propisju_shtuk(items, gender, forms, locale = :ru)
|
295
|
-
|
294
|
+
elements = if (items == items.to_i)
|
296
295
|
[propisju(items, gender, locale), choose_plural(items, forms)]
|
297
296
|
else
|
298
297
|
[propisju(items, gender, locale), forms[1]]
|
299
298
|
end
|
300
|
-
|
301
|
-
|
299
|
+
|
300
|
+
elements.join(" ")
|
302
301
|
end
|
303
302
|
|
304
303
|
private
|
@@ -307,10 +306,11 @@ module RuPropisju
|
|
307
306
|
# однако списковая форма строк выглядит предпочтительнее, поэтому интерфейс изменен.
|
308
307
|
# по хорошему надо менять также внешний интерфейс, но это может сломать совместимость
|
309
308
|
def compose_ordinal(into, remaining_amount, gender, item_forms = [], locale = :ru)
|
309
|
+
|
310
310
|
locale = locale.to_s
|
311
|
-
|
311
|
+
|
312
312
|
rest, rest1, chosen_ordinal, ones, tens, hundreds = [nil]*6
|
313
|
-
|
313
|
+
|
314
314
|
rest = remaining_amount % 1000
|
315
315
|
remaining_amount = remaining_amount / 1000
|
316
316
|
if rest.zero?
|
@@ -327,9 +327,11 @@ module RuPropisju
|
|
327
327
|
# десятки
|
328
328
|
rest = rest % 100
|
329
329
|
rest1 = rest / 10
|
330
|
+
|
330
331
|
# единички
|
331
332
|
ones = ""
|
332
333
|
tens = locale_root[rest1 == 1 ? rest : rest1 * 10]
|
334
|
+
|
333
335
|
# индекс выбранной формы
|
334
336
|
chosen_ordinal = 2
|
335
337
|
if rest1 < 1 || rest1 > 1 # единицы
|
@@ -349,6 +351,7 @@ module RuPropisju
|
|
349
351
|
item_forms[chosen_ordinal],
|
350
352
|
into
|
351
353
|
].compact.reject(&:empty?).join(' ').strip
|
354
|
+
|
352
355
|
return [plural, remaining_amount]
|
353
356
|
end
|
354
357
|
|
@@ -443,15 +446,15 @@ module RuPropisju
|
|
443
446
|
|
444
447
|
# единицы
|
445
448
|
into, remaining_amount = compose_ordinal('', amount, gender, item_forms, locale)
|
446
|
-
|
449
|
+
|
447
450
|
return into if remaining_amount.zero?
|
448
451
|
|
449
|
-
[:thousands, :millions, :billions].each do |
|
452
|
+
[:thousands, :millions, :billions].each do |elem|
|
450
453
|
into, remaining_amount = compose_ordinal(
|
451
454
|
into,
|
452
455
|
remaining_amount,
|
453
|
-
(
|
454
|
-
locale_root[
|
456
|
+
gender = (elem == :thousands ? 2 : 1), # пол женский только для тысяч
|
457
|
+
locale_root[elem],
|
455
458
|
locale
|
456
459
|
)
|
457
460
|
return into if remaining_amount.zero?
|
data/ru_propisju.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "ru_propisju"
|
8
|
-
s.version = "2.1.
|
8
|
+
s.version = "2.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Julik Tarkhanov"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2012-02-29"
|
13
13
|
s.email = "me@julik.nl"
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"README.rdoc"
|
@@ -26,7 +26,7 @@ Gem::Specification.new do |s|
|
|
26
26
|
s.homepage = "http://github.com/julik/ru_propisju"
|
27
27
|
s.licenses = ["MIT"]
|
28
28
|
s.require_paths = ["lib"]
|
29
|
-
s.rubygems_version = "1.8.
|
29
|
+
s.rubygems_version = "1.8.15"
|
30
30
|
s.summary = "C\u{443}\u{43c}\u{43c}\u{430} \u{43f}\u{440}\u{43e}\u{43f}\u{438}\u{441}\u{44c}\u{44e}"
|
31
31
|
|
32
32
|
if s.respond_to? :specification_version then
|
data/test/test_ru_propisju.rb
CHANGED
@@ -20,7 +20,7 @@ class TestRuPropisju < Test::Unit::TestCase
|
|
20
20
|
assert_equal "сто двадцать три евро", RuPropisju.amount_in_words(123, "eur")
|
21
21
|
assert_equal "сто двадцать три евро четырнадцать центов", RuPropisju.amount_in_words(123.14, "eur")
|
22
22
|
assert_equal "сто двадцать три доллара четырнадцать центов", RuPropisju.amount_in_words(123.14, "usd")
|
23
|
-
|
23
|
+
|
24
24
|
# ua locale
|
25
25
|
assert_equal "сто двадцять три рубля", RuPropisju.amount_in_words(123, :rur, :ua)
|
26
26
|
assert_equal "сто двадцять три рубля", RuPropisju.amount_in_words(123, :rub, :ua)
|
@@ -31,7 +31,13 @@ class TestRuPropisju < Test::Unit::TestCase
|
|
31
31
|
assert_equal "сто двадцять три євро чотирнадцять євроцентів", RuPropisju.amount_in_words(123.14, "eur", :ua)
|
32
32
|
assert_equal "сто двадцять три долара чотирнадцять центів", RuPropisju.amount_in_words(123.14, "usd", :ua)
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
|
+
def test_issue_3
|
36
|
+
assert_equal "два миллиона евро", RuPropisju.evro(2000000)
|
37
|
+
assert_equal "два миллиона рублей", RuPropisju.rublej(2000000)
|
38
|
+
assert_equal "два миллиона рублей", RuPropisju.amount_in_words(2000000, :rub)
|
39
|
+
end
|
40
|
+
|
35
41
|
def test_propisju_dollarov
|
36
42
|
assert_equal "сто двадцать один доллар пятьдесят один цент", RuPropisju.dollarov(121.51)
|
37
43
|
assert_equal "сто двадцять один долар п'ятьдесят один цент", RuPropisju.dollarov(121.51, :ua)
|
@@ -99,6 +105,7 @@ class TestRuPropisju < Test::Unit::TestCase
|
|
99
105
|
end
|
100
106
|
end
|
101
107
|
|
108
|
+
|
102
109
|
def test_choose_plural
|
103
110
|
assert_equal "чемодана", RuPropisju.choose_plural(523, ["чемодан", "чемодана", "чемоданов"])
|
104
111
|
assert_equal "партий", RuPropisju.choose_plural(6727, ["партия", "партии", "партий"])
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ru_propisju
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-02-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: jeweler
|
16
|
-
requirement: &
|
16
|
+
requirement: &4132640 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *4132640
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &4132360 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *4132360
|
36
36
|
description:
|
37
37
|
email: me@julik.nl
|
38
38
|
executables: []
|
@@ -68,7 +68,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
68
68
|
version: '0'
|
69
69
|
requirements: []
|
70
70
|
rubyforge_project:
|
71
|
-
rubygems_version: 1.8.
|
71
|
+
rubygems_version: 1.8.15
|
72
72
|
signing_key:
|
73
73
|
specification_version: 3
|
74
74
|
summary: Cумма прописью
|