kabal 0.2.18 → 0.2.19

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d4ed3affdd65e83975550cb4cb57010fe08fe400
4
- data.tar.gz: 231c0111174e76da85c19a362bc9fbbccb4810b9
3
+ metadata.gz: afe3367013925af32229e8c4a516552299b46385
4
+ data.tar.gz: e50d47bb731812a5fd6ebf53446c74d8650f2378
5
5
  SHA512:
6
- metadata.gz: abf371957a31c4b2f45822a6854aa24beb592b15bc5cebf4452420b10cbe6239269bdbb1140beab336f8f20aaa10104199e435fea55972fd122949bbc2fde6b4
7
- data.tar.gz: a441b618c385349783780575b99d586520c60b09ac769275ded50c53359da8b9428a6ffdcaf7f851c7755bf194efff74be8d5e276886d6af0bb66185f7bfd444
6
+ metadata.gz: 9f83ed35ae41c3cb18150189f534b4c257be37579b90520ae52bb34d56561a177ecab0169e340e2896782d5b71379d0af5853595c00f209ab4f8c872dcd18ba9
7
+ data.tar.gz: dcab1c7d66dcb42c35f31c7a397a5163a42385d679e4ea5fed014e941a67d5b6ffc9141c59e55fa8644dca6d203747b90f464fa94e3d0ee52aeb51e4db1c9d8a
@@ -0,0 +1,13 @@
1
+ module Kabal
2
+ module Errors
3
+ class Error < StandardError
4
+ @message = "There is some error"
5
+ @code = "Unknown error code"
6
+
7
+ def self.message
8
+ errors = YamlLoader.yaml_object "errors"
9
+ errors["errors"]["messages"][@code]
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,9 +1,9 @@
1
+ require "kabal/errors/error"
2
+
1
3
  module Kabal
2
4
  module Errors
3
- class NoLanguageSupportError < StandardError
4
- def self.message
5
- "There is no support of such language yet"
6
- end
5
+ class NoLanguageSupportError < Error
6
+ @code = 2
7
7
  end
8
8
  end
9
9
  end
@@ -1,9 +1,9 @@
1
+ require "kabal/errors/error"
2
+
1
3
  module Kabal
2
4
  module Errors
3
- class NoSupportForFractionalNumberOnCurrentLanguages < StandardError
4
- def self.message
5
- "Current language doesn't support fractional numbers"
6
- end
5
+ class NoSupportForFractionalNumberOnCurrentLanguages < Error
6
+ @code = 3
7
7
  end
8
8
  end
9
9
  end
@@ -1,9 +1,9 @@
1
+ require "kabal/errors/error"
2
+
1
3
  module Kabal
2
4
  module Errors
3
- class NumberOutRangeError < StandardError
4
- def self.message
5
- "Number is out of the range for current language"
6
- end
5
+ class NumberOutRangeError < Error
6
+ @code = 1
7
7
  end
8
8
  end
9
9
  end
data/lib/kabal/errors.rb CHANGED
@@ -2,4 +2,5 @@ module Kabal::Errors
2
2
  require "kabal/errors/no_language_support_error"
3
3
  require "kabal/errors/number_out_range_error"
4
4
  require "kabal/errors/no_support_for_fractional_numbers_on_current_language_error"
5
+ require "kabal/errors/error"
5
6
  end
@@ -19,7 +19,7 @@ module Kabal
19
19
  count_string = number.to_s.split('.')[1]
20
20
  count = count_string.to_i
21
21
  if count_string.size != count.to_s.size
22
- (count.to_s.size..count_string.size - 1).each do
22
+ (count_string.size - count.to_s.size).times do
23
23
  name += names["single"][0] + " "
24
24
  end
25
25
  name + natural_number_name(count)
@@ -31,7 +31,9 @@ module Kabal
31
31
  @supports["natural"]
32
32
  end
33
33
 
34
- #TODO реализовать метод supports_negative?
34
+ def supports_negative?
35
+ min_value < 0
36
+ end
35
37
 
36
38
  def min_value
37
39
  eval @supports["natural"]["min"]
@@ -71,10 +71,6 @@ module Kabal
71
71
  end
72
72
  three_words count(number)
73
73
  end
74
-
75
- def is_number_ten_powers?
76
- @number <= -1000 and @number >= 1000
77
- end
78
74
  end
79
75
  end
80
76
  end
data/lib/kabal/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Kabal
2
- VERSION = "0.2.18"
2
+ VERSION = "0.2.19"
3
3
  end
data/test/lib/bigtest.rb CHANGED
@@ -4,20 +4,30 @@ include Kabal
4
4
 
5
5
  class BigTest < TestCase
6
6
  def test_all_numbers_for_all_languages
7
+ print "Whole numbers\n"
7
8
  Kabal.supported_languages.each do |lang|
8
9
  Kabal.language = lang
10
+ print lang
11
+ print "\n"
9
12
  (-(10 ** 4)..10 ** 4).each do |number|
13
+ print number
14
+ print 13.chr
10
15
  assert Kabal.to_text(number), [lang, number].to_s
11
16
  end
12
17
  end
13
18
  end
14
19
 
15
20
  def test_all_fractional_numbers_in_all_languages
21
+ print "Fractional numbers\n"
16
22
  Kabal.supported_languages.each do |lang|
17
23
  Kabal.language = lang
18
24
  if Kabal.current_language_supports_fractional?
25
+ print lang
26
+ print "\n"
19
27
  i = 0
20
- while i < 10 do
28
+ while i <= 1 do
29
+ print i
30
+ print 13.chr
21
31
  assert Kabal.to_text(i), [lang, i].to_s
22
32
  i = (i + 0.001).round 3
23
33
  end
@@ -6,35 +6,35 @@ class EnglishTest < TestCase
6
6
  end
7
7
 
8
8
  def test_single_number
9
- assert_equal @eng.convert(1), "one"
9
+ assert_equal "one", @eng.convert(1)
10
10
  end
11
11
 
12
12
  def test_two_words
13
- assert_equal @eng.convert(21), "twenty one"
13
+ assert_equal "twenty one", @eng.convert(21)
14
14
  end
15
15
 
16
16
  def test_three_words
17
- assert_equal @eng.convert(121), "one hundred twenty one"
17
+ assert_equal "one hundred twenty one", @eng.convert(121)
18
18
  end
19
19
 
20
20
  def test_three_words_with_and
21
- assert_equal @eng.convert(102), "one hundred and two"
21
+ assert_equal "one hundred and two", @eng.convert(102)
22
22
  end
23
23
 
24
24
  def test_thousands
25
- assert_equal @eng.convert(11121), "eleven thousand one hundred twenty one"
25
+ assert_equal "eleven thousand one hundred twenty one", @eng.convert(11121)
26
26
  end
27
27
 
28
28
  def test_thousands_with_and
29
- assert_equal @eng.convert(11021), "eleven thousand and twenty one"
29
+ assert_equal "eleven thousand and twenty one", @eng.convert(11021)
30
30
  end
31
31
 
32
32
  def test_hundred_thousands_with_and
33
- assert_equal @eng.convert(111021), "one hundred eleven thousand and twenty one"
33
+ assert_equal "one hundred eleven thousand and twenty one", @eng.convert(111021)
34
34
  end
35
35
 
36
36
  def test_hundred_millions_with_and
37
- assert_equal @eng.convert(111150021), "one hundred eleven million one hundred fifty thousand and twenty one"
37
+ assert_equal "one hundred eleven million one hundred fifty thousand and twenty one", @eng.convert(111150021)
38
38
  end
39
39
  def test_hundred_random_numbers
40
40
  r = Random.new
@@ -72,4 +72,7 @@ class EnglishTest < TestCase
72
72
  assert_equal "one point zero zero zero zero zero zero zero five", @eng.convert(1.00000005)
73
73
  assert_equal "minus one point zero zero zero zero zero zero zero five", @eng.convert(-1.00000005)
74
74
  end
75
+ def test_big_number
76
+ assert_equal "forty seven novemdecillion twenty six octodecillion one hundred fifty seven septendecillion eight hundred twenty five sexdecillion six hundred twenty seven quindecillion nine hundred eighty quattuordecillion seven hundred thirty three tredecillion four hundred thirty nine duodecillion two hundred twenty five undecillion eight hundred twenty three decillion three hundred fifty three nonillion twenty nine octillion six hundred fifty seven septillion seven hundred forty five sextillion five hundred forty four quintillion six hundred forty six quadrillion seven hundred sixty one trillion eight hundred ninety billion seventy four million two hundred forty four thousand and three", @eng.convert(47026157825627980733439225823353029657745544646761890074244003)
77
+ end
75
78
  end
@@ -6,68 +6,73 @@ class RussianTest < TestCase
6
6
  end
7
7
 
8
8
  def test_to_text_with_single_number
9
- assert_equal @rus.convert(1), "один"
10
- assert_equal @rus.convert(-1), "минус один"
9
+ assert_equal "один", @rus.convert(1)
10
+ assert_equal "минус один", @rus.convert(-1)
11
11
  end
12
12
  def test_to_text_with_two_words_number
13
- assert_equal @rus.convert(25), "двадцать пять"
14
- assert_equal @rus.convert(-25), "минус двадцать пять"
13
+ assert_equal "двадцать пять", @rus.convert(25)
14
+ assert_equal "минус двадцать пять", @rus.convert(-25)
15
15
  end
16
16
  def test_to_text_with_three_words_number
17
- assert_equal @rus.convert(625), "шестьсот двадцать пять"
18
- assert_equal @rus.convert(-625), "минус шестьсот двадцать пять"
17
+ assert_equal "шестьсот двадцать пять", @rus.convert(625)
18
+ assert_equal "минус шестьсот двадцать пять", @rus.convert(-625)
19
19
  end
20
20
  def test_to_text_with_ten_powers
21
- assert_equal @rus.convert(125625), "сто двадцать пять тысяч шестьсот двадцать пять"
22
- assert_equal @rus.convert(-125625), "минус сто двадцать пять тысяч шестьсот двадцать пять"
21
+ assert_equal "сто двадцать пять тысяч шестьсот двадцать пять", @rus.convert(125625)
22
+ assert_equal "минус сто двадцать пять тысяч шестьсот двадцать пять", @rus.convert(-125625)
23
23
  end
24
24
  def test_to_text_with_ten_powers_millions
25
- assert_equal @rus.convert(125125625), "сто двадцать пять миллионов сто двадцать пять тысяч шестьсот двадцать пять"
26
- assert_equal @rus.convert(-125125625), "минус сто двадцать пять миллионов сто двадцать пять тысяч шестьсот двадцать пять"
25
+ assert_equal "сто двадцать пять миллионов сто двадцать пять тысяч шестьсот двадцать пять", @rus.convert(125125625)
26
+ assert_equal "минус сто двадцать пять миллионов сто двадцать пять тысяч шестьсот двадцать пять", @rus.convert(-125125625)
27
27
  end
28
28
  def test_to_text_with_ten_powers_some_number
29
- assert_equal @rus.convert(1000001), "один миллион один"
30
- assert_equal @rus.convert(-1000001), "минус один миллион один"
29
+ assert_equal "один миллион один", @rus.convert(1000001)
30
+ assert_equal "минус один миллион один", @rus.convert(-1000001)
31
31
  end
32
32
  def test_to_text_with_google
33
- assert_equal @rus.convert(10 ** 100), "гугол"
34
- assert_equal @rus.convert(-(10 ** 100)), "минус гугол"
33
+ assert_equal "гугол", @rus.convert(10 ** 100)
34
+ assert_equal "минус гугол", @rus.convert(-(10 ** 100))
35
35
  end
36
36
  def test_to_text_with_three_words_without_second_order
37
- assert_equal @rus.convert(101), "сто один"
38
- assert_equal @rus.convert(-101), "минус сто один"
37
+ assert_equal "сто один", @rus.convert(101)
38
+ assert_equal "минус сто один", @rus.convert(-101)
39
39
  end
40
40
  def test_to_text_with_three_words_without_first_and_second_order
41
- assert_equal @rus.convert(200), "двести"
42
- assert_equal @rus.convert(-200), "минус двести"
41
+ assert_equal "двести", @rus.convert(200)
42
+ assert_equal "минус двести", @rus.convert(-200)
43
43
  end
44
44
  def test_to_text_with_thousands
45
- assert_equal @rus.convert(22000), "двадцать две тысячи"
46
- assert_equal @rus.convert(-22000), "минус двадцать две тысячи"
45
+ assert_equal "двадцать две тысячи", @rus.convert(22000)
46
+ assert_equal "минус двадцать две тысячи", @rus.convert(-22000)
47
47
  end
48
48
  def test_to_text_with_negative_number
49
49
  assert_equal NumberOutRangeError.message, @rus.convert(-(10 ** 103))
50
50
  end
51
51
  def test_to_text_with_fractional_number_with_zero
52
- assert_equal @rus.convert(0.01), "ноль целых одна сотая"
52
+ assert_equal "ноль целых одна сотая", @rus.convert(0.01)
53
+ assert_equal "минус ноль целых одна сотая", @rus.convert(-0.01)
53
54
  end
54
55
  def test_to_text_with_fractional_number
55
- assert_equal @rus.convert(1.05), "одна целая пять сотых"
56
+ assert_equal "одна целая пять сотых", @rus.convert(1.05)
57
+ assert_equal "минус одна целая пять сотых", @rus.convert(-1.05)
56
58
  end
57
59
  def test_to_text_with_fractional_number_like_whole
58
- assert_equal @rus.convert(1.0), "один"
60
+ assert_equal "один", @rus.convert(1.0)
61
+ assert_equal "минус один", @rus.convert(-1.0)
59
62
  end
60
63
  def test_to_text_with_fractional_number_with_preword
61
- assert_equal @rus.convert(1.0005), "одна целая пять десятитысячных"
64
+ assert_equal "одна целая пять десятитысячных", @rus.convert(1.0005)
65
+ assert_equal "минус одна целая пять десятитысячных", @rus.convert(-1.0005)
62
66
  end
63
67
  def test_to_text_with_fractional_number_with_exp_form
64
- assert_equal @rus.convert(1.00000000005), "одна целая пять стомиллиардных"
68
+ assert_equal "одна целая пять стомиллиардных", @rus.convert(1.00000000005)
69
+ assert_equal "минус одна целая пять стомиллиардных", @rus.convert(-1.00000000005)
65
70
  end
66
71
  def test_to_text_with_some_number
67
- assert_equal @rus.convert(1.23567891), "одна целая двадцать три миллиона пятьсот шестьдесят семь тысяч восемьсот девяносто одна стомиллионная"
72
+ assert_equal "одна целая двадцать три миллиона пятьсот шестьдесят семь тысяч восемьсот девяносто одна стомиллионная", @rus.convert(1.23567891)
68
73
  end
69
74
  def test_to_text_with_number_from_random
70
- assert_equal @rus.convert(8907085629790866538813847602612733677266862921600074745542599600440589977787608558476289530408659232), "восемь дуотригинтиллионов девятьсот семь антригинтиллионов восемьдесят пять тривигинтиллионов шестьсот двадцать девять новемвигинтиллионов семьсот девяносто октовигинтиллионов восемьсот шестьдесят шесть септемвигинтиллионов пятьсот тридцать восемь сексвигинтиллионов восемьсот тринадцать квинвигинтиллиона восемьсот сорок семь кватторвигинтиллионов шестьсот два тревигинтиллиона шестьсот двенадцать дуовигинтиллиона семьсот тридцать три анвигинтиллиона шестьсот семьдесят семь вигинтиллионов двести шестьдесят шесть новемдециллионов восемьсот шестьдесят два октодециллиона девятьсот двадцать один септемдециллион шестьсот сексдециллионов семьдесят четыре квиндециллиона семьсот сорок пять кваттуордециллионов пятьсот сорок два тредециллиона пятьсот девяносто девять дуодециллионов шестьсот андециллионов четыреста сорок дециллионов пятьсот восемьдесят девять нониллионов девятьсот семьдесят семь октиллионов семьсот восемьдесят семь септиллионов шестьсот восемь секстиллионов пятьсот пятьдесят восемь квинтиллионов четыреста семьдесят шесть квадраллионов двести восемьдесят девять триллионов пятьсот тридцать миллиардов четыреста восемь миллионов шестьсот пятьдесят девять тысяч двести тридцать два"
75
+ assert_equal "восемь дуотригинтиллионов девятьсот семь антригинтиллионов восемьдесят пять тривигинтиллионов шестьсот двадцать девять новемвигинтиллионов семьсот девяносто октовигинтиллионов восемьсот шестьдесят шесть септемвигинтиллионов пятьсот тридцать восемь сексвигинтиллионов восемьсот тринадцать квинвигинтиллиона восемьсот сорок семь кватторвигинтиллионов шестьсот два тревигинтиллиона шестьсот двенадцать дуовигинтиллиона семьсот тридцать три анвигинтиллиона шестьсот семьдесят семь вигинтиллионов двести шестьдесят шесть новемдециллионов восемьсот шестьдесят два октодециллиона девятьсот двадцать один септемдециллион шестьсот сексдециллионов семьдесят четыре квиндециллиона семьсот сорок пять кваттуордециллионов пятьсот сорок два тредециллиона пятьсот девяносто девять дуодециллионов шестьсот андециллионов четыреста сорок дециллионов пятьсот восемьдесят девять нониллионов девятьсот семьдесят семь октиллионов семьсот восемьдесят семь септиллионов шестьсот восемь секстиллионов пятьсот пятьдесят восемь квинтиллионов четыреста семьдесят шесть квадраллионов двести восемьдесят девять триллионов пятьсот тридцать миллиардов четыреста восемь миллионов шестьсот пятьдесят девять тысяч двести тридцать два", @rus.convert(8907085629790866538813847602612733677266862921600074745542599600440589977787608558476289530408659232)
71
76
  end
72
77
  def test_hundred_random_numbers
73
78
  r = Random.new
@@ -77,9 +82,9 @@ class RussianTest < TestCase
77
82
  end
78
83
  end
79
84
  def test_11000
80
- assert_equal @rus.convert(11000), "одиннадцать тысяч"
85
+ assert_equal "одиннадцать тысяч", @rus.convert(11000)
81
86
  end
82
87
  def test_111000
83
- assert_equal @rus.convert(111000), "сто одиннадцать тысяч"
88
+ assert_equal "сто одиннадцать тысяч", @rus.convert(111000)
84
89
  end
85
90
  end
@@ -9,15 +9,19 @@ class KabalTest < TestCase
9
9
  end
10
10
 
11
11
  def test_to_text
12
- assert_equal Kabal.to_text(125125125125), "сто двадцать пять миллиардов сто двадцать пять миллионов сто двадцать пять тысяч сто двадцать пять"
12
+ assert_equal "сто двадцать пять миллиардов сто двадцать пять миллионов сто двадцать пять тысяч сто двадцать пять", Kabal.to_text(125125125125)
13
13
  end
14
14
 
15
15
  def test_to_text_in_language
16
- assert_equal Kabal.to_text_in_language(125125125125, "Russian"), "сто двадцать пять миллиардов сто двадцать пять миллионов сто двадцать пять тысяч сто двадцать пять"
16
+ assert_equal "сто двадцать пять миллиардов сто двадцать пять миллионов сто двадцать пять тысяч сто двадцать пять", Kabal.to_text_in_language(125125125125, "Russian")
17
17
  end
18
18
 
19
19
  def test_to_text_in_language_by_index
20
- assert_equal Kabal.to_text_in_language_by_index(125125125125, 0), "сто двадцать пять миллиардов сто двадцать пять миллионов сто двадцать пять тысяч сто двадцать пять"
20
+ assert_equal "сто двадцать пять миллиардов сто двадцать пять миллионов сто двадцать пять тысяч сто двадцать пять", Kabal.to_text_in_language_by_index(125125125125, 0)
21
+ end
22
+
23
+ def test_to_text_in_language_by_index_with_unsupport_language
24
+ assert_equal NoLanguageSupportError.message, Kabal.to_text_in_language_by_index(125125125125, 2)
21
25
  end
22
26
 
23
27
  def test_to_text_in_language_with_unsupported_language
@@ -53,7 +57,15 @@ class KabalTest < TestCase
53
57
  end
54
58
 
55
59
  def test_minimum_for_language
56
- assert Kabal.maximum_for("Russian"), -(10 ** 102)
57
- assert Kabal.maximum_for("English"), 0
60
+ assert Kabal.minimum_for("Russian"), -(10 ** 102)
61
+ assert Kabal.minimum_for("English"), 0
62
+ end
63
+
64
+ def test_language_supports_negative
65
+ assert Kabal.language_supports_negative? "Russian"
66
+ end
67
+
68
+ def test_language_supports_fractional
69
+ assert Kabal.language_supports_fractional? "English"
58
70
  end
59
71
  end
data/yaml/errors.yml ADDED
@@ -0,0 +1,5 @@
1
+ errors:
2
+ messages:
3
+ 1: "Number is out of the range for current language"
4
+ 2: "There is no support of such language yet"
5
+ 3: "Current language doesn't support fractional numbers"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kabal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.18
4
+ version: 0.2.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Kalashnikov
@@ -58,6 +58,7 @@ files:
58
58
  - lib/kabal/config.rb
59
59
  - lib/kabal/config/yaml_loader.rb
60
60
  - lib/kabal/errors.rb
61
+ - lib/kabal/errors/error.rb
61
62
  - lib/kabal/errors/no_language_support_error.rb
62
63
  - lib/kabal/errors/no_support_for_fractional_numbers_on_current_language_error.rb
63
64
  - lib/kabal/errors/number_out_range_error.rb
@@ -76,6 +77,7 @@ files:
76
77
  - test/lib/kabal/languages/russian_test.rb
77
78
  - test/lib/kabal_test.rb
78
79
  - test/test_helper.rb
80
+ - yaml/errors.yml
79
81
  - yaml/languages.yml
80
82
  - yaml/languages/en.yml
81
83
  - yaml/languages/ru.yml