ru_propisju 2.5.0 → 2.6.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.
- checksums.yaml +7 -0
- data/.gitignore +5 -0
- data/.travis.yml +10 -0
- data/{History.txt → CHANGELOG.md} +13 -1
- data/Gemfile +1 -5
- data/LICENSE.txt +21 -0
- data/README.md +27 -0
- data/Rakefile +2 -18
- data/lib/ru_propisju.rb +40 -3
- data/ru_propisju.gemspec +23 -36
- data/test/test_ru_propisju.rb +119 -0
- metadata +29 -34
- data/README.rdoc +0 -52
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e20e9dc8823138b7c1f01556c6671f32acd8bff6
|
4
|
+
data.tar.gz: 848ecac7936902c09a678ef6774546864f3b0fcc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 37667e0f5b8d061297fe0a552a2f4d1bf2b64a4d8e59e96df8949b8778a6851b36a070f98b2eb50c3c9be4ff29721c2e7977eb0a4207079835b4cf4edabf20a4
|
7
|
+
data.tar.gz: 0e988e9c6b5900aa562258322dd2e338b0a7c160697e3c19e108dd32ddb9b47f62c3d2b4d16d839b1c10773c4e31e846473d40d896226284f990f3ee4a42733e
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
@@ -1,3 +1,16 @@
|
|
1
|
+
=== 2.6.0
|
2
|
+
|
3
|
+
* Добавлена поддержка триллионов (только для русской локали)
|
4
|
+
* Убран jeweler
|
5
|
+
|
6
|
+
=== 2.5.1
|
7
|
+
|
8
|
+
* Добавлена поддержка кыргызского сома
|
9
|
+
|
10
|
+
=== 2.5.0
|
11
|
+
|
12
|
+
* Починено форматирование BigDecimal (https://github.com/julik/ru_propisju/pull/17)
|
13
|
+
|
1
14
|
=== 2.5.0
|
2
15
|
|
3
16
|
* Добавлен набор опций форматирования (https://github.com/julik/ru_propisju/pull/16)
|
@@ -62,4 +75,3 @@
|
|
62
75
|
=== 1.0.0
|
63
76
|
|
64
77
|
* Модуль вынут из RuTils
|
65
|
-
|
data/Gemfile
CHANGED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
(The MIT License)
|
2
|
+
|
3
|
+
Copyright (c) 2011 me@julik.nl
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the 'Software'), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
Выводит сумму прописью для рублей, гривен и сомов. Помогает в выборе правильного числительного
|
2
|
+
в зависимости от рода существительного.
|
3
|
+
|
4
|
+
|
5
|
+
RuPropisju.rublej(123.78) #=> "сто двадцать три рубля 78 копеек"
|
6
|
+
RuPropisju.propisju_shtuk(212.40, 2, ["сволочь", "сволочи", "сволочей"]) #=> "двести двенадцать целых четыре десятых сволочи"
|
7
|
+
RuPropisju.rublej_extended_format(1000, :ru,
|
8
|
+
fraction_formatter: '%02d',
|
9
|
+
integrals_formatter: '+ %d',
|
10
|
+
integrals_delimiter: ' ',
|
11
|
+
always_show_fraction: true) #=> "+ 1 000 рублей 00 копеек (одна тысяча рублей 00 копеек)"
|
12
|
+
|
13
|
+
cities = RuPropisju.propisju_shtuk(147, 1, ["городе", "городах", "городах"], :ru_in)
|
14
|
+
'Продается в %s' % cities #=> "Продается в ста сорока семи городах"
|
15
|
+
|
16
|
+
## Установка
|
17
|
+
|
18
|
+
Добавьте в `Gemfile`
|
19
|
+
|
20
|
+
gem 'ru_propisju`
|
21
|
+
|
22
|
+
и сделайте `bundle install`
|
23
|
+
|
24
|
+
## Лицензия
|
25
|
+
|
26
|
+
Библиотека поставляется с лицензией MIT, с лицензией можно ознакомиться в файле [LICENSE.txt](LICENSE.txt)
|
27
|
+
Английский текст лицензии является официальным.
|
data/Rakefile
CHANGED
@@ -1,26 +1,11 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# -*- ruby -*-
|
3
2
|
$KCODE = 'u' if RUBY_VERSION < '1.9.0'
|
4
3
|
|
5
4
|
require 'rubygems'
|
6
|
-
require 'jeweler'
|
7
5
|
require './lib/ru_propisju'
|
8
|
-
|
9
|
-
Jeweler::Tasks.new do |gem|
|
10
|
-
gem.version = RuPropisju::VERSION
|
11
|
-
gem.name = "ru_propisju"
|
12
|
-
gem.summary = "Cумма прописью"
|
13
|
-
gem.email = "me@julik.nl"
|
14
|
-
gem.homepage = "http://github.com/julik/ru_propisju"
|
15
|
-
gem.authors = ["Julik Tarkhanov"]
|
16
|
-
gem.license = 'MIT'
|
17
|
-
|
18
|
-
# Do not package invisibles
|
19
|
-
gem.files.exclude ".*"
|
20
|
-
end
|
21
|
-
Jeweler::RubygemsDotOrgTasks.new
|
22
|
-
|
6
|
+
require 'bundler/gem_tasks'
|
23
7
|
require 'rake/testtask'
|
8
|
+
|
24
9
|
desc "Run all tests"
|
25
10
|
Rake::TestTask.new("test") do |t|
|
26
11
|
t.libs << "test"
|
@@ -30,4 +15,3 @@ end
|
|
30
15
|
|
31
16
|
task :default => [ :test ]
|
32
17
|
|
33
|
-
# vim: syntax=ruby
|
data/lib/ru_propisju.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
$KCODE = 'u' if RUBY_VERSION < '1.9.0'
|
3
3
|
|
4
|
+
require 'bigdecimal'
|
5
|
+
|
4
6
|
# Самый лучший, прекрасный, кривой и неотразимый суперпечататель суммы прописью для Ruby.
|
5
7
|
#
|
6
8
|
# RuPropisju.rublej(123) # "сто двадцать три рубля"
|
7
9
|
module RuPropisju
|
8
10
|
|
9
|
-
VERSION = '2.
|
11
|
+
VERSION = '2.6.0'
|
10
12
|
|
11
13
|
# http://www.xe.com/symbols.php
|
12
14
|
# (лица, приближенные форексам и всяким там валютам и курсам)
|
@@ -18,6 +20,7 @@ module RuPropisju
|
|
18
20
|
"uah" => :griven,
|
19
21
|
"eur" => :evro,
|
20
22
|
"kzt" => :tenge,
|
23
|
+
"kgs" => :som
|
21
24
|
}
|
22
25
|
|
23
26
|
SUPPORTED_CURRENCIES = CURRENCIES.keys.join ','
|
@@ -29,6 +32,7 @@ module RuPropisju
|
|
29
32
|
:thousands => ["тысяча", "тысячи", "тысяч"],
|
30
33
|
:millions => ["миллион", "миллиона", "миллионов"],
|
31
34
|
:billions => ["миллиард", "миллиарда", "миллиардов"],
|
35
|
+
:trillions => ["триллион", "триллиона", "триллионов"],
|
32
36
|
100 => "сто",
|
33
37
|
200 => "двести",
|
34
38
|
300 => "триста",
|
@@ -73,6 +77,8 @@ module RuPropisju
|
|
73
77
|
:uah_fraction => ['копейка', 'копейки', 'копеек'],
|
74
78
|
:kzt_integral => ["тенге", "тенге", "тенге"],
|
75
79
|
:kzt_fraction => ['тиын', 'тиына', 'тиынов'],
|
80
|
+
:kgs_integral => ["сом", "сома", "сомов"],
|
81
|
+
:kgs_fraction => ['тыйын', 'тыйына', 'тыйынов'],
|
76
82
|
:eur_integral => ["евро", "евро", "евро"],
|
77
83
|
# по опыту моей прошлой работы в банке
|
78
84
|
# центами называют дробную часть доллара
|
@@ -87,6 +93,7 @@ module RuPropisju
|
|
87
93
|
:thousands => ["тысяче", "тысячах", "тысячах"],
|
88
94
|
:millions => ["миллионе", "миллионах", "миллионах"],
|
89
95
|
:billions => ["миллиарде", "миллиардах", "миллиардах"],
|
96
|
+
:trillions => ["триллионе", "триллионах", "триллионах"],
|
90
97
|
100 => "ста",
|
91
98
|
200 => "двухстах",
|
92
99
|
300 => "трёхстах",
|
@@ -131,6 +138,8 @@ module RuPropisju
|
|
131
138
|
:uah_fraction => %w[копейке копейках копейках],
|
132
139
|
:kzt_integral => %w[тенге тенге тенге],
|
133
140
|
:kzt_fraction => %w[тиыне тиынах тиынах],
|
141
|
+
:kgs_integral => %w[соме сомах сомах],
|
142
|
+
:kgs_fraction => %w[тыйыне тыйынах тыйынах],
|
134
143
|
:eur_integral => %w[евро евро евро],
|
135
144
|
# по опыту моей прошлой работы в банке
|
136
145
|
# центами называют дробную часть доллара
|
@@ -145,6 +154,7 @@ module RuPropisju
|
|
145
154
|
:thousands => %w[тысячи тысяч тысяч],
|
146
155
|
:millions => %w[миллиона миллионов миллионов],
|
147
156
|
:billions => %w[миллиарда миллиардов миллиардов],
|
157
|
+
:trillions => ["триллиона", "триллионах", "триллионах"],
|
148
158
|
100 => 'ста',
|
149
159
|
200 => 'двухсот',
|
150
160
|
300 => 'трёхсот',
|
@@ -189,6 +199,8 @@ module RuPropisju
|
|
189
199
|
:uah_fraction => %w[копейки копеек копеек],
|
190
200
|
:kzt_integral => %w[тенге тенге тенге],
|
191
201
|
:kzt_fraction => %w[тиына тиынов тиынов],
|
202
|
+
:kgs_integral => %w[сома сомов сомов],
|
203
|
+
:kgs_fraction => %w[тыйына тыйынов тыйынов],
|
192
204
|
:eur_integral => %w[евро евро евро],
|
193
205
|
# TODO: решить как же всё-таки звать дробную часть евро: "цент" или "евроцент"
|
194
206
|
:eur_fraction => %w[цента центов центов],
|
@@ -201,6 +213,7 @@ module RuPropisju
|
|
201
213
|
:thousands => ["тысячю", "тысячами", "тысячами"],
|
202
214
|
:millions => ["миллионом", "миллионами", "миллионами"],
|
203
215
|
:billions => ["миллиардом", "миллиардами", "миллиардами"],
|
216
|
+
:trillions => ["триллионом", "триллионами", "триллионами"],
|
204
217
|
100 => "ста",
|
205
218
|
200 => "двумястами",
|
206
219
|
300 => "тремястами",
|
@@ -245,6 +258,8 @@ module RuPropisju
|
|
245
258
|
:uah_fraction => ['копейкой', 'копейками', 'копейками'],
|
246
259
|
:kzt_integral => ["тенге", "тенге", "тенге"],
|
247
260
|
:kzt_fraction => ['тиыной', 'тиынами', 'тиынами'],
|
261
|
+
:kgs_integral => ["сомом", "сомами", "сомами"],
|
262
|
+
:kgs_fraction => ['тыйыном', 'тыйынами', 'тыйынами'],
|
248
263
|
:eur_integral => ["евро", "евро", "евро"],
|
249
264
|
# по опыту моей прошлой работы в банке
|
250
265
|
# центами называют дробную часть доллара
|
@@ -259,6 +274,7 @@ module RuPropisju
|
|
259
274
|
:thousands => ["тисяча", "тисячі", "тисяч"],
|
260
275
|
:millions => ["мільйон", "мільйона", "мільйонів"],
|
261
276
|
:billions => ["мільярд", "мільярда", "мільярдів"],
|
277
|
+
:trillions => ["трильйон", "трильйона", "трильйонів"],
|
262
278
|
100 => "сто",
|
263
279
|
200 => "двісті",
|
264
280
|
300 => "триста",
|
@@ -303,6 +319,8 @@ module RuPropisju
|
|
303
319
|
:uah_fraction => ["копійка", "копійки", "копійок"],
|
304
320
|
:kzt_integral => ["тенге", "тенге", "тенге"],
|
305
321
|
:kzt_fraction => ['тиын', 'тиына', 'тиынов'],
|
322
|
+
:kgs_integral => ["сом", "сома", "сомов"],
|
323
|
+
:kgs_fraction => ['тыйын', 'тыйына', 'тыйынов'],
|
306
324
|
:eur_integral => ["євро", "євро", "євро"],
|
307
325
|
:eur_fraction => ["євроцент", "євроцента", "євроцентів"],
|
308
326
|
:usd_integral => ["долар", "долара", "доларів"],
|
@@ -319,6 +337,7 @@ module RuPropisju
|
|
319
337
|
:uah => 2,
|
320
338
|
:eur => 1,
|
321
339
|
:kzt => 1,
|
340
|
+
:kgs => 1
|
322
341
|
}
|
323
342
|
|
324
343
|
|
@@ -415,7 +434,7 @@ module RuPropisju
|
|
415
434
|
# propisju(243, 1) => "двести сорок три"
|
416
435
|
# propisju(221, 2) => "двести двадцать одна"
|
417
436
|
def propisju(amount, gender, locale = :ru)
|
418
|
-
if amount.
|
437
|
+
if amount.kind_of?(Integer)
|
419
438
|
propisju_int(amount, gender, [], locale)
|
420
439
|
else # также сработает для Decimal, дробные десятичные числительные в долях поэтому женского рода
|
421
440
|
propisju_float(amount, locale)
|
@@ -478,6 +497,20 @@ module RuPropisju
|
|
478
497
|
money(amount, locale, integrals_key, fractions_key, money_gender, false, false, options)
|
479
498
|
end
|
480
499
|
|
500
|
+
# Выводит целое или дробное число как сумму в сомах прописью
|
501
|
+
#
|
502
|
+
# som(32) #=> "тридцать два сома"
|
503
|
+
#
|
504
|
+
# ==== Опции
|
505
|
+
# * +:always_show_fraction+ - true/false. позволяет принудительно отображать 0 в качестве дробной части для целого числа
|
506
|
+
def som(amount, locale = :ru, options = {})
|
507
|
+
integrals_key = :kgs_integral
|
508
|
+
fractions_key = :kgs_fraction
|
509
|
+
money_gender = MONEY_GENDERS[:kgs]
|
510
|
+
|
511
|
+
money(amount, locale, integrals_key, fractions_key, money_gender, false, false, options)
|
512
|
+
end
|
513
|
+
|
481
514
|
# Выводит сумму прописью в рублях по количеству копеек
|
482
515
|
#
|
483
516
|
# kopeek(343) #=> "три рубля 43 копейки"
|
@@ -526,7 +559,7 @@ module RuPropisju
|
|
526
559
|
end
|
527
560
|
end
|
528
561
|
|
529
|
-
if amount.kind_of?(Float)
|
562
|
+
if amount.kind_of?(Float) || amount.kind_of?(BigDecimal)
|
530
563
|
remainder = (amount.divmod(1)[1]*100).round
|
531
564
|
if remainder == 100
|
532
565
|
parts = [propisju_int(amount.to_i + 1, money_gender, integrals, locale)]
|
@@ -755,6 +788,10 @@ module RuPropisju
|
|
755
788
|
[name, fraction = (amount / multiplier) % 1000]
|
756
789
|
end
|
757
790
|
|
791
|
+
if amount / fractions.first.last >= 1000
|
792
|
+
raise "Amount is too large"
|
793
|
+
end
|
794
|
+
|
758
795
|
# Единицы обрабатываем отдельно
|
759
796
|
ones = amount % 1000
|
760
797
|
|
data/ru_propisju.gemspec
CHANGED
@@ -1,50 +1,37 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
1
|
# -*- encoding: utf-8 -*-
|
5
|
-
|
2
|
+
require File.dirname(__FILE__) + '/lib/ru_propisju'
|
6
3
|
Gem::Specification.new do |s|
|
7
4
|
s.name = "ru_propisju"
|
8
|
-
s.version =
|
5
|
+
s.version = RuPropisju::VERSION
|
9
6
|
|
10
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.require_paths = ["lib"]
|
11
9
|
s.authors = ["Julik Tarkhanov"]
|
12
|
-
s.date = "
|
10
|
+
s.date = "2016-05-20"
|
13
11
|
s.email = "me@julik.nl"
|
14
12
|
s.extra_rdoc_files = [
|
15
|
-
"README.
|
16
|
-
|
17
|
-
|
18
|
-
"Gemfile",
|
19
|
-
"History.txt",
|
20
|
-
"README.rdoc",
|
21
|
-
"Rakefile",
|
22
|
-
"lib/ru_propisju.rb",
|
23
|
-
"ru_propisju.gemspec",
|
24
|
-
"test/test_ru_propisju.rb"
|
13
|
+
"README.md",
|
14
|
+
"LICENSE.txt",
|
15
|
+
|
25
16
|
]
|
17
|
+
|
18
|
+
if s.respond_to?(:metadata)
|
19
|
+
s.metadata['allowed_push_host'] = 'https://rubygems.org'
|
20
|
+
s.metadata["changelog_uri"] = 'https://github.com/julik/ru_propisju/blob/master/CHANGELOG.md'
|
21
|
+
else
|
22
|
+
raise 'RubyGems 2.0 or newer is required to protect against ' \
|
23
|
+
'public gem pushes.'
|
24
|
+
end
|
25
|
+
|
26
|
+
s.files = `git ls-files -z`.split("\x0")
|
26
27
|
s.homepage = "http://github.com/julik/ru_propisju"
|
27
28
|
s.licenses = ["MIT"]
|
28
|
-
s.
|
29
|
-
s.
|
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}"
|
29
|
+
s.rubygems_version = '2.2.2'
|
30
|
+
s.summary = 'Cумма прописью'
|
31
31
|
|
32
|
-
|
33
|
-
s.specification_version = 3
|
32
|
+
s.specification_version = 4
|
34
33
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
s.add_development_dependency(%q<test-unit>, [">= 0"])
|
39
|
-
else
|
40
|
-
s.add_dependency(%q<jeweler>, ["= 1.8.4"])
|
41
|
-
s.add_dependency(%q<rake>, [">= 0"])
|
42
|
-
s.add_dependency(%q<test-unit>, [">= 0"])
|
43
|
-
end
|
44
|
-
else
|
45
|
-
s.add_dependency(%q<jeweler>, ["= 1.8.4"])
|
46
|
-
s.add_dependency(%q<rake>, [">= 0"])
|
47
|
-
s.add_dependency(%q<test-unit>, [">= 0"])
|
48
|
-
end
|
34
|
+
s.add_development_dependency 'bundler', '~> 1'
|
35
|
+
s.add_development_dependency('rake', ["~> 10"])
|
36
|
+
s.add_development_dependency('test-unit', ["= 3.1.3"])
|
49
37
|
end
|
50
|
-
|
data/test/test_ru_propisju.rb
CHANGED
@@ -18,6 +18,7 @@ class TestRuPropisju < Test::Unit::TestCase
|
|
18
18
|
assert_equal "сто двадцать три рубля", RuPropisju.amount_in_words(123, "rur")
|
19
19
|
assert_equal "сто двадцать три гривны", RuPropisju.amount_in_words(123, "uah")
|
20
20
|
assert_equal "сто двадцать три тенге", RuPropisju.amount_in_words(123, "kzt")
|
21
|
+
assert_equal "сто двадцать три сома", RuPropisju.amount_in_words(123, "kgs")
|
21
22
|
assert_equal "сто двадцать три евро", RuPropisju.amount_in_words(123, "eur")
|
22
23
|
assert_equal "сто двадцать три евро четырнадцать центов", RuPropisju.amount_in_words(123.14, "eur")
|
23
24
|
assert_equal "сто двадцать три доллара четырнадцать центов", RuPropisju.amount_in_words(123.14, "usd")
|
@@ -29,6 +30,7 @@ class TestRuPropisju < Test::Unit::TestCase
|
|
29
30
|
assert_equal "ста двадцати трёх рублях", RuPropisju.amount_in_words(123, "rur", "ru_in")
|
30
31
|
assert_equal "ста двадцати трёх гривнах", RuPropisju.amount_in_words(123, "uah", "ru_in")
|
31
32
|
assert_equal "ста двадцати трёх тенге", RuPropisju.amount_in_words(123, "kzt", "ru_in")
|
33
|
+
assert_equal "ста двадцати трёх сомах", RuPropisju.amount_in_words(123, "kgs", "ru_in")
|
32
34
|
assert_equal "ста двадцати трёх евро", RuPropisju.amount_in_words(123, "eur", "ru_in")
|
33
35
|
assert_equal "ста двадцати трёх евро четырнадцати центах", RuPropisju.amount_in_words(123.14, "eur", :ru_in)
|
34
36
|
assert_equal "ста двадцати трёх долларах четырнадцати центах", RuPropisju.amount_in_words(123.14, "usd", :ru_in)
|
@@ -45,6 +47,7 @@ class TestRuPropisju < Test::Unit::TestCase
|
|
45
47
|
assert_equal 'ста двадцати трёх рублей', RuPropisju.amount_in_words(123, 'rur', 'ru_gen')
|
46
48
|
assert_equal 'ста двадцати трёх гривен', RuPropisju.amount_in_words(123, 'uah', 'ru_gen')
|
47
49
|
assert_equal 'ста двадцати трёх тенге', RuPropisju.amount_in_words(123, 'kzt', 'ru_gen')
|
50
|
+
assert_equal 'ста двадцати трёх сомов', RuPropisju.amount_in_words(123, 'kgs', 'ru_gen')
|
48
51
|
assert_equal 'ста двадцати трёх евро', RuPropisju.amount_in_words(123, 'eur', 'ru_gen')
|
49
52
|
assert_equal 'ста двадцати трёх евро четырнадцати центов', RuPropisju.amount_in_words(123.14, 'eur', :ru_gen)
|
50
53
|
assert_equal 'ста двадцати трёх долларов четырнадцати центов', RuPropisju.amount_in_words(123.14, 'usd', :ru_gen)
|
@@ -56,6 +59,7 @@ class TestRuPropisju < Test::Unit::TestCase
|
|
56
59
|
assert_equal "ста двадцатью тремя рублями", RuPropisju.amount_in_words(123, "rur", "ru_from")
|
57
60
|
assert_equal "ста двадцатью тремя гривнами", RuPropisju.amount_in_words(123, "uah", "ru_from")
|
58
61
|
assert_equal "ста двадцатью тремя тенге", RuPropisju.amount_in_words(123, "kzt", "ru_from")
|
62
|
+
assert_equal "ста двадцатью тремя сомами", RuPropisju.amount_in_words(123, "kgs", "ru_from")
|
59
63
|
assert_equal "ста двадцатью тремя евро", RuPropisju.amount_in_words(123, "eur", "ru_from")
|
60
64
|
assert_equal "ста двадцатью тремя евро четырнадцатью центами", RuPropisju.amount_in_words(123.14, "eur", :ru_from)
|
61
65
|
assert_equal "ста двадцатью тремя долларами четырнадцатью центами", RuPropisju.amount_in_words(123.14, "usd", :ru_from)
|
@@ -67,6 +71,7 @@ class TestRuPropisju < Test::Unit::TestCase
|
|
67
71
|
assert_equal "сто двадцять три рубля", RuPropisju.amount_in_words(123, "rur", "ua")
|
68
72
|
assert_equal "сто двадцять три гривні", RuPropisju.amount_in_words(123, "uah", "ua")
|
69
73
|
assert_equal "сто двадцять три тенге", RuPropisju.amount_in_words(123, "kzt", "ua")
|
74
|
+
assert_equal "сто двадцять три сома", RuPropisju.amount_in_words(123, "kgs", "ua")
|
70
75
|
assert_equal "сто двадцять три євро", RuPropisju.amount_in_words(123, "eur", "ua")
|
71
76
|
assert_equal "сто двадцять три євро чотирнадцять євроцентів", RuPropisju.amount_in_words(123.14, "eur", :ua)
|
72
77
|
assert_equal "сто двадцять три долара чотирнадцять центів", RuPropisju.amount_in_words(123.14, "usd", :ua)
|
@@ -76,6 +81,7 @@ class TestRuPropisju < Test::Unit::TestCase
|
|
76
81
|
assert_equal "два миллиона евро", RuPropisju.evro(2000000)
|
77
82
|
assert_equal "два миллиона рублей", RuPropisju.rublej(2000000)
|
78
83
|
assert_equal "два миллиона тенге", RuPropisju.tenge(2000000)
|
84
|
+
assert_equal "два миллиона сомов", RuPropisju.som(2000000)
|
79
85
|
assert_equal "два миллиона рублей", RuPropisju.amount_in_words(2000000, :rub)
|
80
86
|
end
|
81
87
|
|
@@ -98,6 +104,66 @@ class TestRuPropisju < Test::Unit::TestCase
|
|
98
104
|
assert_equal "два миллиона сто тысяч рублей", RuPropisju.amount_in_words(2100000, :rur)
|
99
105
|
end
|
100
106
|
|
107
|
+
def test_bilions_and_trilions
|
108
|
+
assert_equal "четыреста триллионов триста миллиардов двести миллионов сто тысяч рублей", RuPropisju.rublej(400_300_200_100_000, :ru)
|
109
|
+
assert_raise_message(/too large/){
|
110
|
+
RuPropisju.rublej(1_400_300_200_100_000, :ru)
|
111
|
+
}
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_locales_integrity
|
115
|
+
numeric_keys = [
|
116
|
+
'0', #??
|
117
|
+
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
|
118
|
+
10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
|
119
|
+
20, 30, 40, 50, 60, 70, 80, 90,
|
120
|
+
100, 200, 300, 400, 500, 600, 700, 800, 900,
|
121
|
+
]
|
122
|
+
bignum_keys = [
|
123
|
+
:thousands, :millions, :billions,
|
124
|
+
:trillions,
|
125
|
+
]
|
126
|
+
currency_franctions = [
|
127
|
+
:rub_integral, :rub_fraction,
|
128
|
+
:uah_integral, :uah_fraction,
|
129
|
+
:kzt_integral, :kzt_fraction,
|
130
|
+
:kgs_integral, :kgs_fraction,
|
131
|
+
:eur_integral, :eur_fraction,
|
132
|
+
:usd_integral, :usd_fraction,
|
133
|
+
]
|
134
|
+
all_keys = (numeric_keys + bignum_keys + currency_franctions)
|
135
|
+
missing = Hash.new(){|h,k| h[k] = []}
|
136
|
+
have_extra = false
|
137
|
+
|
138
|
+
RuPropisju::TRANSLATIONS.each_pair do |locale_name, locale|
|
139
|
+
numeric_keys.each do |key|
|
140
|
+
missing[locale_name] << key unless locale[key].is_a?(String) ||
|
141
|
+
locale[key].is_a?(Hash) &&
|
142
|
+
locale[key].keys == [1, 2, 3] &&
|
143
|
+
locale[key].values.all?{|v| v.is_a? String }
|
144
|
+
end
|
145
|
+
bignum_keys.each do |key|
|
146
|
+
missing[locale_name] << key unless locale[key].is_a?(Array) &&
|
147
|
+
locale[key].size == 3 &&
|
148
|
+
locale[key].all?{|v| v.is_a? String }
|
149
|
+
end
|
150
|
+
currency_franctions.each do |key|
|
151
|
+
missing[locale_name] << key unless locale[key].is_a?(Array) &&
|
152
|
+
locale[key].size == 3 &&
|
153
|
+
locale[key].all?{|v| v.is_a? String }
|
154
|
+
end
|
155
|
+
|
156
|
+
extra_keys = locale.keys - all_keys
|
157
|
+
if extra_keys.any?
|
158
|
+
warn "Extra keys in #{locale_name}: #{(extra_keys).inspect}"
|
159
|
+
have_extra = true
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
assert_equal({}, missing)
|
164
|
+
pend "have extra keys in some locales" if have_extra
|
165
|
+
end
|
166
|
+
|
101
167
|
def test_propisju_for_ints
|
102
168
|
assert_equal "пятьсот двадцать три", RuPropisju.propisju(523, 1)
|
103
169
|
assert_equal "шесть тысяч семьсот двадцать семь", RuPropisju.propisju(6727, 1)
|
@@ -432,6 +498,59 @@ class TestRuPropisju < Test::Unit::TestCase
|
|
432
498
|
assert_equal "три тенге чотирнадцять тиынов", RuPropisju.tenge(3.14, :ua)
|
433
499
|
end
|
434
500
|
|
501
|
+
def test_soma
|
502
|
+
assert_equal "сто двадцать три сома", RuPropisju.som(123)
|
503
|
+
assert_equal "сто двадцать четыре сома", RuPropisju.som(124)
|
504
|
+
assert_equal "триста сорок три сома двадцать тыйынов", RuPropisju.som(343.20)
|
505
|
+
assert_equal "сорок два тыйына", RuPropisju.som(0.4187)
|
506
|
+
assert_equal "триста тридцать два сома", RuPropisju.som(331.995)
|
507
|
+
assert_equal "триста тридцать один сом девяносто девять тыйынов", RuPropisju.som(331.985)
|
508
|
+
assert_equal "один сом", RuPropisju.som(1)
|
509
|
+
assert_equal "три сома четырнадцать тыйынов", RuPropisju.som(3.14)
|
510
|
+
assert_equal "ноль сомов ноль тыйынов", RuPropisju.som(0)
|
511
|
+
|
512
|
+
# ru locale предложный падеж
|
513
|
+
assert_equal "ста двадцати трёх сомах", RuPropisju.som(123, :ru_in)
|
514
|
+
assert_equal "ста двадцати четырёх сомах", RuPropisju.som(124, :ru_in)
|
515
|
+
assert_equal "трёхстах сорока трёх сомах двадцати тыйынах", RuPropisju.som(343.20, :ru_in)
|
516
|
+
assert_equal "сорока двух тыйынах", RuPropisju.som(0.4187, :ru_in)
|
517
|
+
assert_equal "трёхстах тридцати двух сомах", RuPropisju.som(331.995, :ru_in)
|
518
|
+
assert_equal "трёхстах тридцати одном соме девяноста девяти тыйынах", RuPropisju.som(331.985, :ru_in)
|
519
|
+
assert_equal "одном соме", RuPropisju.som(1, :ru_in)
|
520
|
+
assert_equal "трёх сомах четырнадцати тыйынах", RuPropisju.som(3.14, :ru_in)
|
521
|
+
assert_equal "нуле сомах нуле тыйынах", RuPropisju.som(0, :ru_in)
|
522
|
+
|
523
|
+
# ru locale родительный падеж
|
524
|
+
assert_equal 'ста двадцати трёх сомов', RuPropisju.som(123, :ru_gen)
|
525
|
+
assert_equal 'ста двадцати четырёх сомов', RuPropisju.som(124, :ru_gen)
|
526
|
+
assert_equal 'трёхсот сорока трёх сомов двадцати тыйынов', RuPropisju.som(343.20, :ru_gen)
|
527
|
+
assert_equal 'сорока двух тыйынов', RuPropisju.som(0.4187, :ru_gen)
|
528
|
+
assert_equal 'трёхсот тридцати двух сомов', RuPropisju.som(331.995, :ru_gen)
|
529
|
+
assert_equal 'трёхсот тридцати одного сома девяноста девяти тыйынов', RuPropisju.som(331.985, :ru_gen)
|
530
|
+
assert_equal 'одного сома', RuPropisju.som(1, :ru_gen)
|
531
|
+
assert_equal 'трёх сомов четырнадцати тыйынов', RuPropisju.som(3.14, :ru_gen)
|
532
|
+
assert_equal 'нуля сомов нуля тыйынов', RuPropisju.som(0, :ru_gen)
|
533
|
+
|
534
|
+
# ru locale творительный падеж
|
535
|
+
assert_equal "ста двадцатью тремя сомами", RuPropisju.som(123, :ru_from)
|
536
|
+
assert_equal "ста двадцатью четырьмя сомами", RuPropisju.som(124, :ru_from)
|
537
|
+
assert_equal "тремястами сорока тремя сомами двадцатью тыйынами", RuPropisju.som(343.20, :ru_from)
|
538
|
+
assert_equal "сорока двумя тыйынами", RuPropisju.som(0.4187, :ru_from)
|
539
|
+
assert_equal "тремястами тридцатью двумя сомами", RuPropisju.som(331.995, :ru_from)
|
540
|
+
assert_equal "тремястами тридцатью одним сомом девяноста девятью тыйынами", RuPropisju.som(331.985, :ru_from)
|
541
|
+
assert_equal "одним сомом", RuPropisju.som(1, :ru_from)
|
542
|
+
assert_equal "тремя сомами четырнадцатью тыйынами", RuPropisju.som(3.14, :ru_from)
|
543
|
+
assert_equal "нулём сомами нулём тыйынами", RuPropisju.som(0, :ru_from)
|
544
|
+
|
545
|
+
# ua locale
|
546
|
+
assert_equal "сто двадцять три сома", RuPropisju.som(123, :ua)
|
547
|
+
assert_equal "триста сорок три сома двадцять тыйынов", RuPropisju.som(343.20, :ua)
|
548
|
+
assert_equal "сорок два тыйына", RuPropisju.som(0.4187, :ua)
|
549
|
+
assert_equal "триста тридцять два сома", RuPropisju.som(331.995, :ua)
|
550
|
+
assert_equal "один сом", RuPropisju.som(1, :ua)
|
551
|
+
assert_equal "три сома чотирнадцять тыйынов", RuPropisju.som(3.14, :ua)
|
552
|
+
end
|
553
|
+
|
435
554
|
def test_kopeek
|
436
555
|
assert_equal "ноль рублей 0 копеек", RuPropisju.kopeek(0)
|
437
556
|
assert_equal "сто двадцать три рубля", RuPropisju.kopeek(12300)
|
metadata
CHANGED
@@ -1,74 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ru_propisju
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
5
|
-
prerelease:
|
4
|
+
version: 2.6.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Julik Tarkhanov
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2016-05-20 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
14
|
+
name: bundler
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: 1
|
19
|
+
version: '1'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: 1
|
26
|
+
version: '1'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - "~>"
|
36
32
|
- !ruby/object:Gem::Version
|
37
|
-
version: '
|
33
|
+
version: '10'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - "~>"
|
44
39
|
- !ruby/object:Gem::Version
|
45
|
-
version: '
|
40
|
+
version: '10'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: test-unit
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '='
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
47
|
+
version: 3.1.3
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '='
|
60
53
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
54
|
+
version: 3.1.3
|
62
55
|
description:
|
63
56
|
email: me@julik.nl
|
64
57
|
executables: []
|
65
58
|
extensions: []
|
66
59
|
extra_rdoc_files:
|
67
|
-
- README.
|
60
|
+
- README.md
|
61
|
+
- LICENSE.txt
|
68
62
|
files:
|
63
|
+
- ".gitignore"
|
64
|
+
- ".travis.yml"
|
65
|
+
- CHANGELOG.md
|
69
66
|
- Gemfile
|
70
|
-
-
|
71
|
-
- README.
|
67
|
+
- LICENSE.txt
|
68
|
+
- README.md
|
72
69
|
- Rakefile
|
73
70
|
- lib/ru_propisju.rb
|
74
71
|
- ru_propisju.gemspec
|
@@ -76,29 +73,27 @@ files:
|
|
76
73
|
homepage: http://github.com/julik/ru_propisju
|
77
74
|
licenses:
|
78
75
|
- MIT
|
76
|
+
metadata:
|
77
|
+
allowed_push_host: https://rubygems.org
|
78
|
+
changelog_uri: https://github.com/julik/ru_propisju/blob/master/CHANGELOG.md
|
79
79
|
post_install_message:
|
80
80
|
rdoc_options: []
|
81
81
|
require_paths:
|
82
82
|
- lib
|
83
83
|
required_ruby_version: !ruby/object:Gem::Requirement
|
84
|
-
none: false
|
85
84
|
requirements:
|
86
|
-
- -
|
85
|
+
- - ">="
|
87
86
|
- !ruby/object:Gem::Version
|
88
87
|
version: '0'
|
89
|
-
segments:
|
90
|
-
- 0
|
91
|
-
hash: 1089524318259268093
|
92
88
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
|
-
none: false
|
94
89
|
requirements:
|
95
|
-
- -
|
90
|
+
- - ">="
|
96
91
|
- !ruby/object:Gem::Version
|
97
92
|
version: '0'
|
98
93
|
requirements: []
|
99
94
|
rubyforge_project:
|
100
|
-
rubygems_version:
|
95
|
+
rubygems_version: 2.6.11
|
101
96
|
signing_key:
|
102
|
-
specification_version:
|
97
|
+
specification_version: 4
|
103
98
|
summary: Cумма прописью
|
104
99
|
test_files: []
|
data/README.rdoc
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
= ru_propisju
|
2
|
-
|
3
|
-
* http://github.com/julik/ru_propisju
|
4
|
-
|
5
|
-
== DESCRIPTION:
|
6
|
-
|
7
|
-
Выводит сумму прописью и суммы копеек, рублей и гривен. Помогает в выборе правильного числительного.
|
8
|
-
|
9
|
-
== FEATURES/PROBLEMS:
|
10
|
-
|
11
|
-
Прекрасность.
|
12
|
-
|
13
|
-
== SYNOPSIS:
|
14
|
-
|
15
|
-
RuPropisju.rublej(123.78) #=> "сто двадцать три рубля 78 копеек"
|
16
|
-
RuPropisju.propisju_shtuk(212.40, 2, ["сволочь", "сволочи", "сволочей"]) #=> "двести двенадцать целых четыре десятых сволочи"
|
17
|
-
RuPropisju.rublej_extended_format(1000, :ru, fraction_formatter: '%02d', integrals_formatter: '+ %d', integrals_delimiter: ' ', always_show_fraction: true) #=> "+ 1 000 рублей 00 копеек (одна тысяча рублей 00 копеек)"
|
18
|
-
|
19
|
-
'Продается в ' + RuPropisju.propisju_shtuk(147, 1, ["городе", "городах", "городах"], :ru_in) #=> "Продается в ста сорока семи городах"
|
20
|
-
|
21
|
-
== REQUIREMENTS:
|
22
|
-
|
23
|
-
* Прямые руки
|
24
|
-
|
25
|
-
== INSTALL:
|
26
|
-
|
27
|
-
sudo gem install ru_propisju
|
28
|
-
|
29
|
-
== LICENSE:
|
30
|
-
|
31
|
-
(The MIT License)
|
32
|
-
|
33
|
-
Copyright (c) 2011 me@julik.nl
|
34
|
-
|
35
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
36
|
-
a copy of this software and associated documentation files (the
|
37
|
-
'Software'), to deal in the Software without restriction, including
|
38
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
39
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
40
|
-
permit persons to whom the Software is furnished to do so, subject to
|
41
|
-
the following conditions:
|
42
|
-
|
43
|
-
The above copyright notice and this permission notice shall be
|
44
|
-
included in all copies or substantial portions of the Software.
|
45
|
-
|
46
|
-
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
47
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
48
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
49
|
-
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
50
|
-
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
51
|
-
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
52
|
-
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|