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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 161b4c5b4dffadd7c6f4b1646bad9f812ffbbd75
4
- data.tar.gz: 827cf85130f5c2e630feaa72b2fa38d0761b0ea6
3
+ metadata.gz: 23924e082596e41018e847bfd9096c4d7e99fa0d
4
+ data.tar.gz: 284457d7491749ef5f4b7d0fbc6fdf57fe1deba7
5
5
  SHA512:
6
- metadata.gz: 77e8aacada18961448705cec34164e4d7dc705330349dc21f8e7f5ffaa00d6e0619eaffa0efd8aa284aac2b39e9bad19c0450f955e91ce158fa1b6cb5274228a
7
- data.tar.gz: fd265f580a42da518ea712130cd7bd61bad020b193a9bc361f42740b894d4de6bfb6627cf684072efeb4b9e5522f555257729c4fe3e8a7427adfd9ece09ea5cf
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
- @feminine_name = true
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 single(number)
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 number if number <= 19
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 number if number / 100 == 0
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 number_is_google?(number)
72
- count(number) == 10 and number_order(number) == 99
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
@@ -1,3 +1,3 @@
1
1
  module Kabal
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.3"
3
3
  end
@@ -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.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-10 00:00:00.000000000 Z
11
+ date: 2014-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler