ru_propisju 2.5.0 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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.