class DigitsParser
Attributes
adjective_sayings[RW]
anomalies[RW]
belasan_parser[RW]
satuans[RW]
Public Class Methods
new()
click to toggle source
# File lib/supporting_classes/digits_parser.rb, line 7 def initialize @satuans = ["nol", "satu", "dua", "tiga", "empat", "lima", "enam", "tujuh", "delapan", "sembilan"] @adjective_sayings = {puluh: "puluh", belas: "belas", ratusan: "ratus", ribuan: "ribu", jutaan: "juta", milyaran: "milyar"} @anomalies = {a10: "sepuluh", a11: "sebelas", a100:"seratus", a1rb: "seribu", a1jt: "sejuta", a1M:"semilyar"} end
Public Instance Methods
get_digit_adjectives(number, adjectives)
click to toggle source
# File lib/supporting_classes/digits_parser.rb, line 73 def get_digit_adjectives(number, adjectives) adjective_index = 0 digit_adjectives = [] number_s = number.to_s backward_index = number_s.length - 1 while backward_index >= 0 digit_s = number_s[backward_index] digit_adjectives.push [adjectives[adjective_index], digit_s] adjective_index += 1 backward_index -= 1 end digit_adjectives end
handle_digit(i, current_digit, digit_adjectives, results)
click to toggle source
# File lib/supporting_classes/digits_parser.rb, line 17 def handle_digit(i, current_digit, digit_adjectives, results) front_digit = digit_adjectives[i - 1][1] if front_digit == "0" if current_digit != "0" satuan = @satuans[current_digit.to_i] results.push satuan end else parse_belasan front_digit: front_digit, current_digit: current_digit, destination: results end end
handle_hundreds(current_digit, results)
click to toggle source
# File lib/supporting_classes/digits_parser.rb, line 29 def handle_hundreds(current_digit, results) if current_digit == "1" results.push @anomalies[:a100] else if current_digit != "0" ratusan = @satuans[current_digit.to_i] results.push "#{ratusan} #{@adjective_sayings[:ratusan]}" end end end
handle_thousands(i, current_digit, current_adjective, digit_adjectives, results)
click to toggle source
# File lib/supporting_classes/digits_parser.rb, line 40 def handle_thousands(i, current_digit, current_adjective, digit_adjectives, results) has_puluhan = i > 0 if !has_puluhan if current_digit == "1" if current_adjective == :ribuan results.push "#{@anomalies[:a1rb]}" else results.push "#{@anomalies[:a1jt]}" end else ribuan = @satuans[current_digit.to_i] results.push "#{ribuan} #{@adjective_sayings[current_adjective]}" end else front_digit = digit_adjectives[i - 1][1] if front_digit == "0" if current_digit != "0" satuan = satuans[current_digit.to_i] results.push "#{satuan}" results.push @adjective_sayings[current_adjective] else ratusan_val = digit_adjectives[i - 2][1] if ratusan_val != "0" results.push @adjective_sayings[current_adjective] end end else parse_belasan front_digit: front_digit, current_digit: current_digit, destination: results results.push @adjective_sayings[current_adjective] end end end
parse(digit_adjectives, results)
click to toggle source
# File lib/supporting_classes/digits_parser.rb, line 94 def parse(digit_adjectives, results) digit_adjectives.each_with_index do |digit_adjective, i| current_adjective = digit_adjective[0] current_digit = digit_adjective[1] if current_adjective == :satuan handle_digit i, current_digit, digit_adjectives, results end if current_adjective == :ratusan or current_adjective == :ratusan_ribu or current_adjective == :ratusan_juta or current_adjective == :ratusan_milyar handle_hundreds current_digit, results end if current_adjective == :ribuan or current_adjective == :jutaan or current_adjective == :milyaran handle_thousands i, current_digit, current_adjective, digit_adjectives, results end end end
parse_belasan(param)
click to toggle source
# File lib/supporting_classes/digits_parser.rb, line 13 def parse_belasan(param) @belasan_parser.parse param end
say(number)
click to toggle source
# File lib/supporting_classes/digits_parser.rb, line 118 def say(number) adjectives = [:satuan, :puluhan, :ratusan, :ribuan, :puluhan_ribu, :ratusan_ribu, :jutaan, :puluhan_juta, :ratusan_juta, :milyaran, :puluhan_milyar, :ratusan_milyar] if number < 10 return satuans[number] else # 10, 11, 19, 20...99, 100 results = [] digit_adjectives = get_digit_adjectives number, adjectives digit_adjectives = digit_adjectives.reverse parse digit_adjectives, results return results.join " " end end