kabal 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +19 -3
- data/kabal.gemspec +4 -1
- data/lib/kabal/errors/no_support_for_fractional_numbers_on_current_language_error.rb +5 -0
- data/lib/kabal/errors.rb +1 -0
- data/lib/kabal/languages/english.rb +1 -1
- data/lib/kabal/languages/language.rb +24 -0
- data/lib/kabal/languages/russian/declinations.rb +30 -18
- data/lib/kabal/languages/russian/fractional_numbers.rb +36 -0
- data/lib/kabal/languages/russian/natural_numbers.rb +83 -0
- data/lib/kabal/languages/russian.rb +9 -73
- data/lib/kabal/version.rb +1 -1
- data/lib/kabal.rb +12 -2
- data/test/lib/bigtest.rb +15 -2
- data/test/lib/kabal/languages/russian_test.rb +15 -0
- data/test/lib/kabal_test.rb +8 -0
- data/yaml/languages/ru.yml +13 -0
- data/yaml/support.yml +9 -0
- metadata +11 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8222532ce70bc4277e557311bb3b92c789211a20
|
4
|
+
data.tar.gz: 0a3dfce8f30ec6db359a022cfe22c360f97cfb0f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f8f45ed8a597586f73eb2fbc7b7d4d14dc0260a3d2e44b0e857b67b57e8c0832a5337804719fb4d3043d4de7e8f2285bd8d3b508e2236890a61965329a14e141
|
7
|
+
data.tar.gz: 60593e22d43fb7bccb32d0de52f5a1e8d6069f0bdca06f5db7782e588b5d5c1e24a8cd447f3c61f6e09546bd44f657ac45474d801996c13e0399b4f84abda332
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
[](https://travis-ci.org/kalashnikovisme/kabal)
|
4
4
|
[](https://coveralls.io/r/kalashnikovisme/kabal?branch=master)
|
5
|
+
[](http://inch-pages.github.io/github/kalashnikovisme/kabal)
|
5
6
|
[](http://badge.fury.io/rb/kabal)
|
6
7
|
[](https://coderwall.com/kalashnikovisme)
|
7
8
|
[](https://gemnasium.com/kalashnikovisme/kabal)
|
@@ -41,12 +42,17 @@ You can choose language to "converting".
|
|
41
42
|
Supported Languages:
|
42
43
|
|
43
44
|
* Russian
|
45
|
+
* Natural Numbers
|
46
|
+
* Fractional Numbers
|
47
|
+
* Negative Numbers
|
48
|
+
* English
|
49
|
+
* Natural Numbers
|
44
50
|
|
45
51
|
*More languages will be added later.*
|
46
52
|
|
47
53
|
You can see actual list of supported languages:
|
48
54
|
|
49
|
-
$> Kabal.supported_languages #=> ["Russian"]
|
55
|
+
$> Kabal.supported_languages #=> ["Russian", "English"]
|
50
56
|
|
51
57
|
## Contributing
|
52
58
|
|
@@ -79,9 +85,19 @@ To add Elfin language you should:
|
|
79
85
|
minus: #Minus on Elfin Language#
|
80
86
|
```
|
81
87
|
4. Add `Elfin: "el"` to `yaml/languages.yml`.
|
82
|
-
5. Add `
|
88
|
+
5. Add `el: natural: min: {min_of_your_realization}" max: {max_of_your_realization} fractional: symbols: {count_of_symbols_after_dot_that_you_realized}` to `yaml/support.yml`
|
89
|
+
6. Add `require "kabal/languages/elfin"` to `lib/kabal/supported_languages.rb`.
|
83
90
|
|
84
91
|
## Testing
|
85
92
|
|
86
93
|
Kabal has the BigTest. This test checks the correctness of the operation with all the numbers (0 to 10,000) in all supported languages.
|
87
|
-
Be careful: BigTest working
|
94
|
+
Be careful: BigTest now working around 6 minutes.
|
95
|
+
Run BigTest
|
96
|
+
|
97
|
+
$> tconsole bigtest
|
98
|
+
|
99
|
+
Relax!
|
100
|
+
|
101
|
+
$> tconsole all
|
102
|
+
|
103
|
+
runs all tests without Bigtest.
|
data/kabal.gemspec
CHANGED
@@ -10,10 +10,13 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["kalashnikovisme@gmail.com"]
|
11
11
|
spec.summary = %q{Number To Text Helper}
|
12
12
|
spec.description = %q{Kabal allows you to translate numbers into text.}
|
13
|
-
spec.homepage = ""
|
13
|
+
spec.homepage = "https://github.com/kalashnikovisme/kabal"
|
14
14
|
spec.license = "MIT"
|
15
|
+
spec.required_ruby_version = '>= 2.0.0'
|
16
|
+
spec.metadata = { "issue_tracker" => "https://github.com/kalashnikovisme/kabal/issues" }
|
15
17
|
|
16
18
|
spec.files = `git ls-files`.split("\n")
|
19
|
+
spec.post_install_message = "See documentation of Kabal on https://github.com/kalashnikovisme/kabal"
|
17
20
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
21
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
22
|
spec.require_paths = ["lib"]
|
data/lib/kabal/errors.rb
CHANGED
@@ -2,7 +2,7 @@ require 'kabal/languages/language'
|
|
2
2
|
|
3
3
|
class Kabal::English < Kabal::Language
|
4
4
|
def convert(number)
|
5
|
-
raise NumberOutRangeError.message if number < 0 or number >= 10 ** 12
|
5
|
+
raise NumberOutRangeError.message if number < 0 or number >= 10 ** 12 or number % 1 != 0
|
6
6
|
return single number if number >= 0 and number <= 19
|
7
7
|
return two_words number if number >= 0 and number <= 99
|
8
8
|
return three_words number if number >= 100 and number <= 999
|
@@ -5,6 +5,18 @@ module Kabal
|
|
5
5
|
@lang = languages[self.to_s.split(":")[-2]]
|
6
6
|
end
|
7
7
|
|
8
|
+
def supports_natural?
|
9
|
+
supports = YamlLoader.yaml_object "support"
|
10
|
+
supports["support"][lang]["natural"]
|
11
|
+
end
|
12
|
+
|
13
|
+
#TODO реализовать метод supports_negative?
|
14
|
+
|
15
|
+
def supports_fractional?
|
16
|
+
supports = YamlLoader.yaml_object "support"
|
17
|
+
supports["support"][lang]["fractional"]
|
18
|
+
end
|
19
|
+
|
8
20
|
def names
|
9
21
|
YamlLoader.yaml_object "languages/#{lang}"
|
10
22
|
end
|
@@ -12,5 +24,17 @@ module Kabal
|
|
12
24
|
def minus
|
13
25
|
YamlLoader.yaml_object("languages/#{lang}")[lang]["minus"]
|
14
26
|
end
|
27
|
+
|
28
|
+
def whole
|
29
|
+
YamlLoader.yaml_object("languages/#{lang}")[lang]["whole"]
|
30
|
+
end
|
31
|
+
|
32
|
+
def natural?(number)
|
33
|
+
number % 1 == 0
|
34
|
+
end
|
35
|
+
|
36
|
+
def fractional?(number)
|
37
|
+
number % 1 != 0
|
38
|
+
end
|
15
39
|
end
|
16
40
|
end
|
@@ -1,22 +1,34 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
1
|
+
module Kabal
|
2
|
+
module RussianRules
|
3
|
+
module Declinations
|
4
|
+
def self.name_with_declination(number_name, count)
|
5
|
+
#for 5.0e-11 like numbers
|
6
|
+
#FIXME find another way to convert number from exp form
|
7
|
+
if count.to_s.include? "e"
|
8
|
+
count = count.to_s.split('.')[0].to_i
|
9
|
+
end
|
10
|
+
#FIXME add gem russian
|
11
|
+
if number_name[-1, 1] == "а"
|
12
|
+
return number_name if ends_with_one? count
|
13
|
+
return number_name[0..4] + "и" if end_with_two_or_three_of_four? count
|
14
|
+
number_name[0..4]
|
15
|
+
elsif number_name[-1, 1] == "я"
|
16
|
+
return number_name if ends_with_one? count
|
17
|
+
number_name[0..-3] + "ых"
|
18
|
+
else
|
19
|
+
return number_name if ends_with_one? count
|
20
|
+
return number_name + "а" if end_with_two_or_three_of_four? count
|
21
|
+
number_name + "ов"
|
22
|
+
end
|
23
|
+
end
|
14
24
|
|
15
|
-
|
16
|
-
|
17
|
-
|
25
|
+
def self.ends_with_one?(count)
|
26
|
+
count.to_s[-1] == "1"
|
27
|
+
end
|
18
28
|
|
19
|
-
|
20
|
-
|
29
|
+
def self.end_with_two_or_three_of_four?(count)
|
30
|
+
count.to_s[-1] == "2" or count.to_s[-1] == "3" or count.to_s[-1] == "4"
|
31
|
+
end
|
32
|
+
end
|
21
33
|
end
|
22
34
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Kabal
|
2
|
+
module RussianRules
|
3
|
+
module FractionalNumbers
|
4
|
+
def fractional_number_name(number)
|
5
|
+
whole_part_name(number) + " " + fractional_part_name(number)
|
6
|
+
end
|
7
|
+
|
8
|
+
def fractional_ten_powers_name(number)
|
9
|
+
ten_powers_name = ""
|
10
|
+
if need_pre_word? number
|
11
|
+
ten_powers_name = names[lang]["fractional_pre_words"][fractional_number_order(number) % 3] + names[lang]["fractional_ten_powers"][fractional_number_order(number) - (fractional_number_order(number) % 3)]
|
12
|
+
else
|
13
|
+
ten_powers_name = names[lang]["fractional_ten_powers"][fractional_number_order(number)]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def need_pre_word?(number)
|
18
|
+
fractional_number_order(number) > 3 and fractional_number_order(number) % 3 != 0
|
19
|
+
end
|
20
|
+
|
21
|
+
def fractional_number_order(number)
|
22
|
+
number.to_s.split('.')[1].length
|
23
|
+
end
|
24
|
+
|
25
|
+
def fractional_part_name(number)
|
26
|
+
fractional_part = (number % 1).round(fractional_number_order(number))
|
27
|
+
feminine_natural_number_name(((fractional_part) * (10 ** fractional_number_order(number))).to_s.split('.')[0].to_i) + " " + Declinations.name_with_declination(fractional_ten_powers_name(number), fractional_part)
|
28
|
+
end
|
29
|
+
|
30
|
+
def whole_part_name(number)
|
31
|
+
count = number.to_s.split('.')[0].to_i
|
32
|
+
feminine_natural_number_name(count) + " " + Declinations.name_with_declination(whole, count)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
module Kabal
|
2
|
+
module RussianRules
|
3
|
+
module NaturalNumbers
|
4
|
+
def natural_number_name(number)
|
5
|
+
#FIXME switch case next lines
|
6
|
+
return single(number) if number >= 0 and number <= 19
|
7
|
+
return two_words(number) if number >= 20 and number <= 99
|
8
|
+
return three_words(number) if number >= 100 and number <= 999
|
9
|
+
ten_powers(number) if number >= 1000
|
10
|
+
end
|
11
|
+
|
12
|
+
def feminine_natural_number_name(number)
|
13
|
+
@feminine_name = true
|
14
|
+
natural_number_name number
|
15
|
+
end
|
16
|
+
|
17
|
+
def single(number)
|
18
|
+
if @feminine_name
|
19
|
+
@feminine_name = false
|
20
|
+
return names[lang]["single_feminine"][count(number) % 10] if count(number) % 10 == 1 or count(number) % 10 == 2
|
21
|
+
end
|
22
|
+
names[lang]["single"][number]
|
23
|
+
end
|
24
|
+
|
25
|
+
def two_words(number)
|
26
|
+
return single number if number <= 19
|
27
|
+
number_name = names[lang]["two_words"][number / 10]
|
28
|
+
number_name += " " + single(number % 10) if (number % 10 != 0)
|
29
|
+
number_name
|
30
|
+
end
|
31
|
+
|
32
|
+
def three_words(number)
|
33
|
+
return two_words number if number / 100 == 0
|
34
|
+
number_name = names[lang]["three_words"][number / 100]
|
35
|
+
return number_name += " " + two_words(number % 100) if (number % 100 >= 20)
|
36
|
+
return number_name += " " + single(number % 100) if (number % 100 != 0)
|
37
|
+
number_name
|
38
|
+
end
|
39
|
+
def ten_powers(number)
|
40
|
+
#FIXME find better way
|
41
|
+
return names[lang]["ten_powers"][100] if number_is_google? number
|
42
|
+
less_thousands number if number_is_thousands? number
|
43
|
+
return @number_name if number_is_thousands? number
|
44
|
+
create_number_name number
|
45
|
+
ten_powers(number % (10 ** number_order(number)))
|
46
|
+
end
|
47
|
+
|
48
|
+
def number_order(number)
|
49
|
+
((number.to_s.length - 1) / 3) * 3
|
50
|
+
end
|
51
|
+
|
52
|
+
def count(number)
|
53
|
+
number / (10 ** number_order(number))
|
54
|
+
end
|
55
|
+
|
56
|
+
def create_number_name(number)
|
57
|
+
if @number_name.nil?
|
58
|
+
@number_name = count_name(number) + " " + Declinations.name_with_declination(names[lang]["ten_powers"][number_order(number)], count(number))
|
59
|
+
elsif count(number) != 0
|
60
|
+
@number_name += " " + count_name(number) + " " + Declinations.name_with_declination(names[lang]["ten_powers"][number_order(number)], count(number))
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def less_thousands(number)
|
65
|
+
@number_name += " " + three_words(number % 1000) unless number == 0
|
66
|
+
end
|
67
|
+
|
68
|
+
def number_is_thousands?(number)
|
69
|
+
number_order(number) < 3
|
70
|
+
end
|
71
|
+
|
72
|
+
def count_name(number)
|
73
|
+
#FIXME number.to_S[-4] not good
|
74
|
+
@feminine_name = (number.to_s[-4] == "1" or number.to_s[-4] == "2") and count(number) and count(number) / 10 != 1 and number_order(number) == 3
|
75
|
+
three_words count(number)
|
76
|
+
end
|
77
|
+
|
78
|
+
def number_is_google?(number)
|
79
|
+
count(number) == 10 and number_order(number) == 99
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -1,90 +1,26 @@
|
|
1
1
|
require 'kabal/languages/language'
|
2
2
|
require 'kabal/languages/russian/declinations'
|
3
|
+
require 'kabal/languages/russian/natural_numbers'
|
4
|
+
require 'kabal/languages/russian/fractional_numbers'
|
3
5
|
|
4
6
|
class Kabal::Russian < Kabal::Language
|
7
|
+
include Kabal::RussianRules::NaturalNumbers
|
8
|
+
include Kabal::RussianRules::FractionalNumbers
|
9
|
+
|
5
10
|
def convert(number)
|
6
11
|
#FIXME find way to get min and max from yml file
|
7
12
|
raise NumberOutRangeError.message if number <= -(10 ** 102) or number >= 10 ** 102
|
8
13
|
#FIXME find better way
|
9
14
|
@number_name = nil
|
10
|
-
need_minus?(number) ? (minus + " " +
|
15
|
+
need_minus?(number) ? (minus + " " + number_words(-number)) : number_words(number)
|
11
16
|
end
|
12
17
|
|
13
|
-
def
|
14
|
-
|
15
|
-
|
16
|
-
return two_words(number) if number >= 20 and number <= 99
|
17
|
-
return three_words(number) if number >= 100 and number <= 999
|
18
|
-
ten_powers(number) if number >= 1000
|
18
|
+
def number_words(number)
|
19
|
+
return natural_number_name number.round if natural? number
|
20
|
+
fractional_number_name number if fractional? number
|
19
21
|
end
|
20
22
|
|
21
23
|
def need_minus?(number)
|
22
24
|
number < 0
|
23
25
|
end
|
24
|
-
|
25
|
-
def single(number)
|
26
|
-
if @feminine_name_for_thousands
|
27
|
-
@feminine_name_for_thousands = false
|
28
|
-
return names[lang]["single_feminine"][count(number) % 10]
|
29
|
-
end
|
30
|
-
names[lang]["single"][number]
|
31
|
-
end
|
32
|
-
|
33
|
-
def two_words(number)
|
34
|
-
return single number if number <= 19
|
35
|
-
number_name = names[lang]["two_words"][number / 10]
|
36
|
-
number_name += " " + single(number % 10) if (number % 10 != 0)
|
37
|
-
number_name
|
38
|
-
end
|
39
|
-
|
40
|
-
def three_words(number)
|
41
|
-
return two_words number if number / 100 == 0
|
42
|
-
number_name = names[lang]["three_words"][number / 100]
|
43
|
-
return number_name += " " + two_words(number % 100) if (number % 100 >= 20)
|
44
|
-
return number_name += " " + single(number % 100) if (number % 100 != 0)
|
45
|
-
number_name
|
46
|
-
end
|
47
|
-
|
48
|
-
def ten_powers(number)
|
49
|
-
#FIXME find better way
|
50
|
-
return names[lang]["ten_powers"][100] if number_is_google? number
|
51
|
-
less_thousands number if number_is_thousands? number
|
52
|
-
return @number_name if number_is_thousands? number
|
53
|
-
create_number_name number
|
54
|
-
ten_powers(number % (10 ** number_order(number)))
|
55
|
-
end
|
56
|
-
|
57
|
-
def number_order(number)
|
58
|
-
((number.to_s.length - 1) / 3) * 3
|
59
|
-
end
|
60
|
-
|
61
|
-
def count(number)
|
62
|
-
number / (10 ** number_order(number))
|
63
|
-
end
|
64
|
-
|
65
|
-
def create_number_name(number)
|
66
|
-
if @number_name.nil?
|
67
|
-
@number_name = count_name(number) + " " + Declinations.name_with_declination(names[lang]["ten_powers"][number_order(number)], count(number))
|
68
|
-
elsif count(number) != 0
|
69
|
-
@number_name += " " + count_name(number) + " " + Declinations.name_with_declination(names[lang]["ten_powers"][number_order(number)], count(number))
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
def less_thousands(number)
|
74
|
-
@number_name += " " + three_words(number % 1000) unless number == 0
|
75
|
-
end
|
76
|
-
|
77
|
-
def number_is_thousands?(number)
|
78
|
-
number_order(number) < 3
|
79
|
-
end
|
80
|
-
|
81
|
-
def count_name(number)
|
82
|
-
#FIXME number.to_S[-4] not good
|
83
|
-
@feminine_name_for_thousands = (number.to_s[-4] == "1" or number.to_s[-4] == "2") and count(number) and count(number) / 10 != 1 and number_order(number) == 3
|
84
|
-
three_words count(number)
|
85
|
-
end
|
86
|
-
|
87
|
-
def number_is_google?(number)
|
88
|
-
count(number) == 10 and number_order(number) == 99
|
89
|
-
end
|
90
26
|
end
|
data/lib/kabal/version.rb
CHANGED
data/lib/kabal.rb
CHANGED
@@ -10,8 +10,7 @@ module Kabal
|
|
10
10
|
include Config
|
11
11
|
|
12
12
|
def to_text(number)
|
13
|
-
|
14
|
-
obj = Object.const_get("Kabal::" + @language).new
|
13
|
+
obj = Object.const_get("Kabal::" + current_language).new
|
15
14
|
obj.convert number
|
16
15
|
end
|
17
16
|
|
@@ -36,10 +35,21 @@ module Kabal
|
|
36
35
|
|
37
36
|
def current_language
|
38
37
|
@language ||= "Russian"
|
38
|
+
@language
|
39
39
|
end
|
40
40
|
|
41
41
|
def supported_languages
|
42
42
|
languages = YamlLoader.yaml_object "languages"
|
43
43
|
languages.keys
|
44
44
|
end
|
45
|
+
|
46
|
+
def current_language_supports_natural?
|
47
|
+
obj = Object.const_get("Kabal::" + current_language).new
|
48
|
+
obj.supports_natural?
|
49
|
+
end
|
50
|
+
|
51
|
+
def current_language_supports_fractional?
|
52
|
+
obj = Object.const_get("Kabal::" + current_language).new
|
53
|
+
obj.supports_fractional?
|
54
|
+
end
|
45
55
|
end
|
data/test/lib/bigtest.rb
CHANGED
@@ -3,11 +3,24 @@ require "test_helper"
|
|
3
3
|
include Kabal
|
4
4
|
|
5
5
|
class BigTest < TestCase
|
6
|
-
def
|
6
|
+
def test_all_natural_numbers_for_all_languages
|
7
7
|
Kabal.supported_languages.each do |lang|
|
8
8
|
Kabal.language = lang
|
9
9
|
(0..10 ** 4).each do |number|
|
10
|
-
assert Kabal.to_text number
|
10
|
+
assert Kabal.to_text(number), [lang, number].to_s
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_all_fractional_numbers_in_all_languages
|
16
|
+
Kabal.supported_languages.each do |lang|
|
17
|
+
Kabal.language = lang
|
18
|
+
if Kabal.current_language_supports_fractional?
|
19
|
+
i = 0
|
20
|
+
while i < 10 do
|
21
|
+
assert Kabal.to_text(i), [lang, i].to_s
|
22
|
+
i = (i + 0.001).round 3
|
23
|
+
end
|
11
24
|
end
|
12
25
|
end
|
13
26
|
end
|
@@ -51,4 +51,19 @@ class RussianTest < TestCase
|
|
51
51
|
end
|
52
52
|
assert_equal NumberOutRangeError.message, exception.message
|
53
53
|
end
|
54
|
+
def test_to_text_with_fractional_number_with_zero
|
55
|
+
assert_equal @rus.convert(0.01), "ноль целых одна сотая"
|
56
|
+
end
|
57
|
+
def test_to_text_with_fractional_number
|
58
|
+
assert_equal @rus.convert(1.05), "одна целая пять сотых"
|
59
|
+
end
|
60
|
+
def test_to_text_with_fractional_number_like_whole
|
61
|
+
assert_equal @rus.convert(1.0), "один"
|
62
|
+
end
|
63
|
+
def test_to_text_with_fractional_number_with_preword
|
64
|
+
assert_equal @rus.convert(1.0005), "одна целая пять десятитысячных"
|
65
|
+
end
|
66
|
+
def test_to_text_with_fractional_number_with_exp_form
|
67
|
+
assert_equal @rus.convert(1.00000000005), "одна целая пять стомиллиардных"
|
68
|
+
end
|
54
69
|
end
|
data/test/lib/kabal_test.rb
CHANGED
@@ -39,4 +39,12 @@ class KabalTest < TestCase
|
|
39
39
|
def test_current_language
|
40
40
|
assert Kabal.current_language
|
41
41
|
end
|
42
|
+
|
43
|
+
def test_current_language_support_natural?
|
44
|
+
assert Kabal.current_language_supports_natural?
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_current_language_support_fractional?
|
48
|
+
assert Kabal.current_language_supports_fractional?
|
49
|
+
end
|
42
50
|
end
|
data/yaml/languages/ru.yml
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
ru:
|
2
2
|
minus: "минус"
|
3
|
+
whole: "целая"
|
3
4
|
single:
|
4
5
|
0: ноль
|
5
6
|
1: один
|
@@ -80,3 +81,15 @@ ru:
|
|
80
81
|
96: антригинтиллион
|
81
82
|
99: дуотригинтиллион
|
82
83
|
100: гугол
|
84
|
+
fractional_pre_words:
|
85
|
+
1: десяти
|
86
|
+
2: сто
|
87
|
+
fractional_ten_powers:
|
88
|
+
1: десятая
|
89
|
+
2: сотая
|
90
|
+
3: тысячная
|
91
|
+
6: миллионная
|
92
|
+
9: миллиардная
|
93
|
+
12: триллионная
|
94
|
+
15: квадраллионная
|
95
|
+
18: квинтиллионная
|
data/yaml/support.yml
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kabal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pavel Kalashnikov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -59,11 +59,14 @@ files:
|
|
59
59
|
- lib/kabal/config/yaml_loader.rb
|
60
60
|
- lib/kabal/errors.rb
|
61
61
|
- lib/kabal/errors/no_language_support_error.rb
|
62
|
+
- lib/kabal/errors/no_support_for_fractional_numbers_on_current_language_error.rb
|
62
63
|
- lib/kabal/errors/number_out_range_error.rb
|
63
64
|
- lib/kabal/languages/english.rb
|
64
65
|
- lib/kabal/languages/language.rb
|
65
66
|
- lib/kabal/languages/russian.rb
|
66
67
|
- lib/kabal/languages/russian/declinations.rb
|
68
|
+
- lib/kabal/languages/russian/fractional_numbers.rb
|
69
|
+
- lib/kabal/languages/russian/natural_numbers.rb
|
67
70
|
- lib/kabal/supported_languages.rb
|
68
71
|
- lib/kabal/version.rb
|
69
72
|
- test/lib/bigtest.rb
|
@@ -74,11 +77,13 @@ files:
|
|
74
77
|
- yaml/languages.yml
|
75
78
|
- yaml/languages/en.yml
|
76
79
|
- yaml/languages/ru.yml
|
77
|
-
|
80
|
+
- yaml/support.yml
|
81
|
+
homepage: https://github.com/kalashnikovisme/kabal
|
78
82
|
licenses:
|
79
83
|
- MIT
|
80
|
-
metadata:
|
81
|
-
|
84
|
+
metadata:
|
85
|
+
issue_tracker: https://github.com/kalashnikovisme/kabal/issues
|
86
|
+
post_install_message: See documentation of Kabal on https://github.com/kalashnikovisme/kabal
|
82
87
|
rdoc_options: []
|
83
88
|
require_paths:
|
84
89
|
- lib
|
@@ -86,7 +91,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
86
91
|
requirements:
|
87
92
|
- - ">="
|
88
93
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
94
|
+
version: 2.0.0
|
90
95
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
96
|
requirements:
|
92
97
|
- - ">="
|