kabal 0.2.2 → 0.2.3
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/lib/kabal/languages/english.rb +7 -12
- data/lib/kabal/languages/language.rb +16 -7
- data/lib/kabal/languages/russian/fractional_numbers.rb +11 -10
- data/lib/kabal/languages/russian/natural_numbers.rb +28 -25
- data/lib/kabal/version.rb +1 -1
- data/test/lib/kabal/languages/russian_test.rb +3 -0
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 23924e082596e41018e847bfd9096c4d7e99fa0d
|
|
4
|
+
data.tar.gz: 284457d7491749ef5f4b7d0fbc6fdf57fe1deba7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f33f54547f1815dc2b504202a7f02b9894918033dbba63b1651ae38fb690c757fef6c7a2cfc873b69d7847a216f1f03c113376b6f6f5f98803d3a1010f491c2c
|
|
7
|
+
data.tar.gz: 8eedf49941bae9d8001a9e94d67f155602e66730226f1c2f561c99ede8d44798391da142e4faf0545beef9d4a4d3abe9a3222dcea18f06e2c4eb3becd9758fdc
|
|
@@ -7,6 +7,13 @@ class Kabal::English < Kabal::Language
|
|
|
7
7
|
return three_words number if number >= 100 and number <= 999
|
|
8
8
|
ten_powers number if number >= 100
|
|
9
9
|
end
|
|
10
|
+
def natural_number_name(number)
|
|
11
|
+
#FIXME switch case next lines
|
|
12
|
+
return single(number) if number >= 0 and number <= 19
|
|
13
|
+
return two_words(number) if number >= 20 and number <= 99
|
|
14
|
+
return three_words(number) if number >= 100 and number <= 999
|
|
15
|
+
ten_powers(number) if number >= 1000
|
|
16
|
+
end
|
|
10
17
|
|
|
11
18
|
def single(number)
|
|
12
19
|
names["single"][number]
|
|
@@ -34,14 +41,6 @@ class Kabal::English < Kabal::Language
|
|
|
34
41
|
ten_powers number % (10 ** number_order(number))
|
|
35
42
|
end
|
|
36
43
|
|
|
37
|
-
def number_order(number)
|
|
38
|
-
((number.to_s.length - 1) / 3) * 3
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def count(number)
|
|
42
|
-
number / (10 ** number_order(number))
|
|
43
|
-
end
|
|
44
|
-
|
|
45
44
|
def create_number_name(number)
|
|
46
45
|
if @number_name.nil?
|
|
47
46
|
@number_name = count_name(number) + " " + names["ten_powers"][number_order(number)]
|
|
@@ -58,8 +57,4 @@ class Kabal::English < Kabal::Language
|
|
|
58
57
|
@number_name += " and" if number < 100
|
|
59
58
|
@number_name += " " + three_words(number % 1000) unless number == 0
|
|
60
59
|
end
|
|
61
|
-
|
|
62
|
-
def number_is_thousands?(number)
|
|
63
|
-
number_order(number) < 3
|
|
64
|
-
end
|
|
65
60
|
end
|
|
@@ -49,18 +49,27 @@ module Kabal
|
|
|
49
49
|
number % 1 != 0
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
-
def natural_number_name(number)
|
|
53
|
-
#FIXME switch case next lines
|
|
54
|
-
return single(number) if number >= 0 and number <= 19
|
|
55
|
-
return two_words(number) if number >= 20 and number <= 99
|
|
56
|
-
return three_words(number) if number >= 100 and number <= 999
|
|
57
|
-
ten_powers(number) if number >= 1000
|
|
58
|
-
end
|
|
59
52
|
|
|
60
53
|
def natural?(number)
|
|
61
54
|
number % 1 == 0
|
|
62
55
|
end
|
|
63
56
|
|
|
57
|
+
def number_is_thousands?(number)
|
|
58
|
+
number_order(number) < 3
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def number_is_google?(number)
|
|
62
|
+
count(number) == 10 and number_order(number) == 99
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def number_order(number)
|
|
66
|
+
((number.to_s.length - 1) / 3) * 3
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def count(number)
|
|
70
|
+
number / (10 ** number_order(number))
|
|
71
|
+
end
|
|
72
|
+
|
|
64
73
|
def check_supports_for(number)
|
|
65
74
|
if number % 1 != 0 and not supports_fractional?
|
|
66
75
|
raise NoSupportForFractionalNumberOnCurrentLanguages.message
|
|
@@ -5,6 +5,17 @@ module Kabal
|
|
|
5
5
|
whole_part_name(number) + " " + fractional_part_name(number)
|
|
6
6
|
end
|
|
7
7
|
|
|
8
|
+
def fractional_part_name(number)
|
|
9
|
+
fractional_part = (number % 1).round(fractional_number_order(number))
|
|
10
|
+
fractional_order = ((fractional_part) * (10 ** fractional_number_order(number))).to_s.split('.')[0].to_i
|
|
11
|
+
feminine_natural_number_name(fractional_order, true) + " " + Declinations.name_with_declination(fractional_ten_powers_name(number), fractional_part)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def whole_part_name(number)
|
|
15
|
+
count = number.to_s.split('.')[0].to_i
|
|
16
|
+
feminine_natural_number_name(count) + " " + Declinations.name_with_declination(whole, count)
|
|
17
|
+
end
|
|
18
|
+
|
|
8
19
|
def fractional_ten_powers_name(number)
|
|
9
20
|
ten_powers_name = ""
|
|
10
21
|
if need_pre_word? number
|
|
@@ -30,16 +41,6 @@ module Kabal
|
|
|
30
41
|
number.to_s.split('.')[1].length
|
|
31
42
|
end
|
|
32
43
|
|
|
33
|
-
def fractional_part_name(number)
|
|
34
|
-
fractional_part = (number % 1).round(fractional_number_order(number))
|
|
35
|
-
fractional_order = ((fractional_part) * (10 ** fractional_number_order(number))).to_s.split('.')[0].to_i
|
|
36
|
-
feminine_natural_number_name(fractional_order) + " " + Declinations.name_with_declination(fractional_ten_powers_name(number), fractional_part)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def whole_part_name(number)
|
|
40
|
-
count = number.to_s.split('.')[0].to_i
|
|
41
|
-
feminine_natural_number_name(count) + " " + Declinations.name_with_declination(whole, count)
|
|
42
|
-
end
|
|
43
44
|
end
|
|
44
45
|
end
|
|
45
46
|
end
|
|
@@ -2,33 +2,48 @@ module Kabal
|
|
|
2
2
|
module RussianRules
|
|
3
3
|
module NaturalNumbers
|
|
4
4
|
|
|
5
|
-
def feminine_natural_number_name(number)
|
|
6
|
-
@
|
|
5
|
+
def feminine_natural_number_name(number, fractional_part = false)
|
|
6
|
+
@number = number
|
|
7
|
+
@feminine_name = !fractional_part
|
|
8
|
+
@fractional_part = fractional_part
|
|
7
9
|
natural_number_name number
|
|
8
10
|
end
|
|
9
11
|
|
|
10
|
-
def
|
|
12
|
+
def natural_number_name(number)
|
|
13
|
+
#FIXME switch case next lines
|
|
14
|
+
return single(number, true) if number >= 0 and number <= 19
|
|
15
|
+
return two_words(number, true) if number >= 20 and number <= 99
|
|
16
|
+
return three_words(number, true) if number >= 100 and number <= 999
|
|
17
|
+
ten_powers(number) if number >= 1000
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def single(number, this_is_end = false)
|
|
11
21
|
if @feminine_name
|
|
12
22
|
@feminine_name = false
|
|
13
23
|
return names["single_feminine"][count(number) % 10] if count(number) % 10 == 1 or count(number) % 10 == 2
|
|
14
24
|
end
|
|
25
|
+
if @fractional_part and this_is_end
|
|
26
|
+
@fractional_part = false
|
|
27
|
+
return names["single_feminine"][count(number) % 10] if count(number) % 10 == 1 or count(number) % 10 == 2
|
|
28
|
+
end
|
|
15
29
|
names["single"][number]
|
|
16
30
|
end
|
|
17
31
|
|
|
18
|
-
def two_words(number)
|
|
19
|
-
return single
|
|
32
|
+
def two_words(number, this_is_end = false)
|
|
33
|
+
return single(number, this_is_end) if number <= 19
|
|
20
34
|
number_name = names["two_words"][number / 10]
|
|
21
|
-
number_name += " " + single(number % 10) if (number % 10 != 0)
|
|
35
|
+
number_name += " " + single(number % 10, this_is_end) if (number % 10 != 0)
|
|
22
36
|
number_name
|
|
23
37
|
end
|
|
24
38
|
|
|
25
|
-
def three_words(number)
|
|
26
|
-
return two_words
|
|
39
|
+
def three_words(number, this_is_end = false)
|
|
40
|
+
return two_words(number, this_is_end) if number / 100 == 0
|
|
27
41
|
number_name = names["three_words"][number / 100]
|
|
28
|
-
return number_name += " " + two_words(number % 100) if (number % 100 >= 20)
|
|
29
|
-
return number_name += " " + single(number % 100) if (number % 100 != 0)
|
|
42
|
+
return number_name += " " + two_words(number % 100, this_is_end) if (number % 100 >= 20)
|
|
43
|
+
return number_name += " " + single(number % 100, this_is_end) if (number % 100 != 0)
|
|
30
44
|
number_name
|
|
31
45
|
end
|
|
46
|
+
|
|
32
47
|
def ten_powers(number)
|
|
33
48
|
#FIXME find better way
|
|
34
49
|
return names["ten_powers"][100] if number_is_google? number
|
|
@@ -38,14 +53,6 @@ module Kabal
|
|
|
38
53
|
ten_powers(number % (10 ** number_order(number)))
|
|
39
54
|
end
|
|
40
55
|
|
|
41
|
-
def number_order(number)
|
|
42
|
-
((number.to_s.length - 1) / 3) * 3
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def count(number)
|
|
46
|
-
number / (10 ** number_order(number))
|
|
47
|
-
end
|
|
48
|
-
|
|
49
56
|
def create_number_name(number)
|
|
50
57
|
if @number_name.nil?
|
|
51
58
|
@number_name = count_name(number) + " " + Declinations.name_with_declination(names["ten_powers"][number_order(number)], count(number))
|
|
@@ -55,11 +62,7 @@ module Kabal
|
|
|
55
62
|
end
|
|
56
63
|
|
|
57
64
|
def less_thousands(number)
|
|
58
|
-
@number_name += " " + three_words(number % 1000) unless number == 0
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def number_is_thousands?(number)
|
|
62
|
-
number_order(number) < 3
|
|
65
|
+
@number_name += " " + three_words(number % 1000, true) unless number == 0
|
|
63
66
|
end
|
|
64
67
|
|
|
65
68
|
def count_name(number)
|
|
@@ -68,8 +71,8 @@ module Kabal
|
|
|
68
71
|
three_words count(number)
|
|
69
72
|
end
|
|
70
73
|
|
|
71
|
-
def
|
|
72
|
-
|
|
74
|
+
def is_number_ten_powers?
|
|
75
|
+
@number <= -1000 and @number >= 1000
|
|
73
76
|
end
|
|
74
77
|
end
|
|
75
78
|
end
|
data/lib/kabal/version.rb
CHANGED
|
@@ -66,4 +66,7 @@ class RussianTest < TestCase
|
|
|
66
66
|
def test_to_text_with_fractional_number_with_exp_form
|
|
67
67
|
assert_equal @rus.convert(1.00000000005), "одна целая пять стомиллиардных"
|
|
68
68
|
end
|
|
69
|
+
def test_to_text_with_some_number
|
|
70
|
+
assert_equal @rus.convert(1.23567891), "одна целая двадцать три миллиона пятьсот шестьдесят семь тысяч восемьсот девяносто одна стомиллионная"
|
|
71
|
+
end
|
|
69
72
|
end
|
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.3
|
|
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-14 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|