kabal 0.2.2 → 0.2.3

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: 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