number_in_words 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,9 @@
1
+ require 'number_in_words/numeric_name'
2
+
3
+ class Numeric
4
+
5
+ def in_words system='short_scale'
6
+ NumberInWords::NumericName.new(self, system).in_words
7
+ end
8
+
9
+ end
@@ -0,0 +1,93 @@
1
+ indian:
2
+ 0:
3
+ name: 'zero'
4
+ unqualified: true
5
+ 1:
6
+ name: 'one'
7
+ unqualified: true
8
+ 2:
9
+ name: 'two'
10
+ unqualified: true
11
+ 3:
12
+ name: 'three'
13
+ unqualified: true
14
+ 4:
15
+ name: 'four'
16
+ unqualified: true
17
+ 5:
18
+ name: 'five'
19
+ unqualified: true
20
+ 6:
21
+ name: 'six'
22
+ unqualified: true
23
+ 7:
24
+ name: 'seven'
25
+ unqualified: true
26
+ 8:
27
+ name: 'eight'
28
+ unqualified: true
29
+ 9:
30
+ name: 'nine'
31
+ unqualified: true
32
+ 10:
33
+ name: 'ten'
34
+ unqualified: true
35
+ 11:
36
+ name: 'eleven'
37
+ unqualified: true
38
+ 12:
39
+ name: 'twelve'
40
+ unqualified: true
41
+ 13:
42
+ name: 'thirteen'
43
+ unqualified: true
44
+ 14:
45
+ name: 'fourteen'
46
+ unqualified: true
47
+ 15:
48
+ name: 'fifteen'
49
+ unqualified: true
50
+ 16:
51
+ name: 'sixteen'
52
+ unqualified: true
53
+ 17:
54
+ name: 'seventeen'
55
+ unqualified: true
56
+ 18:
57
+ name: 'eighteen'
58
+ unqualified: true
59
+ 19:
60
+ name: 'nineteen'
61
+ unqualified: true
62
+ 20:
63
+ name: 'twenty'
64
+ unqualified: true
65
+ 30:
66
+ name: 'thirty'
67
+ unqualified: true
68
+ 40:
69
+ name: 'forty'
70
+ unqualified: true
71
+ 50:
72
+ name: 'fifty'
73
+ unqualified: true
74
+ 60:
75
+ name: 'sixty'
76
+ unqualified: true
77
+ 70:
78
+ name: 'seventy'
79
+ unqualified: true
80
+ 80:
81
+ name: 'eighty'
82
+ unqualified: true
83
+ 90:
84
+ name: 'ninety'
85
+ unqualified: true
86
+ 100:
87
+ name: 'hundred'
88
+ 1000:
89
+ name: 'thousand'
90
+ 100000:
91
+ name: 'lakh'
92
+ 10000000:
93
+ name: 'crore'
@@ -0,0 +1,34 @@
1
+ module NumberInWords
2
+
3
+ class NumericName
4
+
5
+ def initialize n, system
6
+ @n = n.to_i # wut?
7
+ @scale = NumberInWords::config['scales'][system]
8
+ end
9
+
10
+ def in_words
11
+ get_words(@n).join ' '
12
+ end
13
+
14
+ private
15
+ def get_words n
16
+ words = []
17
+ words << @scale[0]['name'] if n == 0
18
+
19
+ named_numbers = @scale.keys.sort.reverse
20
+ named_numbers.delete 0
21
+
22
+ while n > 0
23
+ named_numbers.each do |named|
24
+ if n / named > 0
25
+ words << get_words(n / named) unless @scale[named]['unqualified']
26
+ words << @scale[named]['name']
27
+ n = n % named
28
+ end
29
+ end
30
+ end
31
+ words
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,93 @@
1
+ short_scale:
2
+ 0:
3
+ name: 'zero'
4
+ unqualified: true
5
+ 1:
6
+ name: 'one'
7
+ unqualified: true
8
+ 2:
9
+ name: 'two'
10
+ unqualified: true
11
+ 3:
12
+ name: 'three'
13
+ unqualified: true
14
+ 4:
15
+ name: 'four'
16
+ unqualified: true
17
+ 5:
18
+ name: 'five'
19
+ unqualified: true
20
+ 6:
21
+ name: 'six'
22
+ unqualified: true
23
+ 7:
24
+ name: 'seven'
25
+ unqualified: true
26
+ 8:
27
+ name: 'eight'
28
+ unqualified: true
29
+ 9:
30
+ name: 'nine'
31
+ unqualified: true
32
+ 10:
33
+ name: 'ten'
34
+ unqualified: true
35
+ 11:
36
+ name: 'eleven'
37
+ unqualified: true
38
+ 12:
39
+ name: 'twelve'
40
+ unqualified: true
41
+ 13:
42
+ name: 'thirteen'
43
+ unqualified: true
44
+ 14:
45
+ name: 'fourteen'
46
+ unqualified: true
47
+ 15:
48
+ name: 'fifteen'
49
+ unqualified: true
50
+ 16:
51
+ name: 'sixteen'
52
+ unqualified: true
53
+ 17:
54
+ name: 'seventeen'
55
+ unqualified: true
56
+ 18:
57
+ name: 'eighteen'
58
+ unqualified: true
59
+ 19:
60
+ name: 'nineteen'
61
+ unqualified: true
62
+ 20:
63
+ name: 'twenty'
64
+ unqualified: true
65
+ 30:
66
+ name: 'thirty'
67
+ unqualified: true
68
+ 40:
69
+ name: 'forty'
70
+ unqualified: true
71
+ 50:
72
+ name: 'fifty'
73
+ unqualified: true
74
+ 60:
75
+ name: 'sixty'
76
+ unqualified: true
77
+ 70:
78
+ name: 'seventy'
79
+ unqualified: true
80
+ 80:
81
+ name: 'eighty'
82
+ unqualified: true
83
+ 90:
84
+ name: 'ninety'
85
+ unqualified: true
86
+ 100:
87
+ name: 'hundred'
88
+ 1000:
89
+ name: 'thousand'
90
+ 1000000:
91
+ name: 'million'
92
+ 1000000000:
93
+ name: 'billion'
@@ -0,0 +1,40 @@
1
+ require 'yaml'
2
+ require 'logger'
3
+ require 'number_in_words/core_ext/numeric'
4
+
5
+ module NumberInWords
6
+
7
+ SHORT_SCALE = 'short_scale'
8
+ INDIAN = 'indian'
9
+
10
+ @logger = Logger.new STDOUT
11
+
12
+ @config = {
13
+ 'scales' => {
14
+ }
15
+ }
16
+
17
+ def self.log
18
+ @logger
19
+ end
20
+
21
+ def self.config
22
+ @config
23
+ end
24
+
25
+ def self.load_scale opts = {}
26
+ name = opts.keys.first
27
+ @config['scales'][name] = opts[name]
28
+ end
29
+
30
+ def self.load_scale_from_file file
31
+ begin
32
+ load_scale YAML.load_file(file)
33
+ rescue Errno::ENOENT
34
+ NumberInWords.log.error { "Error reading yaml file #{file}" }
35
+ end
36
+ end
37
+
38
+ self.load_scale_from_file "#{File.dirname(__FILE__)}/number_in_words/short_scale.yml"
39
+ self.load_scale_from_file "#{File.dirname(__FILE__)}/number_in_words/indian.yml"
40
+ end
metadata ADDED
@@ -0,0 +1,49 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: number_in_words
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Manohar Akula
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-12-25 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Converts numbers to their word form.
15
+ email: manohar.akula@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/number_in_words.rb
21
+ - lib/number_in_words/core_ext/numeric.rb
22
+ - lib/number_in_words/indian.yml
23
+ - lib/number_in_words/numeric_name.rb
24
+ - lib/number_in_words/short_scale.yml
25
+ homepage: http://github.com/akula1001/number_in_words
26
+ licenses: []
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ none: false
33
+ requirements:
34
+ - - ! '>='
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ! '>='
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ requirements: []
44
+ rubyforge_project:
45
+ rubygems_version: 1.8.10
46
+ signing_key:
47
+ specification_version: 3
48
+ summary: Word form for numbers
49
+ test_files: []