number_in_words 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,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: []