kabal 0.2.20 → 0.3.0
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/deutsch.rb +19 -0
- data/lib/kabal/languages/deutsch/declinations.rb +16 -0
- data/lib/kabal/languages/deutsch/natural_numbers.rb +73 -0
- data/lib/kabal/supported_languages.rb +1 -0
- data/lib/kabal/version.rb +1 -1
- data/test/lib/kabal/languages/deutsch_test.rb +64 -0
- data/test/lib/kabal/languages/english_test.rb +5 -0
- data/test/lib/kabal/languages/russian_test.rb +5 -0
- data/test/lib/kabal_test.rb +1 -1
- data/yaml/languages.yml +1 -0
- data/yaml/languages/de.yml +42 -0
- data/yaml/support.yml +4 -0
- metadata +7 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 30d91a801ce23687d1dbdb99ac9b5286384ea1c8
|
4
|
+
data.tar.gz: 149674eb348ab6ffd8b04895c125fadf8d4b916c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 81c61f46073989ce009ea24e4b453cd33a0abb61d9494ab98e45b74027805711feccb6d8370f327c4013e5edec57142992f89e32679e8167714b097ef8d4e029
|
7
|
+
data.tar.gz: 53bd1ade55bf8b08c8a024f63f5339d88549243567c5bdd127dd28848da4781c8f4fbdfd919066476b810eadfac5334c9723eea32b9e8d6ee942418382e9d605
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'kabal/languages/language'
|
2
|
+
require 'kabal/languages/deutsch/natural_numbers'
|
3
|
+
require 'kabal/languages/deutsch/declinations'
|
4
|
+
|
5
|
+
class Kabal::Deutsch < Kabal::Language
|
6
|
+
include Kabal::DeutschRules::NaturalNumbers
|
7
|
+
|
8
|
+
def convert(number)
|
9
|
+
if need_minus? number
|
10
|
+
minus + " " + number_words(-number)
|
11
|
+
else
|
12
|
+
number_words number
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def number_words(number)
|
17
|
+
natural_number_name number.round if natural? number
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Kabal
|
2
|
+
module DeutschRules
|
3
|
+
module Declinations
|
4
|
+
def self.name_with_declination(number_name, count)
|
5
|
+
if count != 1
|
6
|
+
if number_name[-1, 1] == "n"
|
7
|
+
return number_name + "en"
|
8
|
+
elsif number_name[-1, 1] == "e"
|
9
|
+
return number_name + "n"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
number_name
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module Kabal
|
2
|
+
module DeutschRules
|
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
|
+
unless @ein
|
12
|
+
names["single"][number]
|
13
|
+
else
|
14
|
+
@ein = false
|
15
|
+
names["single"][number].chop
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def two_words(number)
|
20
|
+
return single number if number <= 19
|
21
|
+
number_name = names["two_words"][number / 10]
|
22
|
+
@ein = (number % 10 == 1)
|
23
|
+
number_name = single(number % 10) + names["and"] + number_name if (number % 10 != 0)
|
24
|
+
number_name
|
25
|
+
end
|
26
|
+
|
27
|
+
def three_words(number)
|
28
|
+
return two_words number if number <= 99
|
29
|
+
@ein = (number / 100 == 1)
|
30
|
+
number_name = single(number / 100) + names["ten_powers"][2]
|
31
|
+
number_name += two_words(number % 100) if (number % 100 >= 10)
|
32
|
+
number_name += single(number % 100) if number % 100 < 10 and number % 100 != 0
|
33
|
+
number_name
|
34
|
+
end
|
35
|
+
|
36
|
+
def ten_powers(number)
|
37
|
+
less_thousands number if number_is_thousands? number
|
38
|
+
return @number_name if number_is_thousands? number
|
39
|
+
create_number_name number
|
40
|
+
ten_powers number % (10 ** number_order(number))
|
41
|
+
end
|
42
|
+
|
43
|
+
def create_number_name(number)
|
44
|
+
if @number_name.nil?
|
45
|
+
@number_name = words_to_add(number)
|
46
|
+
elsif count(number) != 0
|
47
|
+
@number_name += words_to_add(number)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def count_name(number)
|
52
|
+
three_words count(number)
|
53
|
+
end
|
54
|
+
|
55
|
+
def less_thousands(number)
|
56
|
+
return if number == 0
|
57
|
+
@number_name += three_words(number % 1000) unless number == 0
|
58
|
+
end
|
59
|
+
|
60
|
+
def millions_or_greater?(number)
|
61
|
+
number_order(number) > 3
|
62
|
+
end
|
63
|
+
|
64
|
+
def words_to_add(number)
|
65
|
+
if millions_or_greater?(number)
|
66
|
+
@number_name = count_name(number) + " " + Declinations.name_with_declination(names["ten_powers"][number_order(number)], count(number)) + " "
|
67
|
+
else
|
68
|
+
@number_name = count_name(number) + Declinations.name_with_declination(names["ten_powers"][number_order(number)], count(number))
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
data/lib/kabal/version.rb
CHANGED
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class DeutschTest < TestCase
|
4
|
+
def setup
|
5
|
+
@deu = Kabal::Deutsch.new
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_zero_number
|
9
|
+
assert_equal "null", @deu.convert(0)
|
10
|
+
assert_equal "null", @deu.convert(-0)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_single_number
|
14
|
+
assert_equal "eins", @deu.convert(1)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_two_words_with_eins
|
18
|
+
assert_equal "einundzwanzig", @deu.convert(21)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_two_words
|
22
|
+
assert_equal "zweiunddreißig", @deu.convert(32)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_three_words
|
26
|
+
assert_equal "einhunderteinundzwanzig", @deu.convert(121)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_three_words_with_and
|
30
|
+
assert_equal "einhundertzwei", @deu.convert(102)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_thousands
|
34
|
+
assert_equal "elftausendeinhunderteinundzwanzig", @deu.convert(11121)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_thousands_with_and
|
38
|
+
assert_equal "elftausendeinundzwanzig", @deu.convert(11021)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_hundred_thousands_with_and
|
42
|
+
assert_equal "einhundertelftausendeinundzwanzig", @deu.convert(111021)
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_hundred_millions_with_and
|
46
|
+
assert_equal "einhundertelf Millionen einhundertfünfzigtausendeinundzwanzig", @deu.convert(111150021)
|
47
|
+
end
|
48
|
+
def test_hundred_random_numbers
|
49
|
+
r = Random.new
|
50
|
+
(1..23).each do |power|
|
51
|
+
number = r.rand(10 ** power)
|
52
|
+
assert @deu.convert(number), number
|
53
|
+
end
|
54
|
+
end
|
55
|
+
def test_minus_one
|
56
|
+
assert_equal "minus eins", @deu.convert(-1)
|
57
|
+
end
|
58
|
+
def test_minus_one_million_and_one_and_one_and_one
|
59
|
+
assert_equal "minus einhundertelf Millionen einhundertfünfzigtausendeinundzwanzig", @deu.convert(-111150021)
|
60
|
+
end
|
61
|
+
def test_minus_one_hundred_fifty
|
62
|
+
assert_equal "minus einhundertfünfzig", @deu.convert(-150)
|
63
|
+
end
|
64
|
+
end
|
@@ -5,6 +5,11 @@ class RussianTest < TestCase
|
|
5
5
|
@rus = Kabal::Russian.new
|
6
6
|
end
|
7
7
|
|
8
|
+
def test_zero_number
|
9
|
+
assert_equal "ноль", @rus.convert(0)
|
10
|
+
assert_equal "ноль", @rus.convert(-0)
|
11
|
+
end
|
12
|
+
|
8
13
|
def test_to_text_with_single_number
|
9
14
|
assert_equal "один", @rus.convert(1)
|
10
15
|
assert_equal "минус один", @rus.convert(-1)
|
data/test/lib/kabal_test.rb
CHANGED
@@ -21,7 +21,7 @@ class KabalTest < TestCase
|
|
21
21
|
end
|
22
22
|
|
23
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,
|
24
|
+
assert_equal NoLanguageSupportError.message, Kabal.to_text_in_language_by_index(125125125125, 3)
|
25
25
|
end
|
26
26
|
|
27
27
|
def test_to_text_in_language_with_unsupported_language
|
data/yaml/languages.yml
CHANGED
@@ -0,0 +1,42 @@
|
|
1
|
+
de:
|
2
|
+
and: "und"
|
3
|
+
minus: "minus"
|
4
|
+
single:
|
5
|
+
0: "null"
|
6
|
+
1: eins
|
7
|
+
2: zwei
|
8
|
+
3: drei
|
9
|
+
4: vier
|
10
|
+
5: fünf
|
11
|
+
6: sechs
|
12
|
+
7: sieben
|
13
|
+
8: acht
|
14
|
+
9: neun
|
15
|
+
10: zehn
|
16
|
+
11: elf
|
17
|
+
12: zwölf
|
18
|
+
13: dreizehn
|
19
|
+
14: vierzehn
|
20
|
+
15: fünfzehn
|
21
|
+
16: sechzehn
|
22
|
+
17: siebzehn
|
23
|
+
18: achtzehn
|
24
|
+
19: neunzehn
|
25
|
+
two_words:
|
26
|
+
2: zwanzig
|
27
|
+
3: dreißig
|
28
|
+
4: vierzig
|
29
|
+
5: fünfzig
|
30
|
+
6: sechzig
|
31
|
+
7: siebzig
|
32
|
+
8: achtzig
|
33
|
+
9: neunzig
|
34
|
+
ten_powers:
|
35
|
+
2: hundert
|
36
|
+
3: tausend
|
37
|
+
6: Million
|
38
|
+
9: Milliarde
|
39
|
+
12: Billion
|
40
|
+
15: Billiarde
|
41
|
+
18: Trillion
|
42
|
+
21: Trilliarde
|
data/yaml/support.yml
CHANGED
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.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pavel Kalashnikov
|
@@ -62,6 +62,9 @@ files:
|
|
62
62
|
- lib/kabal/errors/no_language_support_error.rb
|
63
63
|
- lib/kabal/errors/no_support_for_fractional_numbers_on_current_language_error.rb
|
64
64
|
- lib/kabal/errors/number_out_range_error.rb
|
65
|
+
- lib/kabal/languages/deutsch.rb
|
66
|
+
- lib/kabal/languages/deutsch/declinations.rb
|
67
|
+
- lib/kabal/languages/deutsch/natural_numbers.rb
|
65
68
|
- lib/kabal/languages/english.rb
|
66
69
|
- lib/kabal/languages/english/fractional_numbers.rb
|
67
70
|
- lib/kabal/languages/english/natural_numbers.rb
|
@@ -73,12 +76,14 @@ files:
|
|
73
76
|
- lib/kabal/supported_languages.rb
|
74
77
|
- lib/kabal/version.rb
|
75
78
|
- test/lib/bigtest.rb
|
79
|
+
- test/lib/kabal/languages/deutsch_test.rb
|
76
80
|
- test/lib/kabal/languages/english_test.rb
|
77
81
|
- test/lib/kabal/languages/russian_test.rb
|
78
82
|
- test/lib/kabal_test.rb
|
79
83
|
- test/test_helper.rb
|
80
84
|
- yaml/errors.yml
|
81
85
|
- yaml/languages.yml
|
86
|
+
- yaml/languages/de.yml
|
82
87
|
- yaml/languages/en.yml
|
83
88
|
- yaml/languages/ru.yml
|
84
89
|
- yaml/support.yml
|
@@ -110,6 +115,7 @@ specification_version: 4
|
|
110
115
|
summary: Number To Text Helper
|
111
116
|
test_files:
|
112
117
|
- test/lib/bigtest.rb
|
118
|
+
- test/lib/kabal/languages/deutsch_test.rb
|
113
119
|
- test/lib/kabal/languages/english_test.rb
|
114
120
|
- test/lib/kabal/languages/russian_test.rb
|
115
121
|
- test/lib/kabal_test.rb
|