Class: Kabal::Russian

Inherits:
Language show all
Defined in:
lib/kabal/languages/russian.rb

Instance Method Summary collapse

Methods inherited from Language

#lang, #minus, #names

Instance Method Details

#convert(number) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/kabal/languages/russian.rb', line 5

def convert(number)
  #FIXME find way to get min and max from yml file
  raise NumberOutRangeError.message if number <= -(10 ** 102) or number >= 10 ** 102
  #FIXME find better way
  @number_name = nil
  need_minus?(number) ? (minus + " " + natural_number_name(-number)) : natural_number_name(number)
end

#count(number) ⇒ Object



61
62
63
# File 'lib/kabal/languages/russian.rb', line 61

def count(number)
  number / (10 ** number_order(number))
end

#count_name(number) ⇒ Object



81
82
83
84
85
# File 'lib/kabal/languages/russian.rb', line 81

def count_name(number)
  #FIXME number.to_S[-4] not good
  @feminine_name_for_thousands = (number.to_s[-4] == "1" or number.to_s[-4] == "2") and count(number) and count(number) / 10 != 1 and number_order(number) == 3
  three_words count(number)
end

#create_number_name(number) ⇒ Object



65
66
67
68
69
70
71
# File 'lib/kabal/languages/russian.rb', line 65

def create_number_name(number)
  if @number_name.nil?
    @number_name = count_name(number) + " " + Declinations.name_with_declination(names[lang]["ten_powers"][number_order(number)], count(number))
  elsif count(number) != 0
    @number_name += " " + count_name(number) + " " + Declinations.name_with_declination(names[lang]["ten_powers"][number_order(number)], count(number))
  end
end

#less_thousands(number) ⇒ Object



73
74
75
# File 'lib/kabal/languages/russian.rb', line 73

def less_thousands(number)
  @number_name += " " + three_words(number % 1000) unless number == 0
end

#natural_number_name(number) ⇒ Object



13
14
15
16
17
18
19
# File 'lib/kabal/languages/russian.rb', line 13

def natural_number_name(number)
  #FIXME switch case next lines
  return single(number) if number >= 0 and number <= 19
  return two_words(number) if number >= 20 and number <= 99
  return three_words(number) if number >= 100 and number <= 999
  ten_powers(number) if number >= 1000
end

#need_minus?(number) ⇒ Boolean

Returns:

  • (Boolean)


21
22
23
# File 'lib/kabal/languages/russian.rb', line 21

def need_minus?(number)
  number < 0
end

#number_is_google?(number) ⇒ Boolean

Returns:

  • (Boolean)


87
88
89
# File 'lib/kabal/languages/russian.rb', line 87

def number_is_google?(number)
  count(number) == 10 and number_order(number) == 99
end

#number_is_thousands?(number) ⇒ Boolean

Returns:

  • (Boolean)


77
78
79
# File 'lib/kabal/languages/russian.rb', line 77

def number_is_thousands?(number)
  number_order(number) < 3
end

#number_order(number) ⇒ Object



57
58
59
# File 'lib/kabal/languages/russian.rb', line 57

def number_order(number)
  ((number.to_s.length - 1) / 3) * 3
end

#single(number) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/kabal/languages/russian.rb', line 25

def single(number)
  if @feminine_name_for_thousands
    @feminine_name_for_thousands = false
    return names[lang]["single_feminine"][count(number) % 10]
  end
  names[lang]["single"][number]
end

#ten_powers(number) ⇒ Object



48
49
50
51
52
53
54
55
# File 'lib/kabal/languages/russian.rb', line 48

def ten_powers(number)
  #FIXME find better way
  return names[lang]["ten_powers"][100] if number_is_google? number
  less_thousands number if number_is_thousands? number
  return @number_name if number_is_thousands? number
  create_number_name number
  ten_powers(number % (10 ** number_order(number)))
end

#three_words(number) ⇒ Object



40
41
42
43
44
45
46
# File 'lib/kabal/languages/russian.rb', line 40

def three_words(number)
  return two_words number if number / 100 == 0
  number_name = names[lang]["three_words"][number / 100]
  return number_name += " " + two_words(number % 100) if (number % 100 >= 20)
  return number_name += " " + single(number % 100) if (number % 100 != 0)
  number_name
end

#two_words(number) ⇒ Object



33
34
35
36
37
38
# File 'lib/kabal/languages/russian.rb', line 33

def two_words(number)
  return single number if number <= 19
  number_name = names[lang]["two_words"][number / 10]
  number_name += " " + single(number % 10) if (number % 10 != 0)
  number_name
end