Class: EasyToDictateNumbers::NumberToDictable
- Inherits:
-
Object
- Object
- EasyToDictateNumbers::NumberToDictable
- Defined in:
- lib/easy_to_dictate_numbers.rb
Constant Summary collapse
- ONES =
%w[zero one two three four five six seven eight nine].freeze
- TEENS =
%w[ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen].freeze
- TENS =
%w[twenty thirty forty fifty sixty seventy eighty ninety].freeze
Class Method Summary collapse
- .four_digit_number_to_words(number) ⇒ Object
- .large_number_to_words(number) ⇒ Object
- .number_to_words(number) ⇒ Object
- .three_digit_number_to_words(number) ⇒ Object
- .two_digit_number_to_words(number) ⇒ Object
- .validate_number(number) ⇒ Object
Class Method Details
.four_digit_number_to_words(number) ⇒ Object
44 45 46 47 48 49 50 |
# File 'lib/easy_to_dictate_numbers.rb', line 44 def self.four_digit_number_to_words(number) high_pair, low_pair = number.divmod(100) words = [] words << "#{two_digit_number_to_words(high_pair)} hundred" unless high_pair.zero? words << two_digit_number_to_words(low_pair) unless low_pair.zero? || high_pair.zero? words.join(' ') end |
.large_number_to_words(number) ⇒ Object
52 53 54 |
# File 'lib/easy_to_dictate_numbers.rb', line 52 def self.large_number_to_words(number) number.to_s.chars.map { |digit| ONES[digit.to_i] }.each_slice(3).map { |digit| digit.join(' ') }.join(', ') end |
.number_to_words(number) ⇒ Object
14 15 16 17 18 19 20 21 22 23 |
# File 'lib/easy_to_dictate_numbers.rb', line 14 def self.number_to_words(number) validate_number(number) case number.digits.count when 1, 2 then two_digit_number_to_words(number) when 3 then three_digit_number_to_words(number) when 4 then four_digit_number_to_words(number) else large_number_to_words(number) end end |
.three_digit_number_to_words(number) ⇒ Object
37 38 39 40 41 42 |
# File 'lib/easy_to_dictate_numbers.rb', line 37 def self.three_digit_number_to_words(number) first_digit, remainder = number.divmod(100) words = [ONES[first_digit], 'hundred'] words << two_digit_number_to_words(remainder) unless remainder.zero? words.join(' ') end |
.two_digit_number_to_words(number) ⇒ Object
29 30 31 32 33 34 35 |
# File 'lib/easy_to_dictate_numbers.rb', line 29 def self.two_digit_number_to_words(number) return ONES[number] if number < 10 return TEENS[number - 10] if number < 20 div, mod = number.divmod(10) TENS[div - 2] + (mod.zero? ? '' : " #{ONES[mod]}") end |
.validate_number(number) ⇒ Object
25 26 27 |
# File 'lib/easy_to_dictate_numbers.rb', line 25 def self.validate_number(number) raise Error, 'Please enter a non-negative number' if number.negative? end |