say_number 0.1.3 → 0.2.0
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 +4 -4
- data/README.md +32 -1
- data/lib/say_number/languages/english.rb +263 -0
- data/lib/say_number/languages/indonesia.rb +5 -7
- data/lib/say_number/version.rb +1 -1
- data/lib/say_number.rb +13 -1
- data/say_number.gemspec +1 -1
- metadata +3 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 85506838e21df1a42c06b0049d64c70b6be30a89
|
|
4
|
+
data.tar.gz: ba60e4d6e2b0edc8c226ed98c7d72bc1869d328b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4211e6cd3ad7802e6bd3791c2ecd95b6253fa773fd1a12ef33b9bed65178b995d0087df92cd7ea33c11def6a1762d5233926ed4d2eda276d97417862681e6c71
|
|
7
|
+
data.tar.gz: c6a09ab45fd08094a0a776f0aca11d6b68634f4f1d7b59b40189794e78748a6b4e31db6759149caec30927360bb7431aa2066abee358929028083eeebe315cf5
|
data/README.md
CHANGED
|
@@ -8,7 +8,11 @@ SayNumber is a simple gem that say the given number
|
|
|
8
8
|
|
|
9
9
|
in example : 123400 => "seratus dua puluh tiga ribu empat ratus"
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
|
|
12
|
+
Yeay \(*v*)/ ... Now you can say_number in english too
|
|
13
|
+
|
|
14
|
+
the maximum number is 100 Trillion for now.
|
|
15
|
+
|
|
12
16
|
|
|
13
17
|
## Installation
|
|
14
18
|
|
|
@@ -36,6 +40,33 @@ it will generate
|
|
|
36
40
|
|
|
37
41
|
"seratus ribu tiga ratus dua puluh"
|
|
38
42
|
|
|
43
|
+
Yeay \(*v*)/ ... Now you can say_number in english too. just add :en in say()
|
|
44
|
+
|
|
45
|
+
SayNumber.say(100320, :en)
|
|
46
|
+
|
|
47
|
+
it will generate
|
|
48
|
+
|
|
49
|
+
"one hundred thousand three hundred twenty"
|
|
50
|
+
|
|
51
|
+
*note : I leave the 'and' because I don't really know where to put it, any suggestion or reference page would be great.
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
be careful with the number that you parse, ruby can't take a leading 0, in example if you pass
|
|
55
|
+
|
|
56
|
+
SayNumber.say(0123) # delapan puluh tiga
|
|
57
|
+
|
|
58
|
+
the result would be far from expected, because Ruby will take it as hexadecimal, not octal number.
|
|
59
|
+
To make sure you pass the right number, you can pass it as string instead of number
|
|
60
|
+
|
|
61
|
+
SayNumber.say("0123") # seratus dua puluh tiga
|
|
62
|
+
|
|
63
|
+
if you want to show the result in UPPERCASE or Capitalize, you can simple put upcase or capitalize in the end of the say() function
|
|
64
|
+
|
|
65
|
+
SayNumber.say(123).upcase # SERATUS DUA PULUH TIGA
|
|
66
|
+
|
|
67
|
+
SayNumber.say(123).split.map(&:capitalize).join(' ') # Seratus Dua Puluh Tiga
|
|
68
|
+
|
|
69
|
+
|
|
39
70
|
## Contributing
|
|
40
71
|
|
|
41
72
|
1. Fork it ( https://github.com/ferydjzz/say_number/fork )
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
class English
|
|
2
|
+
def self.initialize_sayer
|
|
3
|
+
@satuan_en = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
|
|
4
|
+
@teen = {10=>"ten", 11=>"eleven", 12=>"twelve", 13=>"thirteen", 14=>"fourteen", 15=>"fifteen", 16=>"sixteen", 17=>"seventeen", 18=>"eighteen", 19=>"nineteen"}
|
|
5
|
+
@anomalies = {20=>"twenty", 30=>"thirty", 40=>"fourty", 50=>"fifty", 60=>"sixty", 70=>"seventy", 80=>"eighty", 90=>"ninety", 100=>"hundred", 1000=>"thousand", 1000000=>"million", 1000000000=>"billion", 1000000000000=>"trillion", 1000000000000000=>"quadrillion"}
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def self.get_number_sayer_ratusan(number)
|
|
9
|
+
@sayer = []
|
|
10
|
+
@temp = number.first
|
|
11
|
+
if number.count == 1
|
|
12
|
+
return @sayer.push(@satuan_en[@temp])
|
|
13
|
+
elsif number.count == 2
|
|
14
|
+
if number[1] == 1
|
|
15
|
+
@sayer.push(@teen[10+@temp])
|
|
16
|
+
else
|
|
17
|
+
if @temp != 0
|
|
18
|
+
@sayer.push(@anomalies[number[1]*10]).push(@satuan_en[@temp])
|
|
19
|
+
else
|
|
20
|
+
@sayer.push(@anomalies[number[1]*10])
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
return @sayer
|
|
24
|
+
elsif number.count == 3
|
|
25
|
+
if number.last == 0
|
|
26
|
+
else
|
|
27
|
+
@sayer.push(@satuan_en[number.last]).push(@anomalies[100])
|
|
28
|
+
end
|
|
29
|
+
if number[1] == 1
|
|
30
|
+
@sayer.push(@teen[10+@temp])
|
|
31
|
+
elsif number[1] == 0
|
|
32
|
+
if @temp != 0
|
|
33
|
+
@sayer.push(@satuan_en[@temp])
|
|
34
|
+
end
|
|
35
|
+
else
|
|
36
|
+
if @temp != 0
|
|
37
|
+
@sayer.push(@anomalies[number[1]*10]).push(@satuan_en[@temp])
|
|
38
|
+
else
|
|
39
|
+
@sayer.push(@anomalies[number[1]*10])
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
return @sayer
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def self.get_number_sayer_ratus_ribuan(number)
|
|
47
|
+
@sayer = []
|
|
48
|
+
@temp = number.first
|
|
49
|
+
if number.count == 1
|
|
50
|
+
@sayer.push(@satuan_en[@temp]).push(@anomalies[1000])
|
|
51
|
+
return @sayer
|
|
52
|
+
elsif number.count == 2
|
|
53
|
+
if number[1] == 1
|
|
54
|
+
@sayer.push(@teen[10+@temp]).push(@anomalies[1000])
|
|
55
|
+
else
|
|
56
|
+
if @temp != 0
|
|
57
|
+
@sayer.push(@anomalies[number[1]*10]).push(@satuan_en[@temp]).push(@anomalies[1000])
|
|
58
|
+
else
|
|
59
|
+
@sayer.push(@anomalies[number[1]*10]).push(@anomalies[1000])
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
return @sayer
|
|
63
|
+
elsif number.count == 3
|
|
64
|
+
if number.last == 0
|
|
65
|
+
else
|
|
66
|
+
if @temp != 0
|
|
67
|
+
@sayer.push(@satuan_en[number.last]).push(@anomalies[100])
|
|
68
|
+
else
|
|
69
|
+
if number[1] != 0
|
|
70
|
+
@sayer.push(@satuan_en[number.last]).push(@anomalies[100])
|
|
71
|
+
else
|
|
72
|
+
@sayer.push(@satuan_en[number.last]).push(@anomalies[100]).push(@anomalies[1000])
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
if number[1] == 1
|
|
77
|
+
@sayer.push(@teen[10+@temp]).push(@anomalies[1000])
|
|
78
|
+
elsif number[1] == 0
|
|
79
|
+
if @temp != 0
|
|
80
|
+
@sayer.push(@satuan_en[@temp]).push(@anomalies[1000])
|
|
81
|
+
end
|
|
82
|
+
else
|
|
83
|
+
if @temp != 0
|
|
84
|
+
@sayer.push(@anomalies[number[1]*10]).push(@satuan_en[@temp]).push(@anomalies[1000])
|
|
85
|
+
else
|
|
86
|
+
@sayer.push(@anomalies[number[1]*10]).push(@anomalies[1000])
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
return @sayer
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def self.get_number_sayer_ratus_jutaan(number)
|
|
94
|
+
@sayer = []
|
|
95
|
+
@temp = number.first
|
|
96
|
+
if number.count == 1
|
|
97
|
+
@sayer.push(@satuan_en[@temp]).push(@anomalies[1000000])
|
|
98
|
+
return @sayer
|
|
99
|
+
elsif number.count == 2
|
|
100
|
+
if number[1] == 1
|
|
101
|
+
@sayer.push(@teen[10+@temp]).push(@anomalies[1000000])
|
|
102
|
+
else
|
|
103
|
+
if @temp != 0
|
|
104
|
+
@sayer.push(@anomalies[number[1]*10]).push(@satuan_en[@temp]).push(@anomalies[1000000])
|
|
105
|
+
else
|
|
106
|
+
@sayer.push(@anomalies[number[1]*10]).push(@anomalies[1000000])
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
return @sayer
|
|
110
|
+
elsif number.count == 3
|
|
111
|
+
if number.last == 0
|
|
112
|
+
else
|
|
113
|
+
if @temp != 0
|
|
114
|
+
@sayer.push(@satuan_en[number.last]).push(@anomalies[100])
|
|
115
|
+
else
|
|
116
|
+
if number[1] != 0
|
|
117
|
+
@sayer.push(@satuan_en[number.last]).push(@anomalies[100])
|
|
118
|
+
else
|
|
119
|
+
@sayer.push(@satuan_en[number.last]).push(@anomalies[100]).push(@anomalies[1000000])
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
if number[1] == 1
|
|
124
|
+
@sayer.push(@teen[10+@temp]).push(@anomalies[1000000])
|
|
125
|
+
elsif number[1] == 0
|
|
126
|
+
if @temp != 0
|
|
127
|
+
@sayer.push(@satuan_en[@temp]).push(@anomalies[1000000])
|
|
128
|
+
end
|
|
129
|
+
else
|
|
130
|
+
if @temp != 0
|
|
131
|
+
@sayer.push(@anomalies[number[1]*10]).push(@satuan_en[@temp]).push(@anomalies[1000000])
|
|
132
|
+
else
|
|
133
|
+
@sayer.push(@anomalies[number[1]*10]).push(@anomalies[1000000])
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
return @sayer
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def self.get_number_sayer_ratus_milyaran(number)
|
|
141
|
+
@sayer = []
|
|
142
|
+
@temp = number.first
|
|
143
|
+
if number.count == 1
|
|
144
|
+
@sayer.push(@satuan_en[@temp]).push(@anomalies[1000000000])
|
|
145
|
+
return @sayer
|
|
146
|
+
elsif number.count == 2
|
|
147
|
+
if number[1] == 1
|
|
148
|
+
@sayer.push(@teen[10+@temp]).push(@anomalies[1000000000])
|
|
149
|
+
else
|
|
150
|
+
if @temp != 0
|
|
151
|
+
@sayer.push(@anomalies[number[1]*10]).push(@satuan_en[@temp]).push(@anomalies[1000000000])
|
|
152
|
+
else
|
|
153
|
+
@sayer.push(@anomalies[number[1]*10]).push(@anomalies[1000000000])
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
return @sayer
|
|
157
|
+
elsif number.count == 3
|
|
158
|
+
if number.last == 0
|
|
159
|
+
else
|
|
160
|
+
if @temp != 0
|
|
161
|
+
@sayer.push(@satuan_en[number.last]).push(@anomalies[100])
|
|
162
|
+
else
|
|
163
|
+
if number[1] != 0
|
|
164
|
+
@sayer.push(@satuan_en[number.last]).push(@anomalies[100])
|
|
165
|
+
else
|
|
166
|
+
@sayer.push(@satuan_en[number.last]).push(@anomalies[100]).push(@anomalies[1000000000])
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
if number[1] == 1
|
|
171
|
+
@sayer.push(@teen[10+@temp]).push(@anomalies[1000000000])
|
|
172
|
+
elsif number[1] == 0
|
|
173
|
+
if @temp != 0
|
|
174
|
+
@sayer.push(@satuan_en[@temp]).push(@anomalies[1000000000])
|
|
175
|
+
end
|
|
176
|
+
else
|
|
177
|
+
if @temp != 0
|
|
178
|
+
@sayer.push(@anomalies[number[1]*10]).push(@satuan_en[@temp]).push(@anomalies[1000000000])
|
|
179
|
+
else
|
|
180
|
+
@sayer.push(@anomalies[number[1]*10]).push(@anomalies[1000000000])
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
return @sayer
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def self.get_number_sayer_ratus_triliunan(number)
|
|
188
|
+
@sayer = []
|
|
189
|
+
@temp = number.first
|
|
190
|
+
if number.count == 1
|
|
191
|
+
@sayer.push(@satuan_en[@temp]).push(@anomalies[1000000000000])
|
|
192
|
+
return @sayer
|
|
193
|
+
elsif number.count == 2
|
|
194
|
+
if number[1] == 1
|
|
195
|
+
@sayer.push(@teen[10+@temp]).push(@anomalies[1000000000000])
|
|
196
|
+
else
|
|
197
|
+
if @temp != 0
|
|
198
|
+
@sayer.push(@anomalies[number[1]*10]).push(@satuan_en[@temp]).push(@anomalies[1000000000000])
|
|
199
|
+
else
|
|
200
|
+
@sayer.push(@anomalies[number[1]*10]).push(@anomalies[1000000000000])
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
return @sayer
|
|
204
|
+
elsif number.count == 3
|
|
205
|
+
if number.last == 0
|
|
206
|
+
else
|
|
207
|
+
if @temp != 0
|
|
208
|
+
@sayer.push(@satuan_en[number.last]).push(@anomalies[100])
|
|
209
|
+
else
|
|
210
|
+
if number[1] != 0
|
|
211
|
+
@sayer.push(@satuan_en[number.last]).push(@anomalies[100])
|
|
212
|
+
else
|
|
213
|
+
@sayer.push(@satuan_en[number.last]).push(@anomalies[100]).push(@anomalies[1000000000000])
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
if number[1] == 1
|
|
218
|
+
@sayer.push(@teen[10+@temp]).push(@anomalies[1000000000000])
|
|
219
|
+
elsif number[1] == 0
|
|
220
|
+
if @temp != 0
|
|
221
|
+
@sayer.push(@satuan_en[@temp]).push(@anomalies[1000000000000])
|
|
222
|
+
end
|
|
223
|
+
else
|
|
224
|
+
if @temp != 0
|
|
225
|
+
@sayer.push(@anomalies[number[1]*10]).push(@satuan_en[@temp]).push(@anomalies[1000000000000])
|
|
226
|
+
else
|
|
227
|
+
@sayer.push(@anomalies[number[1]*10]).push(@anomalies[1000000000000])
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
return @sayer
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def self.check_nol(saying)
|
|
235
|
+
if saying == ["zero"] or saying == "zero"
|
|
236
|
+
return ["zero"]
|
|
237
|
+
end
|
|
238
|
+
@check = saying.split(@satuan_en.first)
|
|
239
|
+
if @check.count < 1
|
|
240
|
+
return @check
|
|
241
|
+
else
|
|
242
|
+
return @check.map!{ |element| element.gsub("zero", "").gsub(" ", " ") }
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
def self.get_number_sayer_per_separator(block, number)
|
|
247
|
+
@array_number = number.split("").map { |i| i.to_i }
|
|
248
|
+
if block == 0
|
|
249
|
+
get_number_sayer_ratusan(@array_number)
|
|
250
|
+
elsif block == 1
|
|
251
|
+
get_number_sayer_ratus_ribuan(@array_number)
|
|
252
|
+
elsif block == 2
|
|
253
|
+
get_number_sayer_ratus_jutaan(@array_number)
|
|
254
|
+
elsif block == 3
|
|
255
|
+
get_number_sayer_ratus_milyaran(@array_number)
|
|
256
|
+
elsif block == 4
|
|
257
|
+
get_number_sayer_ratus_triliunan(@array_number)
|
|
258
|
+
else
|
|
259
|
+
raise "exceeds the calculation function"
|
|
260
|
+
end
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
end
|
|
@@ -260,7 +260,7 @@ class Indonesia
|
|
|
260
260
|
end
|
|
261
261
|
end
|
|
262
262
|
|
|
263
|
-
|
|
263
|
+
def self.get_number_sayer_ratus_triliunan(number)
|
|
264
264
|
@sayer = []
|
|
265
265
|
@temp = number.first
|
|
266
266
|
if number.count == 1
|
|
@@ -328,15 +328,14 @@ class Indonesia
|
|
|
328
328
|
end
|
|
329
329
|
|
|
330
330
|
def self.check_nol(saying)
|
|
331
|
+
if saying == ["nol"] or saying == "nol"
|
|
332
|
+
return ["nol"]
|
|
333
|
+
end
|
|
331
334
|
@check = saying.split(@satuan_id.first)
|
|
332
335
|
if @check.count < 1
|
|
333
336
|
return @check
|
|
334
337
|
else
|
|
335
|
-
|
|
336
|
-
return "nol"
|
|
337
|
-
else
|
|
338
|
-
return @check.map!{ |element| element.gsub("nol", "").gsub(" ", " ") }
|
|
339
|
-
end
|
|
338
|
+
return @check.map!{ |element| element.gsub("nol", "").gsub(" ", " ") }
|
|
340
339
|
end
|
|
341
340
|
end
|
|
342
341
|
|
|
@@ -356,5 +355,4 @@ class Indonesia
|
|
|
356
355
|
raise "exceeds the calculation function"
|
|
357
356
|
end
|
|
358
357
|
end
|
|
359
|
-
|
|
360
358
|
end
|
data/lib/say_number/version.rb
CHANGED
data/lib/say_number.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require "say_number/version"
|
|
2
2
|
require_relative "say_number/languages/indonesia"
|
|
3
|
+
require_relative "say_number/languages/english"
|
|
3
4
|
|
|
4
5
|
|
|
5
6
|
module SayNumber
|
|
@@ -32,7 +33,18 @@ module SayNumber
|
|
|
32
33
|
end
|
|
33
34
|
@saying = @saying.reverse.join(" ")
|
|
34
35
|
return Indonesia.check_nol(@saying).first.strip
|
|
35
|
-
|
|
36
|
+
elsif language == :en
|
|
37
|
+
English.initialize_sayer
|
|
38
|
+
@separated = digit_separator(number.to_i)
|
|
39
|
+
@array = @separated.split(".")
|
|
40
|
+
@length = @array.count
|
|
41
|
+
@saying = []
|
|
42
|
+
for i in 0..@length-1
|
|
43
|
+
@saying.push(English.get_number_sayer_per_separator(i, @array[i]))
|
|
44
|
+
end
|
|
45
|
+
@saying = @saying.reverse.join(" ")
|
|
46
|
+
return English.check_nol(@saying).first.strip
|
|
47
|
+
else
|
|
36
48
|
raise "Unknown Language"
|
|
37
49
|
end
|
|
38
50
|
end
|
data/say_number.gemspec
CHANGED
|
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
|
|
|
17
17
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
18
18
|
spec.bindir = "exe"
|
|
19
19
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
20
|
-
spec.require_paths = ["lib", "lib/say_number.rb", "lib/say_number/languages/indonesia.rb"]
|
|
20
|
+
spec.require_paths = ["lib", "lib/say_number.rb", "lib/say_number/languages/indonesia.rb", "lib/say_number/languages/english.rb"]
|
|
21
21
|
|
|
22
22
|
spec.add_development_dependency "bundler", "~> 1.8"
|
|
23
23
|
spec.add_development_dependency "rake", "~> 10.0"
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: say_number
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Fery Japminto
|
|
@@ -54,6 +54,7 @@ files:
|
|
|
54
54
|
- bin/console
|
|
55
55
|
- bin/setup
|
|
56
56
|
- lib/say_number.rb
|
|
57
|
+
- lib/say_number/languages/english.rb
|
|
57
58
|
- lib/say_number/languages/indonesia.rb
|
|
58
59
|
- lib/say_number/version.rb
|
|
59
60
|
- say_number.gemspec
|
|
@@ -67,6 +68,7 @@ require_paths:
|
|
|
67
68
|
- lib
|
|
68
69
|
- lib/say_number.rb
|
|
69
70
|
- lib/say_number/languages/indonesia.rb
|
|
71
|
+
- lib/say_number/languages/english.rb
|
|
70
72
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
71
73
|
requirements:
|
|
72
74
|
- - ">="
|