kabal 0.2.16 → 0.2.17
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/fractional_numbers.rb +32 -0
- data/lib/kabal/languages/english/natural_numbers.rb +54 -0
- data/lib/kabal/languages/english.rb +7 -54
- data/lib/kabal/languages/language.rb +4 -1
- data/lib/kabal/version.rb +1 -1
- data/test/lib/kabal/languages/english_test.rb +20 -4
- data/yaml/languages/en.yml +1 -0
- data/yaml/support.yml +2 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d39a7af74516c2775b90dbe30f456e4bee5ea60b
|
4
|
+
data.tar.gz: 663a90b0bfce2fec9703881377db0cac032e016c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cd9f650d42390c04015f669c2d1d3b7aaf4bc7e337e4e5145c11f48cd2014e7012c988ba51130494afc14c2da5e85239aa9b7f7b329d92f77af4e9413431ec96
|
7
|
+
data.tar.gz: 109a7bf5fe2bc27c3a5650033a84cf5d99eb91f00d001f595bb57fbe3853a79d3b630497074f404c0dc0372c66ac5a5b5739f1bfabf66442f67852bfd0021e25
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Kabal
|
2
|
+
module EnglishRules
|
3
|
+
module FractionalNumbers
|
4
|
+
def fractional_number_name(number)
|
5
|
+
if whole_part_name(number) != ""
|
6
|
+
whole_part_name(number) + " " + dot + " " + fractional_part_name(number)
|
7
|
+
else
|
8
|
+
dot + " " + fractional_part_name(number)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def whole_part_name(number)
|
13
|
+
count = number.to_s.split('.')[0].to_i
|
14
|
+
count != 0 ? natural_number_name(count) : ""
|
15
|
+
end
|
16
|
+
|
17
|
+
def fractional_part_name(number)
|
18
|
+
name = ""
|
19
|
+
count_string = number.to_s.split('.')[1]
|
20
|
+
count = count_string.to_i
|
21
|
+
if count_string.size != count.to_s.size
|
22
|
+
(count.to_s.size..count_string.size - 1).each do
|
23
|
+
name += names["single"][0] + " "
|
24
|
+
end
|
25
|
+
name + natural_number_name(count)
|
26
|
+
else
|
27
|
+
natural_number_name(count)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Kabal
|
2
|
+
module EnglishRules
|
3
|
+
module NaturalNumbers
|
4
|
+
def natural_number_name(number)
|
5
|
+
return single number if number >= 0 and number <= 19
|
6
|
+
return two_words number if number >= 0 and number <= 99
|
7
|
+
return three_words number if number >= 100 and number <= 999
|
8
|
+
ten_powers number if number >= 100
|
9
|
+
end
|
10
|
+
def single(number)
|
11
|
+
names["single"][number]
|
12
|
+
end
|
13
|
+
|
14
|
+
def two_words(number)
|
15
|
+
return single number if number <= 19
|
16
|
+
number_name = names["two_words"][number / 10]
|
17
|
+
number_name += " " + single(number % 10) if (number % 10 != 0)
|
18
|
+
number_name
|
19
|
+
end
|
20
|
+
|
21
|
+
def three_words(number)
|
22
|
+
return two_words number if number <= 99
|
23
|
+
number_name = single(number / 100) + " " + names["ten_powers"][2]
|
24
|
+
number_name += " " + two_words(number % 100) if (number % 100 >= 10)
|
25
|
+
number_name += " and " + single(number % 100) if (number % 100 < 10)
|
26
|
+
number_name
|
27
|
+
end
|
28
|
+
|
29
|
+
def ten_powers(number)
|
30
|
+
less_thousands number if number_is_thousands? number
|
31
|
+
return @number_name if number_is_thousands? number
|
32
|
+
create_number_name number
|
33
|
+
ten_powers number % (10 ** number_order(number))
|
34
|
+
end
|
35
|
+
|
36
|
+
def create_number_name(number)
|
37
|
+
if @number_name.nil?
|
38
|
+
@number_name = count_name(number) + " " + names["ten_powers"][number_order(number)]
|
39
|
+
elsif count(number) != 0
|
40
|
+
@number_name += " " + count_name(number) + " " + names["ten_powers"][number_order(number)]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def count_name(number)
|
45
|
+
three_words count(number)
|
46
|
+
end
|
47
|
+
|
48
|
+
def less_thousands(number)
|
49
|
+
@number_name += " and" if number < 100
|
50
|
+
@number_name += " " + three_words(number % 1000) unless number == 0
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -1,6 +1,10 @@
|
|
1
1
|
require 'kabal/languages/language'
|
2
|
+
require 'kabal/languages/english/natural_numbers'
|
3
|
+
require 'kabal/languages/english/fractional_numbers'
|
2
4
|
|
3
5
|
class Kabal::English < Kabal::Language
|
6
|
+
include Kabal::EnglishRules::NaturalNumbers
|
7
|
+
include Kabal::EnglishRules::FractionalNumbers
|
4
8
|
def convert_number(number)
|
5
9
|
if need_minus? number
|
6
10
|
minus + " " + number_words(-number)
|
@@ -8,60 +12,9 @@ class Kabal::English < Kabal::Language
|
|
8
12
|
number_words number
|
9
13
|
end
|
10
14
|
end
|
11
|
-
def number_words(number)
|
12
|
-
return single number if number >= 0 and number <= 19
|
13
|
-
return two_words number if number >= 0 and number <= 99
|
14
|
-
return three_words number if number >= 100 and number <= 999
|
15
|
-
ten_powers number if number >= 100
|
16
|
-
end
|
17
|
-
def natural_number_name(number)
|
18
|
-
#FIXME switch case next lines
|
19
|
-
return single(number) if number >= 0 and number <= 19
|
20
|
-
return two_words(number) if number >= 20 and number <= 99
|
21
|
-
return three_words(number) if number >= 100 and number <= 999
|
22
|
-
ten_powers(number) if number >= 1000
|
23
|
-
end
|
24
|
-
|
25
|
-
def single(number)
|
26
|
-
names["single"][number]
|
27
|
-
end
|
28
|
-
|
29
|
-
def two_words(number)
|
30
|
-
return single number if number <= 19
|
31
|
-
number_name = names["two_words"][number / 10]
|
32
|
-
number_name += " " + single(number % 10) if (number % 10 != 0)
|
33
|
-
number_name
|
34
|
-
end
|
35
|
-
|
36
|
-
def three_words(number)
|
37
|
-
return two_words number if number <= 99
|
38
|
-
number_name = single(number / 100) + " " + names["ten_powers"][2]
|
39
|
-
number_name += " " + two_words(number % 100) if (number % 100 >= 10)
|
40
|
-
number_name += " and " + single(number % 100) if (number % 100 < 10)
|
41
|
-
number_name
|
42
|
-
end
|
43
15
|
|
44
|
-
def
|
45
|
-
|
46
|
-
|
47
|
-
create_number_name number
|
48
|
-
ten_powers number % (10 ** number_order(number))
|
49
|
-
end
|
50
|
-
|
51
|
-
def create_number_name(number)
|
52
|
-
if @number_name.nil?
|
53
|
-
@number_name = count_name(number) + " " + names["ten_powers"][number_order(number)]
|
54
|
-
elsif count(number) != 0
|
55
|
-
@number_name += " " + count_name(number) + " " + names["ten_powers"][number_order(number)]
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def count_name(number)
|
60
|
-
three_words count(number)
|
61
|
-
end
|
62
|
-
|
63
|
-
def less_thousands(number)
|
64
|
-
@number_name += " and" if number < 100
|
65
|
-
@number_name += " " + three_words(number % 1000) unless number == 0
|
16
|
+
def number_words(number)
|
17
|
+
return natural_number_name number.round if natural? number
|
18
|
+
fractional_number_name number if fractional? number
|
66
19
|
end
|
67
20
|
end
|
data/lib/kabal/version.rb
CHANGED
@@ -36,10 +36,6 @@ class EnglishTest < TestCase
|
|
36
36
|
def test_hundred_millions_with_and
|
37
37
|
assert_equal @eng.convert(111150021), "one hundred eleven million one hundred fifty thousand and twenty one"
|
38
38
|
end
|
39
|
-
|
40
|
-
def test_fractional_number
|
41
|
-
assert_equal NoSupportForFractionalNumberOnCurrentLanguages.message, @eng.convert(0.1)
|
42
|
-
end
|
43
39
|
def test_hundred_random_numbers
|
44
40
|
r = Random.new
|
45
41
|
(1..63).each do |power|
|
@@ -56,4 +52,24 @@ class EnglishTest < TestCase
|
|
56
52
|
def test_minus_one_hundred_fifty
|
57
53
|
assert_equal "minus one hundred fifty", @eng.convert(-150)
|
58
54
|
end
|
55
|
+
def test_1_point_5
|
56
|
+
assert_equal "one point five", @eng.convert(1.5)
|
57
|
+
assert_equal "minus one point five", @eng.convert(-1.5)
|
58
|
+
end
|
59
|
+
def test_125_point_125
|
60
|
+
assert_equal "one hundred twenty five point one hundred twenty five", @eng.convert(125.125)
|
61
|
+
assert_equal "minus one hundred twenty five point one hundred twenty five", @eng.convert(-125.125)
|
62
|
+
end
|
63
|
+
def test_zero_point_one
|
64
|
+
assert_equal "point one", @eng.convert(0.1)
|
65
|
+
assert_equal "minus point one", @eng.convert(-0.1)
|
66
|
+
end
|
67
|
+
def test_one_point_zero_five
|
68
|
+
assert_equal "one point zero five", @eng.convert(1.05)
|
69
|
+
assert_equal "minus one point zero five", @eng.convert(-1.05)
|
70
|
+
end
|
71
|
+
def test_one_point_zero_zero_zero_zero_zero_zero_zero_five
|
72
|
+
assert_equal "one point zero zero zero zero zero zero zero five", @eng.convert(1.00000005)
|
73
|
+
assert_equal "minus one point zero zero zero zero zero zero zero five", @eng.convert(-1.00000005)
|
74
|
+
end
|
59
75
|
end
|
data/yaml/languages/en.yml
CHANGED
data/yaml/support.yml
CHANGED
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.17
|
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-07-
|
11
|
+
date: 2014-07-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -62,6 +62,8 @@ files:
|
|
62
62
|
- lib/kabal/errors/no_support_for_fractional_numbers_on_current_language_error.rb
|
63
63
|
- lib/kabal/errors/number_out_range_error.rb
|
64
64
|
- lib/kabal/languages/english.rb
|
65
|
+
- lib/kabal/languages/english/fractional_numbers.rb
|
66
|
+
- lib/kabal/languages/english/natural_numbers.rb
|
65
67
|
- lib/kabal/languages/language.rb
|
66
68
|
- lib/kabal/languages/russian.rb
|
67
69
|
- lib/kabal/languages/russian/declinations.rb
|