Module: PolishNumber

Defined in:
lib/polish_number.rb

Constant Summary collapse

HUNDREDS =
['', 'sto ', 'dwieście ', 'trzysta ', 'czterysta ', 'pięćset ', 'sześćset ',
'siedemset ', 'osiemset ', 'dziewięćset ']
TENS =
['', 'dziesięć ', 'dwadzieścia ', 'trzydzieści ', 'czterdzieści ', 'pięćdziesiąt ',
'sześćdziesiąt ', 'siedemdziesiąt ', 'osiemdziesiąt ', 'dziewięćdziesiąt ']
TEENS =
['', 'jedenaście ', 'dwanaście ', 'trzynaście ', 'czternaście ', 'piętnaście ',
'szesnaście ', 'siedemnaście ', 'osiemnaście ', 'dziewiętnaście ']
UNITIES =
['', 'jeden ', 'dwa ', 'trzy ', 'cztery ', 'pięć ', 'sześć ', 'siedem ', 'osiem ',
'dziewięć ']
ZERO =
'zero'
THOUSANDS =
['', 'tysiąc ', 'tysiące ', 'tysięcy ']
AND =
'i '
DECIMALS =
['', 'dziesiąta ', 'dziesiąte ', 'dziesiątych ']

Class Method Summary collapse

Class Method Details

.translate(number) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/polish_number.rb', line 23

def self.translate(number)
  number = number.to_f

  unless (0..999999.99).include? number
    raise ArgumentError, 'number should be in 0..999999.99 range'
  end

  return ZERO.dup if number == 0.0

  formatted_number = sprintf("%09.2f", number)
  digits = formatted_number.chars.map { |char| char.to_i }

  result = ''
  result << process_0_999(digits[0..2])
  result << pluralize(digits[1..2], THOUSANDS)
  result << process_0_999(digits[3..5])
  # skip the 6th digit - it was a decimal dot
  fraction = process_0_99(digits[7..8])
  unless fraction == ''
    result << AND
    result << fraction
    result << pluralize(digits[7..8], DECIMALS)
  end
  result.strip!
  result
end