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.
@@ -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
@@ -0,0 +1,5 @@
1
+ Gemfile.lock
2
+ .idea/
3
+ pkg
4
+ .bundle
5
+ .ruby-version
@@ -0,0 +1,10 @@
1
+ rvm:
2
+ - 1.8.7
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - 2.0.0
6
+ - 2.1.1
7
+ - 2.1.2
8
+ - 2.2.1
9
+ - 2.4.0
10
+ - 2.5.0
@@ -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
@@ -1,7 +1,3 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- group :development do
4
- gem "jeweler", '1.8.4' # Last one without the stupid nokogiri dependency
5
- gem "rake"
6
- gem "test-unit"
7
- end
3
+ gemspec
@@ -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.
@@ -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
@@ -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.5.0'
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.is_a?(Integer) || amount.is_a?(Bignum)
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
 
@@ -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 = "2.5.0"
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 = "2015-09-03"
10
+ s.date = "2016-05-20"
13
11
  s.email = "me@julik.nl"
14
12
  s.extra_rdoc_files = [
15
- "README.rdoc"
16
- ]
17
- s.files = [
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.require_paths = ["lib"]
29
- s.rubygems_version = "1.8.23.2"
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
- if s.respond_to? :specification_version then
33
- s.specification_version = 3
32
+ s.specification_version = 4
34
33
 
35
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
36
- s.add_development_dependency(%q<jeweler>, ["= 1.8.4"])
37
- s.add_development_dependency(%q<rake>, [">= 0"])
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
-
@@ -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.0
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: 2015-09-03 00:00:00.000000000 Z
11
+ date: 2016-05-20 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: jeweler
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.8.4
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.8.4
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: '0'
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: '0'
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: '0'
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: '0'
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.rdoc
60
+ - README.md
61
+ - LICENSE.txt
68
62
  files:
63
+ - ".gitignore"
64
+ - ".travis.yml"
65
+ - CHANGELOG.md
69
66
  - Gemfile
70
- - History.txt
71
- - README.rdoc
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: 1.8.23.2
95
+ rubygems_version: 2.6.11
101
96
  signing_key:
102
- specification_version: 3
97
+ specification_version: 4
103
98
  summary: Cумма прописью
104
99
  test_files: []
@@ -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.