module NumberToKanji::SmallNumberToKanji

Constants

RANGE_END

Public Class Methods

call(number) click to toggle source
# File lib/number_to_kanji/small_number_to_kanji.rb, line 11
def call(number)
  raise(::TypeError) unless number.is_a?(::Integer)
  raise(::NumberToKanji::Exceptions::NegativeNumberError) if number.negative?

  raise(::RangeError, 'Numbers equal to or larger than 10^4 is not supported.') if number >= ::NumberToKanji::SmallNumberToKanji::RANGE_END

  return ::NumberToKanji::KANJI_MAP[0] if number.zero?

  zero_padded_number = format('%04<number>d', number: number)
  thousands, hundreds, tens, ones = zero_padded_number.to_s.chars.map { |i| Integer(i, 10) }

  "#{_thousands_to_kanji(thousands)}#{_hundreds_to_kanji(hundreds)}#{_tens_to_kanji(tens)}#{_ones_to_kanji(ones)}"
end

Private Class Methods

_hundreds_to_kanji(hundreds) click to toggle source
# File lib/number_to_kanji/small_number_to_kanji.rb, line 32
def _hundreds_to_kanji(hundreds)
  return '' if hundreds.zero?
  return '百' if hundreds == 1

  "#{::NumberToKanji::KANJI_MAP[hundreds]}百"
end
_ones_to_kanji(ones) click to toggle source
# File lib/number_to_kanji/small_number_to_kanji.rb, line 46
def _ones_to_kanji(ones)
  return '' if ones.zero?

  ::NumberToKanji::KANJI_MAP[ones]
end
_tens_to_kanji(tens) click to toggle source
# File lib/number_to_kanji/small_number_to_kanji.rb, line 39
def _tens_to_kanji(tens)
  return '' if tens.zero?
  return '十' if tens == 1

  "#{::NumberToKanji::KANJI_MAP[tens]}十"
end
_thousands_to_kanji(thousands) click to toggle source
# File lib/number_to_kanji/small_number_to_kanji.rb, line 25
def _thousands_to_kanji(thousands)
  return '' if thousands.zero?
  return '千' if thousands == 1

  "#{::NumberToKanji::KANJI_MAP[thousands]}千"
end

Private Instance Methods

_hundreds_to_kanji(hundreds) click to toggle source
# File lib/number_to_kanji/small_number_to_kanji.rb, line 32
def _hundreds_to_kanji(hundreds)
  return '' if hundreds.zero?
  return '百' if hundreds == 1

  "#{::NumberToKanji::KANJI_MAP[hundreds]}百"
end
_ones_to_kanji(ones) click to toggle source
# File lib/number_to_kanji/small_number_to_kanji.rb, line 46
def _ones_to_kanji(ones)
  return '' if ones.zero?

  ::NumberToKanji::KANJI_MAP[ones]
end
_tens_to_kanji(tens) click to toggle source
# File lib/number_to_kanji/small_number_to_kanji.rb, line 39
def _tens_to_kanji(tens)
  return '' if tens.zero?
  return '十' if tens == 1

  "#{::NumberToKanji::KANJI_MAP[tens]}十"
end
_thousands_to_kanji(thousands) click to toggle source
# File lib/number_to_kanji/small_number_to_kanji.rb, line 25
def _thousands_to_kanji(thousands)
  return '' if thousands.zero?
  return '千' if thousands == 1

  "#{::NumberToKanji::KANJI_MAP[thousands]}千"
end
call(number) click to toggle source
# File lib/number_to_kanji/small_number_to_kanji.rb, line 11
def call(number)
  raise(::TypeError) unless number.is_a?(::Integer)
  raise(::NumberToKanji::Exceptions::NegativeNumberError) if number.negative?

  raise(::RangeError, 'Numbers equal to or larger than 10^4 is not supported.') if number >= ::NumberToKanji::SmallNumberToKanji::RANGE_END

  return ::NumberToKanji::KANJI_MAP[0] if number.zero?

  zero_padded_number = format('%04<number>d', number: number)
  thousands, hundreds, tens, ones = zero_padded_number.to_s.chars.map { |i| Integer(i, 10) }

  "#{_thousands_to_kanji(thousands)}#{_hundreds_to_kanji(hundreds)}#{_tens_to_kanji(tens)}#{_ones_to_kanji(ones)}"
end