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