Sha256: 519612416d63813b79a2a96ad6dd4bd72a62cedf50684e189c58a501d20fe96d

Contents?: true

Size: 1.18 KB

Versions: 12

Compression:

Stored size: 1.18 KB

Contents

class Integer
  WORDS = {
    0 => 'zero', 1 => 'one', 2 => 'two', 3 => 'three',   4 => 'four',
    5 => 'five', 6 => 'six', 7 => 'seven', 8 => 'eight', 9 => 'nine',
    10 => 'ten', 11 => 'eleven', 12 => 'twelve', 13 => 'thirteen', 
    14 => 'fourteen', 15 => 'fifteen', 16 => 'sixteen', 17 => 'seventeen', 
    18 => 'eighteen', 19 => 'nineteen', 20 => 'twenty', 30 => 'thirty', 
    40 => 'forty', 50 => 'fifty', 60 => 'sixty', 70 => 'seventy', 
    80 => 'eighty', 90 => 'ninety'
  }

  def words
    return WORDS[0] if zero?
    str = (place = places.to_a).map do |name, v|
      next if v.zero?
      case name
        when :units then WORDS[v]
        when :tens
          units = place.pop.last
          v == 1 ? WORDS[10 + units] 
                 : WORDS[10 * v] + (units.zero? ? '' : ' ' + units.words)
        else
          v.words + ' ' + name.to_s[0..-2]
      end
    end.compact.join(', ')
    str.include?(',') ? str.sub(/,([^,]+)$/,' and\1') : str
  end

  def places
    n = self
    {trillions: 10e11, billions: 10e8, millions: 10e5, thousands: 10e2, 
     hundreds: 10e1, tens: 10, units: 1}.map do |k,v| 
      v, n = n.divmod(v)
      [k, v]
     end.tap{|a| return Hash[a] }
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
numb-0.186.0 lib/numb/words.rb
numb-0.185.0 lib/numb/words.rb
numb-0.184.0 lib/numb/words.rb
numb-0.181.0 lib/numb/words.rb
numb-0.170.0 lib/numb/words.rb
numb-0.152.0 lib/numb/words.rb
numb-0.138.0 lib/numb/words.rb
numb-0.125.0 lib/numb/words.rb
numb-0.114.0 lib/numb/words.rb
numb-0.111.0 lib/numb/words.rb
numb-0.109.0 lib/numb/words.rb
numb-0.99.0 lib/numb/words.rb