itoen 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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