kabal 0.2.20 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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