itoen 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ddc7b3eaa73ea0050bc9bc3cc6c732c083ae3fcb
4
+ data.tar.gz: f514f9cf640ebb2e2c22e6a1a8d5a7a94427704e
5
+ SHA512:
6
+ metadata.gz: 12b22d29efa4d71389d2858758d7f933ebad72d03ef35af34f5a61a8ab5fa60a46dacbd7215f60d2ad857f8e9bd20261aed9c2bacf9ad05dbf7d990f22b78081
7
+ data.tar.gz: 0a498872e28a31e4a93f7fa3ad301e10c503462d3caeaf8cf78edecef2222c461349654f46ec67eaea789686f96a515558792ff7bf00d65be4dcc1efb180675c
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in itoen.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 long_long_float
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,48 @@
1
+ # Itoen
2
+
3
+ [![Build Status](https://travis-ci.org/long-long-float/itoen.svg)](https://travis-ci.org/long-long-float/itoen)
4
+
5
+ convert numeric to English string
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ gem 'itoen'
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install itoen
20
+
21
+ ## Usage
22
+
23
+ ```ruby
24
+ require 'itoen'
25
+
26
+ puts 1.to_en # one
27
+ puts 777.to_en # seven hundred seventy-seven
28
+
29
+ # Supports big number!
30
+ puts (10**30).to_en #one nonillion
31
+
32
+ # Too big number :(
33
+ puts (10**350).to_en rescue ITOEN::TooBigError
34
+
35
+ puts 3.14.to_en # three point one four
36
+
37
+ puts -10.to_en # negative ten
38
+
39
+ puts ITOEN.itoen(1) # one
40
+ ```
41
+
42
+ ## Contributing
43
+
44
+ 1. Fork it ( http://github.com/<my-github-username>/itoen/fork )
45
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
46
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
47
+ 4. Push to the branch (`git push origin my-new-feature`)
48
+ 5. Create new Pull Request
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'itoen/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "itoen"
8
+ spec.version = ITOEN::VERSION
9
+ spec.authors = ["long-long-float"]
10
+ spec.email = ["niinikazuki@yahoo.co.jp"]
11
+ spec.summary = %q{convert numeric to English string}
12
+ spec.description = %q{convert numeric to English string}
13
+ spec.homepage = "https://github.com/long-long-float/itoen"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.5"
22
+ spec.add_development_dependency "andand"
23
+ spec.add_development_dependency "rake"
24
+ spec.add_development_dependency "rspec"
25
+ spec.add_development_dependency "pry"
26
+ end
@@ -0,0 +1,4 @@
1
+ require "itoen/version"
2
+ require "itoen/errors"
3
+ require "itoen/converter"
4
+ require "itoen/extension/numeric"
@@ -0,0 +1,70 @@
1
+ module ITOEN
2
+ module_function
3
+
4
+ TABLE_0_9 = %w(zero one two three four five six seven eight nine)
5
+ TABLE_11_19 = %w(eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen)
6
+ TABLE_PER_10 = %w(_ ten twenty thirty forty fifty sixty seventy eighty ninety)
7
+ TABLE_POW_1000 = %w(_ thousand million billion trillion quadrillion quintillion sextillion
8
+ septillion octillion nonillion decillion undecillion duodecillion tredecillion quattuordecillion
9
+ quindecillion sexdecillion septendecillion octodecillion novemdecillion vigintillion unvigintillion
10
+ duovigintillion trevigintillion quattuorvigintillion quinvigintillion sexvigintillion septenvigintillion
11
+ octovigintillion novemvigintillion trigintillion untrigintillion duotrigintillion tretrigintillion quattuortrigintillion
12
+ quintrigintillion sextrigintillion septentrigintillion octotrigintillion novemtrigintillion quadragintillion
13
+ unquadragintillion duoquadragintillion trequadragintillion quattuorquadragintillion quinquadragintillion sexquadragintillion
14
+ septenquadragintillion octoquadragintillion novemquadragintillion quinquagintillion unquinquagintillion duoquinquagintillion
15
+ trequinquagintillion quattuorquinquagintillion quinquinquagintillion sexquinquagintillion septenquinquagintillion octoquinquagintillion
16
+ novemquinquagintillion sexagintillion unsexagintillion duosexagintillion tresexagintillion quattuorsexagintillion quinsexagintillion
17
+ sexsexagintillion septsexagintillion octosexagintillion novemsexagintillion septuagintillion unseptuagintillion duoseptuagintillion
18
+ treseptuagintillion quattuorseptuagintillion quinseptuagintillion sexseptuagintillion septseptuagintillion octoseptuagintillion
19
+ novemseptuagintillion octogintillion unoctogintillion duooctogintillion treoctogintillion quattuoroctogintillion quinoctogintillion
20
+ sexoctogintillion septoctogintillion octooctogintillion novemoctogintillion nonagintillion unnonagintillion duononagintillion
21
+ trenonagintillion quattuornonagintillion quinnonagintillion sexnonagintillion septnonagintillion octononagintillion novemnonagintillion centillion)
22
+
23
+ def itoen(num)
24
+ if num < 0
25
+ return "negative #{itoen(-num)}"
26
+ end
27
+
28
+ int, decimal = num.to_s.split('.').map{|_| _.each_char.map(&:to_i) }
29
+ int = int.reverse
30
+
31
+ ret = []
32
+ ret.concat(case num
33
+ when 0..9
34
+ [TABLE_0_9[num]]
35
+ when 11..19
36
+ [TABLE_11_19[num - 11]]
37
+ when ->(n){ n < 100 }
38
+ [
39
+ [
40
+ (int[1] != 0 ? TABLE_PER_10[int[1]] : ''),
41
+ (int[0] != 0 ? '-' : ''),
42
+ (int[0] != 0 ? TABLE_0_9[int[0]] : '')
43
+ ].join
44
+ ]
45
+ when ->(n){ n < 1000 }
46
+ under100 = int[0..1].reverse.join.to_i
47
+ [
48
+ (int[2] != 0 ? "#{TABLE_0_9[int[2]]} hundred" : ''),
49
+ (under100 != 0 ? itoen(under100) : '')
50
+ ]
51
+ else
52
+ int.each_slice(3).map.with_index do |nums, digit|
53
+ num = nums.reverse.join.to_i
54
+ next nil if num == 0
55
+ begin
56
+ "#{itoen(num)} #{digit != 0 ? TABLE_POW_1000.fetch(digit) : ''}"
57
+ rescue IndexError
58
+ raise TooBigError
59
+ end
60
+ end.reverse.select{|n| n}
61
+ end)
62
+
63
+ if decimal
64
+ ret << 'point'
65
+ ret.concat decimal.map{|d| itoen(d) }
66
+ end
67
+
68
+ ret.join(' ').strip
69
+ end
70
+ end
@@ -0,0 +1,3 @@
1
+ module ITOEN
2
+ class TooBigError < StandardError; end
3
+ end
@@ -0,0 +1,7 @@
1
+ require "itoen/converter"
2
+
3
+ class Numeric
4
+ def to_en
5
+ ITOEN.itoen(self)
6
+ end
7
+ end
@@ -0,0 +1,3 @@
1
+ module ITOEN
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe ITOEN do
4
+ it 'should have a version number' do
5
+ ITOEN::VERSION.should_not be_nil
6
+ end
7
+
8
+ it 'returns English numbers (0..10)' do
9
+ [*0..10].map{|num|
10
+ ITOEN.itoen(num)
11
+ }.should eq %w(zero one two three four five six seven eight nine ten)
12
+ end
13
+
14
+ it 'returns English numbers (11..20)' do
15
+ [*11..20].map{|num|
16
+ ITOEN.itoen(num)
17
+ }.should eq %w(eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty)
18
+ end
19
+
20
+ it 'returns English numbers (20, 30, 40, 50, 60, 70, 80, 90)' do
21
+ 20.step(90, 10).map{|num|
22
+ ITOEN.itoen(num)
23
+ }.should eq %w(twenty thirty forty fifty sixty seventy eighty ninety)
24
+ end
25
+
26
+ it { 21.to_en.should eq 'twenty-one' }
27
+ it { 99.to_en.should eq 'ninety-nine' }
28
+
29
+ it { 100.to_en.should eq 'one hundred' }
30
+ it { 119.to_en.should eq 'one hundred nineteen' }
31
+ it { 777.to_en.should eq 'seven hundred seventy-seven'}
32
+
33
+ it { (10**3).to_en.should eq 'one thousand' }
34
+ it { (10**4).to_en.should eq 'ten thousand' }
35
+ it { (10**6).to_en.should eq 'one million' }
36
+ it { (10**9).to_en.should eq 'one billion' }
37
+ it { (10**12).to_en.should eq 'one trillion' }
38
+ it { (10**15).to_en.should eq 'one quadrillion' }
39
+ it { 1284592671.to_en.should eq 'one billion two hundred eighty-four million five hundred ninety-two thousand six hundred seventy-one' }
40
+
41
+ it 'raises error' do
42
+ ->{ (10**306).to_en }.should raise_error ITOEN::TooBigError
43
+ end
44
+
45
+ it 'returns negative number' do
46
+ -7.to_en.should eq 'negative seven'
47
+ end
48
+
49
+ it { 3.14.to_en.should eq 'three point one four' }
50
+ end
@@ -0,0 +1,2 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'itoen'
metadata ADDED
@@ -0,0 +1,131 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: itoen
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - long-long-float
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: andand
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: convert numeric to English string
84
+ email:
85
+ - niinikazuki@yahoo.co.jp
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - .gitignore
91
+ - .rspec
92
+ - .travis.yml
93
+ - Gemfile
94
+ - LICENSE
95
+ - README.md
96
+ - Rakefile
97
+ - itoen.gemspec
98
+ - lib/itoen.rb
99
+ - lib/itoen/converter.rb
100
+ - lib/itoen/errors.rb
101
+ - lib/itoen/extension/numeric.rb
102
+ - lib/itoen/version.rb
103
+ - spec/itoen_spec.rb
104
+ - spec/spec_helper.rb
105
+ homepage: https://github.com/long-long-float/itoen
106
+ licenses:
107
+ - MIT
108
+ metadata: {}
109
+ post_install_message:
110
+ rdoc_options: []
111
+ require_paths:
112
+ - lib
113
+ required_ruby_version: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ required_rubygems_version: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - '>='
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ requirements: []
124
+ rubyforge_project:
125
+ rubygems_version: 2.0.14
126
+ signing_key:
127
+ specification_version: 4
128
+ summary: convert numeric to English string
129
+ test_files:
130
+ - spec/itoen_spec.rb
131
+ - spec/spec_helper.rb