Class: EasyToDictateNumbers::NumberToDictable
- Inherits:
-
Object
- Object
- EasyToDictateNumbers::NumberToDictable
- Defined in:
- lib/easy_to_dictate_numbers/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_as_string) ⇒ Object
- .large_number_to_words(number_as_string) ⇒ Object
- .leading_zeroes_to_words(number_as_string) ⇒ Object
- .number_to_words(number_to_dictate) ⇒ Object
- .number_without_leading_zeroes(number_as_string) ⇒ Object
- .number_without_leading_zeroes_to_words(number_as_string) ⇒ Object
- .one_digit_number_to_words(number_as_string) ⇒ Object
- .repeat_zeroes(number_of_zeroes) ⇒ Object
- .single_thousands_to_words(number_as_string) ⇒ Object
- .three_digit_number_to_words(number_as_string) ⇒ Object
- .two_digit_number_to_words(number_as_string) ⇒ Object
- .validate_number(number_as_string) ⇒ Object
Class Method Details
.four_digit_number_to_words(number_as_string) ⇒ Object
90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/easy_to_dictate_numbers/easy_to_dictate_numbers.rb', line 90 def four_digit_number_to_words(number_as_string) number = number_as_string.to_i return repeat_zeroes(4) if number.zero? return single_thousands_to_words(number_as_string) if (number % 1000).zero? high_pair = number_as_string[0..1] low_pair = number_as_string[2..3] [ two_digit_number_to_words(high_pair), low_pair.to_i.zero? ? 'hundred' : two_digit_number_to_words(low_pair) ].join(' ') end |
.large_number_to_words(number_as_string) ⇒ Object
105 106 107 |
# File 'lib/easy_to_dictate_numbers/easy_to_dictate_numbers.rb', line 105 def large_number_to_words(number_as_string) number_as_string.chars.map { |digit| ONES[digit.to_i] }.each_slice(3).map { |digit| digit.join(' ') }.join(', ') end |
.leading_zeroes_to_words(number_as_string) ⇒ Object
48 49 50 51 |
# File 'lib/easy_to_dictate_numbers/easy_to_dictate_numbers.rb', line 48 def leading_zeroes_to_words(number_as_string) leading_zeroes = number_as_string.match(/^0+/).to_s leading_zeroes.empty? ? '' : repeat_zeroes(leading_zeroes.length) end |
.number_to_words(number_to_dictate) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/easy_to_dictate_numbers/easy_to_dictate_numbers.rb', line 18 def number_to_words(number_to_dictate) number_as_string = number_to_dictate.to_s validate_number(number_as_string) leading_zeroes_words = leading_zeroes_to_words(number_as_string) number_without_leading_zeroes = number_without_leading_zeroes(number_as_string) number_without_leading_zeroes_words = number_without_leading_zeroes_to_words(number_without_leading_zeroes) [leading_zeroes_words, number_without_leading_zeroes_words].reject(&:empty?).join(' ') end |
.number_without_leading_zeroes(number_as_string) ⇒ Object
53 54 55 |
# File 'lib/easy_to_dictate_numbers/easy_to_dictate_numbers.rb', line 53 def number_without_leading_zeroes(number_as_string) number_as_string.sub(/^0+/, '') end |
.number_without_leading_zeroes_to_words(number_as_string) ⇒ Object
34 35 36 37 38 39 40 41 42 |
# File 'lib/easy_to_dictate_numbers/easy_to_dictate_numbers.rb', line 34 def number_without_leading_zeroes_to_words(number_as_string) case number_as_string.length when 1 then one_digit_number_to_words(number_as_string) when 2 then two_digit_number_to_words(number_as_string) when 3 then three_digit_number_to_words(number_as_string) when 4 then four_digit_number_to_words(number_as_string) else large_number_to_words(number_as_string) end end |
.one_digit_number_to_words(number_as_string) ⇒ Object
63 64 65 66 67 68 |
# File 'lib/easy_to_dictate_numbers/easy_to_dictate_numbers.rb', line 63 def one_digit_number_to_words(number_as_string) number = number_as_string.to_i return repeat_zeroes(1) if number.zero? ONES[number] end |
.repeat_zeroes(number_of_zeroes) ⇒ Object
44 45 46 |
# File 'lib/easy_to_dictate_numbers/easy_to_dictate_numbers.rb', line 44 def repeat_zeroes(number_of_zeroes) number_of_zeroes.times.map { ONES[0] }.join(' ') end |
.single_thousands_to_words(number_as_string) ⇒ Object
57 58 59 60 61 |
# File 'lib/easy_to_dictate_numbers/easy_to_dictate_numbers.rb', line 57 def single_thousands_to_words(number_as_string) number = number_as_string.to_i / 1000 [one_digit_number_to_words(number), 'thousand'].join(' ') end |
.three_digit_number_to_words(number_as_string) ⇒ Object
80 81 82 83 84 85 86 87 88 |
# File 'lib/easy_to_dictate_numbers/easy_to_dictate_numbers.rb', line 80 def three_digit_number_to_words(number_as_string) number = number_as_string.to_i return repeat_zeroes(3) if number.zero? first_digit, remainder = number.divmod(100) words = [ONES[first_digit]] words << (remainder.zero? ? 'hundred' : two_digit_number_to_words(remainder)) words.join(' ') end |
.two_digit_number_to_words(number_as_string) ⇒ Object
70 71 72 73 74 75 76 77 78 |
# File 'lib/easy_to_dictate_numbers/easy_to_dictate_numbers.rb', line 70 def two_digit_number_to_words(number_as_string) number = number_as_string.to_i return repeat_zeroes(2) if number.zero? return TEENS[number - 10] if number < 20 div, mod = number.divmod(10) TENS[div - 2] + (mod.zero? ? '' : " #{ONES[mod]}") end |
.validate_number(number_as_string) ⇒ Object
30 31 32 |
# File 'lib/easy_to_dictate_numbers/easy_to_dictate_numbers.rb', line 30 def validate_number(number_as_string) raise NonNumberCharactersPresent if number_as_string.match?(/[^0-9]/) end |