Class: Kabal::Language

Inherits:
Object
  • Object
show all
Includes:
GlobalRules::FractionalNumbers, GlobalRules::NaturalNumbers, GlobalRules::NumberProperities
Defined in:
lib/kabal/languages/language.rb

Direct Known Subclasses

Deutsch, English, Roman, Russian

Instance Method Summary collapse

Methods included from GlobalRules::NumberProperities

#fractional?, #natural?, #need_minus?, #number_is_google?, #number_is_thousands?

Methods included from GlobalRules::FractionalNumbers

#fractional_part_name, #fractional_part_order, #number_name_with_zeros, #there_zeros_before_fractional_part?, #zeros_number

Methods included from GlobalRules::NaturalNumbers

#create_number_name, #natural_number_name

Constructor Details

#initializeLanguage

Returns a new instance of Language.



11
12
13
14
15
# File 'lib/kabal/languages/language.rb', line 11

def initialize
  @names = Kabal::Config::YamlLoader.yaml_object "languages/#{lang}"
  support_file = Kabal::Config::YamlLoader.yaml_object('support')
  @supports = support_file[:support][lang]
end

Instance Method Details

#convert(number) ⇒ Object



17
18
19
20
21
22
23
# File 'lib/kabal/languages/language.rb', line 17

def convert(number)
  if no_supports? number
    error number
  else
    convert_number number
  end
end

#convert_number(number) ⇒ Object



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

def convert_number(number)
  @number_name = nil
  if need_minus? number
    join_with_spaces minus, number_words(-number)
  else
    number_words number
  end
end

#count(number) ⇒ Object



88
89
90
# File 'lib/kabal/languages/language.rb', line 88

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

#dotObject



80
81
82
# File 'lib/kabal/languages/language.rb', line 80

def dot
  names[:dot]
end

#error(number) ⇒ Object



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

def error(number)
  if number_is_out_of_the_range? number
    Kabal::Errors::NumberOutRangeError.message
  elsif (!supports_fractional?) && (number % 1 != 0)
    Kabal::Errors::NoSupportForFractionalNumberOnCurrentLanguages.message
  end
end

#fractional_but_no_support_fractional?(number) ⇒ Boolean

Returns:

  • (Boolean)


100
101
102
# File 'lib/kabal/languages/language.rb', line 100

def fractional_but_no_support_fractional?(number)
  fractional?(number) && !supports_fractional?
end

#join_with_spaces(*words) ⇒ Object



112
113
114
# File 'lib/kabal/languages/language.rb', line 112

def join_with_spaces(*words)
  words.to_a.join space
end

#langObject



47
48
49
50
# File 'lib/kabal/languages/language.rb', line 47

def lang
  languages = Kabal::Config::YamlLoader.yaml_object 'languages'
  @lang = languages[self.to_s.split(':')[-2]]
end

#max_valueObject



64
65
66
# File 'lib/kabal/languages/language.rb', line 64

def max_value
  eval @supports[:natural][:max]
end

#min_valueObject



60
61
62
# File 'lib/kabal/languages/language.rb', line 60

def min_value
  eval @supports[:natural][:min]
end

#minusObject



72
73
74
# File 'lib/kabal/languages/language.rb', line 72

def minus
  names[:minus]
end

#namesObject



68
69
70
# File 'lib/kabal/languages/language.rb', line 68

def names
  @names[lang]
end

#no_supports?(number) ⇒ Boolean

Returns:

  • (Boolean)


104
105
106
# File 'lib/kabal/languages/language.rb', line 104

def no_supports?(number)
  fractional_but_no_support_fractional?(number) || number_is_out_of_the_range?(number)
end

#number_is_out_of_the_range?(number) ⇒ Boolean

Returns:

  • (Boolean)


96
97
98
# File 'lib/kabal/languages/language.rb', line 96

def number_is_out_of_the_range?(number)
  number >= max_value || number <= min_value
end

#number_order(number) ⇒ Object



84
85
86
# File 'lib/kabal/languages/language.rb', line 84

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

#number_words(number) ⇒ Object



34
35
36
37
# File 'lib/kabal/languages/language.rb', line 34

def number_words(number)
  return natural_number_name number.round if natural? number
  fractional_number_name number if fractional? number
end

#spaceObject



108
109
110
# File 'lib/kabal/languages/language.rb', line 108

def space
  ' '
end

#supports_fractional?Boolean

Returns:

  • (Boolean)


92
93
94
# File 'lib/kabal/languages/language.rb', line 92

def supports_fractional?
  @supports[:fractional]
end

#supports_natural?Boolean

Returns:

  • (Boolean)


52
53
54
# File 'lib/kabal/languages/language.rb', line 52

def supports_natural?
  @supports[:natural]
end

#supports_negative?Boolean

Returns:

  • (Boolean)


56
57
58
# File 'lib/kabal/languages/language.rb', line 56

def supports_negative?
  min_value < 0
end

#wholeObject



76
77
78
# File 'lib/kabal/languages/language.rb', line 76

def whole
  names[:whole]
end