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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f7f4289de09f87648cfdaff32a01d29d8ae32b3d
4
- data.tar.gz: b10607d4b7ad4c8866832c21160046322c896872
3
+ metadata.gz: 85506838e21df1a42c06b0049d64c70b6be30a89
4
+ data.tar.gz: ba60e4d6e2b0edc8c226ed98c7d72bc1869d328b
5
5
  SHA512:
6
- metadata.gz: 3722e9dd04ff609a8cbf2b1ab4db82e8c2cfa77e023ebcd7aa7da056d6f45c8517bc2a9e2baabacb523ab7abbc0fc063fea7aca9be10693a933f488dae0d66fc
7
- data.tar.gz: 1f561eb16f891a210642f8677009d7931a7592a7352b1f4793523cd0e9efb16f22ec4601fdcfcc652e91ab0edd265abb842831a94c5aaa2c67338c66851bb68a
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
- for now it can only in Indonesian, but I will update it soon and add English
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
- def self.get_number_sayer_ratus_triliunan(number)
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
- if @check.nil?
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
@@ -1,3 +1,3 @@
1
1
  module SayNumber
2
- VERSION = "0.1.3"
2
+ VERSION = "0.2.0"
3
3
  end
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
- else
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.1.3
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
  - - ">="