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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/LICENSE +21 -0
- data/README.md +48 -0
- data/Rakefile +6 -0
- data/itoen.gemspec +26 -0
- data/lib/itoen.rb +4 -0
- data/lib/itoen/converter.rb +70 -0
- data/lib/itoen/errors.rb +3 -0
- data/lib/itoen/extension/numeric.rb +7 -0
- data/lib/itoen/version.rb +3 -0
- data/spec/itoen_spec.rb +50 -0
- data/spec/spec_helper.rb +2 -0
- metadata +131 -0
checksums.yaml
ADDED
@@ -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
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
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.
|
data/README.md
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
# Itoen
|
2
|
+
|
3
|
+
[](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
|
data/Rakefile
ADDED
data/itoen.gemspec
ADDED
@@ -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
|
data/lib/itoen.rb
ADDED
@@ -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
|
data/lib/itoen/errors.rb
ADDED
data/spec/itoen_spec.rb
ADDED
@@ -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
|
data/spec/spec_helper.rb
ADDED
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
|