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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ace3cb07e31a4f58cd9d996c21293268c3654e99
4
- data.tar.gz: 5abaea18a9c86cf789a0b02c13640918afa9c557
3
+ metadata.gz: 30d91a801ce23687d1dbdb99ac9b5286384ea1c8
4
+ data.tar.gz: 149674eb348ab6ffd8b04895c125fadf8d4b916c
5
5
  SHA512:
6
- metadata.gz: c01b9cdfb2d9b04a5f02fa9096226f572e364a5c69c0521239156ed165395fe768f31cc6ed6d8706f976f6af27dc8629fbd1f61e1431b509812d386ed59ce99a
7
- data.tar.gz: e9e0f3c767d68aae8277d8f8ff65b678af4b0686f1a46d374f4ec8f68b8d6baf34f105b5bfafee18118c8f98dc93558eb074d48f4fe2e6545910e93472ae06fc
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
@@ -2,5 +2,6 @@ module Kabal
2
2
  module SupportedLanguages
3
3
  require 'kabal/languages/russian'
4
4
  require 'kabal/languages/english'
5
+ require 'kabal/languages/deutsch'
5
6
  end
6
7
  end
@@ -1,3 +1,3 @@
1
1
  module Kabal
2
- VERSION = "0.2.20"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -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 EnglishTest < TestCase
5
5
  @eng = Kabal::English.new
6
6
  end
7
7
 
8
+ def test_zero_number
9
+ assert_equal "zero", @eng.convert(0)
10
+ assert_equal "zero", @eng.convert(-0)
11
+ end
12
+
8
13
  def test_single_number
9
14
  assert_equal "one", @eng.convert(1)
10
15
  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)
@@ -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, 2)
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
@@ -1,2 +1,3 @@
1
1
  Russian: "ru"
2
2
  English: "en"
3
+ Deutsch: "de"
@@ -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
@@ -11,3 +11,7 @@ support:
11
11
  max: "(10 ** 66) - 1"
12
12
  fractional:
13
13
  symbols: 16
14
+ de:
15
+ natural:
16
+ min: "-(10 ** 24) + 1"
17
+ max: "(10 ** 24) - 1"
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.20
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