class NumberWords::NumbersToWords

Constants

DEFAULTS

Attributes

hundred[R]
large_nums[R]
num[R]
options[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/modules/number_words.rb, line 34
def initialize(options = {})
  @options = DEFAULTS.merge(options)
  set_style_opts
end

Public Instance Methods

basic_word_group(group) click to toggle source
# File lib/modules/number_words.rb, line 85
def basic_word_group(group)
  case group.size
    when 0; ''
    when 1; WORDS[group[0]]
    when 2; tenner(group[0], group[1])
    when 3; hundreder(group)
  end
end
formatted_words(collector) click to toggle source
# File lib/modules/number_words.rb, line 57
def formatted_words(collector)
  words = collector.reverse.join(options[:space]).gsub(/,$/,'')
  return words unless options[:case] == 'upper'
  words.split(/(\W)/).map(&:capitalize).join.gsub(/ and/i, ' and')
end
hundreder(group) click to toggle source
# File lib/modules/number_words.rb, line 94
def hundreder(group)
  tens = tenner(group[1], group[2])
  hundred_joiner = tens.empty? ? 'hundred' : hundred
  [WORDS[group[0]],
   hundred_joiner,
   tens
  ].reject { |n| n.empty? }.join(options[:space])
end
joined_tenner(first, second) click to toggle source
# File lib/modules/number_words.rb, line 110
def joined_tenner(first, second)
  joiner = options[:styled] ? '-' : options[:space]
  WORDS[first + '0'] + joiner + WORDS[second]
end
large_nums_with_commas() click to toggle source
# File lib/modules/number_words.rb, line 44
def large_nums_with_commas
  large_nums = LARGE_NUMS.dup
  large_nums.each { |k,v| large_nums[k] = "#{v}," }
  large_nums
end
rearrange_group(group) click to toggle source
# File lib/modules/number_words.rb, line 74
def rearrange_group(group)
  group.reverse!
  group.shift while group.first == '0'
end
set_style_opts() click to toggle source
# File lib/modules/number_words.rb, line 39
def set_style_opts
  @hundred = options[:styled] ? 'hundred and' : 'hundred'
  @large_nums = options[:styled] ? large_nums_with_commas : LARGE_NUMS
end
tenner(first, second) click to toggle source
# File lib/modules/number_words.rb, line 103
def tenner(first, second)
  return '' if first == '0' and second == '0'
  return WORDS[second] if first == '0' and second != '0'
  return WORDS[first + second] if first == '1' or second == '0'
  joined_tenner(first, second)
end
to_words(num) click to toggle source
# File lib/modules/number_words.rb, line 50
def to_words(num)
  arr = num.to_s.each_char.to_a
  groups = arr.reverse.each_slice(3).to_a
  collector = words_for_groups(groups)
  formatted_words(collector)
end
word_group(group, i) click to toggle source
# File lib/modules/number_words.rb, line 79
def word_group(group, i)
  words = basic_word_group(group)
  words += options[:space] + large_nums[i] if large_nums[i]
  words
end
words_for_groups(groups) click to toggle source
# File lib/modules/number_words.rb, line 63
def words_for_groups(groups)
  collector = []
  groups.each_with_index do |group, i|
    next if group.all? { |e| e == '0' }
    rearrange_group(group)
    words = word_group(group, i)
    collector << words
  end
  collector
end