say_number 0.1.3 → 1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f7f4289de09f87648cfdaff32a01d29d8ae32b3d
4
- data.tar.gz: b10607d4b7ad4c8866832c21160046322c896872
3
+ metadata.gz: 5b3db53ec1a750d8b7b6d2ff55fd4f92547e9bd0
4
+ data.tar.gz: 846b2063ee97abc464734233172d8b8a979fc27b
5
5
  SHA512:
6
- metadata.gz: 3722e9dd04ff609a8cbf2b1ab4db82e8c2cfa77e023ebcd7aa7da056d6f45c8517bc2a9e2baabacb523ab7abbc0fc063fea7aca9be10693a933f488dae0d66fc
7
- data.tar.gz: 1f561eb16f891a210642f8677009d7931a7592a7352b1f4793523cd0e9efb16f22ec4601fdcfcc652e91ab0edd265abb842831a94c5aaa2c67338c66851bb68a
6
+ metadata.gz: e7c624e78c4af189638d49ede6d16a398c9820a8eee80e7b4a897fa9aa787a29093dc89d24f6c015cbf349b79253a590dfd0157d1f6a6e5b5d4839962044b47e
7
+ data.tar.gz: 1cc47145c3817667d298c4163364323061b1496df9b8dd91e2776cb5361069a356e480844bcbde3741099d7bb9c3f55f28488171f377a5d61b15a7ad77a89cff
data/README.md CHANGED
@@ -1,14 +1,14 @@
1
1
  # SayNumber
2
2
 
3
- Welcome to SayNumber, this is my first gem, I know there is a lot that need to be improve, so let me know if you have any suggestion.
3
+ SayNumber is a simple gem that say the given number in word
4
4
 
5
- SayNumber is a simple gem that say the given number
5
+ available in two language:
6
6
 
7
- (SayNumber adalah gem untuk menggenerate #terbilang dari angka yang diinginkan)
7
+ :id = Indonesia (default)
8
8
 
9
- in example : 123400 => "seratus dua puluh tiga ribu empat ratus"
9
+ :en = English
10
10
 
11
- for now it can only in Indonesian, but I will update it soon and add English
11
+ the maximum limit number for now is 999,999,999,999,999
12
12
 
13
13
  ## Installation
14
14
 
@@ -26,7 +26,7 @@ Or install it yourself as:
26
26
 
27
27
  ## Usage
28
28
 
29
- Simple, just call it SayNumber.say()
29
+ put the number in the SayNumber.say() function
30
30
 
31
31
  example :
32
32
 
@@ -36,6 +36,46 @@ it will generate
36
36
 
37
37
  "seratus ribu tiga ratus dua puluh"
38
38
 
39
+ in english you need to put :en in parameter say(number, :en)
40
+
41
+ SayNumber.say(100320, :en)
42
+
43
+ it will generate
44
+
45
+ "one hundred thousand three hundred twenty"
46
+
47
+ *note : I leave the 'and' because I don't really know where to put it, any suggestion or reference page would be great.
48
+
49
+ with the latest version (1.0.0), you will be able to pass float number and get the point (koma) in word
50
+
51
+ SayNumber.say(1234.123) # seribu dua ratus tiga puluh empat koma satu dua tiga
52
+
53
+ SayNumber.say(1234.123, :en) # one thousand two hundred thirty four point one two three
54
+
55
+ if you want to get the exact value behind the float point, make sure you pass it as a string because Ruby will round it up automatically.
56
+
57
+ see the spec for more example
58
+
59
+ be careful with the number that you parse, ruby can't take a leading 0, in example if you pass
60
+
61
+ SayNumber.say(0123) # delapan puluh tiga
62
+
63
+ SayNumber.say(0123) # eighty three
64
+
65
+ the result would be far from expected, because Ruby will take it as hexadecimal, not octal number.
66
+ To make sure you pass the right number, you can pass it as string instead of number
67
+
68
+ SayNumber.say("0123") # seratus dua puluh tiga
69
+
70
+ SayNumber.say("0123", :en) # one hundred twenty three
71
+
72
+ 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
73
+
74
+ SayNumber.say(123).upcase # SERATUS DUA PULUH TIGA
75
+
76
+ SayNumber.say(123).split.map(&:capitalize).join(' ') # Seratus Dua Puluh Tiga
77
+
78
+
39
79
  ## Contributing
40
80
 
41
81
  1. Fork it ( https://github.com/ferydjzz/say_number/fork )
@@ -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
@@ -23,6 +24,7 @@ module SayNumber
23
24
  def self.say(number, language = :id)
24
25
  if language == :id
25
26
  Indonesia.initialize_sayer
27
+ @koma = get_koma(number)
26
28
  @separated = digit_separator(number.to_i)
27
29
  @array = @separated.split(".")
28
30
  @length = @array.count
@@ -31,9 +33,46 @@ module SayNumber
31
33
  @saying.push(Indonesia.get_number_sayer_per_separator(i, @array[i]))
32
34
  end
33
35
  @saying = @saying.reverse.join(" ")
34
- return Indonesia.check_nol(@saying).first.strip
35
- else
36
+ if @koma.nil?
37
+ result = Indonesia.check_nol(@saying).first.strip
38
+ else
39
+ koma = Indonesia.say_koma(@koma)
40
+ result = Indonesia.check_nol(@saying).first.strip
41
+ return "#{result} #{koma}"
42
+ end
43
+ elsif language == :en
44
+ English.initialize_sayer
45
+ @koma = get_koma(number)
46
+ @separated = digit_separator(number.to_i)
47
+ @array = @separated.split(".")
48
+ @length = @array.count
49
+ @saying = []
50
+ for i in 0..@length-1
51
+ @saying.push(English.get_number_sayer_per_separator(i, @array[i]))
52
+ end
53
+ @saying = @saying.reverse.join(" ")
54
+ if @koma.nil?
55
+ result = English.check_nol(@saying).first.strip
56
+ else
57
+ koma = English.say_koma(@koma)
58
+ result = English.check_nol(@saying).first.strip
59
+ return "#{result} #{koma}"
60
+ end
61
+ else
36
62
  raise "Unknown Language"
37
63
  end
38
64
  end
65
+
66
+ private
67
+ def self.get_koma(number)
68
+ splited = number.to_s.split(".")
69
+ zero = [0]
70
+ if splited.count == 2 && splited.last != "0"
71
+ # normalize the floating point .00
72
+ koma = zero.push(splited.last).join(".").to_f
73
+ return koma.to_s.split(".").last
74
+ else
75
+ nil
76
+ end
77
+ end
39
78
  end
@@ -0,0 +1,273 @@
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=>"forty", 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.say_koma(koma)
9
+ @koma = []
10
+ @koma.push("point")
11
+ @temp = koma.to_s.split("")
12
+ @temp.each do |k|
13
+ @koma.push(@satuan_en[k.to_i])
14
+ end
15
+ return @koma.join(" ")
16
+ end
17
+
18
+ def self.get_number_sayer_ratusan(number)
19
+ @sayer = []
20
+ @temp = number.first
21
+ if number.count == 1
22
+ return @sayer.push(@satuan_en[@temp])
23
+ elsif number.count == 2
24
+ if number[1] == 1
25
+ @sayer.push(@teen[10+@temp])
26
+ else
27
+ if @temp != 0
28
+ @sayer.push(@anomalies[number[1]*10]).push(@satuan_en[@temp])
29
+ else
30
+ @sayer.push(@anomalies[number[1]*10])
31
+ end
32
+ end
33
+ return @sayer
34
+ elsif number.count == 3
35
+ if number.last == 0
36
+ else
37
+ @sayer.push(@satuan_en[number.last]).push(@anomalies[100])
38
+ end
39
+ if number[1] == 1
40
+ @sayer.push(@teen[10+@temp])
41
+ elsif number[1] == 0
42
+ if @temp != 0
43
+ @sayer.push(@satuan_en[@temp])
44
+ end
45
+ else
46
+ if @temp != 0
47
+ @sayer.push(@anomalies[number[1]*10]).push(@satuan_en[@temp])
48
+ else
49
+ @sayer.push(@anomalies[number[1]*10])
50
+ end
51
+ end
52
+ return @sayer
53
+ end
54
+ end
55
+
56
+ def self.get_number_sayer_ratus_ribuan(number)
57
+ @sayer = []
58
+ @temp = number.first
59
+ if number.count == 1
60
+ @sayer.push(@satuan_en[@temp]).push(@anomalies[1000])
61
+ return @sayer
62
+ elsif number.count == 2
63
+ if number[1] == 1
64
+ @sayer.push(@teen[10+@temp]).push(@anomalies[1000])
65
+ else
66
+ if @temp != 0
67
+ @sayer.push(@anomalies[number[1]*10]).push(@satuan_en[@temp]).push(@anomalies[1000])
68
+ else
69
+ @sayer.push(@anomalies[number[1]*10]).push(@anomalies[1000])
70
+ end
71
+ end
72
+ return @sayer
73
+ elsif number.count == 3
74
+ if number.last == 0
75
+ else
76
+ if @temp != 0
77
+ @sayer.push(@satuan_en[number.last]).push(@anomalies[100])
78
+ else
79
+ if number[1] != 0
80
+ @sayer.push(@satuan_en[number.last]).push(@anomalies[100])
81
+ else
82
+ @sayer.push(@satuan_en[number.last]).push(@anomalies[100]).push(@anomalies[1000])
83
+ end
84
+ end
85
+ end
86
+ if number[1] == 1
87
+ @sayer.push(@teen[10+@temp]).push(@anomalies[1000])
88
+ elsif number[1] == 0
89
+ if @temp != 0
90
+ @sayer.push(@satuan_en[@temp]).push(@anomalies[1000])
91
+ end
92
+ else
93
+ if @temp != 0
94
+ @sayer.push(@anomalies[number[1]*10]).push(@satuan_en[@temp]).push(@anomalies[1000])
95
+ else
96
+ @sayer.push(@anomalies[number[1]*10]).push(@anomalies[1000])
97
+ end
98
+ end
99
+ return @sayer
100
+ end
101
+ end
102
+
103
+ def self.get_number_sayer_ratus_jutaan(number)
104
+ @sayer = []
105
+ @temp = number.first
106
+ if number.count == 1
107
+ @sayer.push(@satuan_en[@temp]).push(@anomalies[1000000])
108
+ return @sayer
109
+ elsif number.count == 2
110
+ if number[1] == 1
111
+ @sayer.push(@teen[10+@temp]).push(@anomalies[1000000])
112
+ else
113
+ if @temp != 0
114
+ @sayer.push(@anomalies[number[1]*10]).push(@satuan_en[@temp]).push(@anomalies[1000000])
115
+ else
116
+ @sayer.push(@anomalies[number[1]*10]).push(@anomalies[1000000])
117
+ end
118
+ end
119
+ return @sayer
120
+ elsif number.count == 3
121
+ if number.last == 0
122
+ else
123
+ if @temp != 0
124
+ @sayer.push(@satuan_en[number.last]).push(@anomalies[100])
125
+ else
126
+ if number[1] != 0
127
+ @sayer.push(@satuan_en[number.last]).push(@anomalies[100])
128
+ else
129
+ @sayer.push(@satuan_en[number.last]).push(@anomalies[100]).push(@anomalies[1000000])
130
+ end
131
+ end
132
+ end
133
+ if number[1] == 1
134
+ @sayer.push(@teen[10+@temp]).push(@anomalies[1000000])
135
+ elsif number[1] == 0
136
+ if @temp != 0
137
+ @sayer.push(@satuan_en[@temp]).push(@anomalies[1000000])
138
+ end
139
+ else
140
+ if @temp != 0
141
+ @sayer.push(@anomalies[number[1]*10]).push(@satuan_en[@temp]).push(@anomalies[1000000])
142
+ else
143
+ @sayer.push(@anomalies[number[1]*10]).push(@anomalies[1000000])
144
+ end
145
+ end
146
+ return @sayer
147
+ end
148
+ end
149
+
150
+ def self.get_number_sayer_ratus_milyaran(number)
151
+ @sayer = []
152
+ @temp = number.first
153
+ if number.count == 1
154
+ @sayer.push(@satuan_en[@temp]).push(@anomalies[1000000000])
155
+ return @sayer
156
+ elsif number.count == 2
157
+ if number[1] == 1
158
+ @sayer.push(@teen[10+@temp]).push(@anomalies[1000000000])
159
+ else
160
+ if @temp != 0
161
+ @sayer.push(@anomalies[number[1]*10]).push(@satuan_en[@temp]).push(@anomalies[1000000000])
162
+ else
163
+ @sayer.push(@anomalies[number[1]*10]).push(@anomalies[1000000000])
164
+ end
165
+ end
166
+ return @sayer
167
+ elsif number.count == 3
168
+ if number.last == 0
169
+ else
170
+ if @temp != 0
171
+ @sayer.push(@satuan_en[number.last]).push(@anomalies[100])
172
+ else
173
+ if number[1] != 0
174
+ @sayer.push(@satuan_en[number.last]).push(@anomalies[100])
175
+ else
176
+ @sayer.push(@satuan_en[number.last]).push(@anomalies[100]).push(@anomalies[1000000000])
177
+ end
178
+ end
179
+ end
180
+ if number[1] == 1
181
+ @sayer.push(@teen[10+@temp]).push(@anomalies[1000000000])
182
+ elsif number[1] == 0
183
+ if @temp != 0
184
+ @sayer.push(@satuan_en[@temp]).push(@anomalies[1000000000])
185
+ end
186
+ else
187
+ if @temp != 0
188
+ @sayer.push(@anomalies[number[1]*10]).push(@satuan_en[@temp]).push(@anomalies[1000000000])
189
+ else
190
+ @sayer.push(@anomalies[number[1]*10]).push(@anomalies[1000000000])
191
+ end
192
+ end
193
+ return @sayer
194
+ end
195
+ end
196
+
197
+ def self.get_number_sayer_ratus_triliunan(number)
198
+ @sayer = []
199
+ @temp = number.first
200
+ if number.count == 1
201
+ @sayer.push(@satuan_en[@temp]).push(@anomalies[1000000000000])
202
+ return @sayer
203
+ elsif number.count == 2
204
+ if number[1] == 1
205
+ @sayer.push(@teen[10+@temp]).push(@anomalies[1000000000000])
206
+ else
207
+ if @temp != 0
208
+ @sayer.push(@anomalies[number[1]*10]).push(@satuan_en[@temp]).push(@anomalies[1000000000000])
209
+ else
210
+ @sayer.push(@anomalies[number[1]*10]).push(@anomalies[1000000000000])
211
+ end
212
+ end
213
+ return @sayer
214
+ elsif number.count == 3
215
+ if number.last == 0
216
+ else
217
+ if @temp != 0
218
+ @sayer.push(@satuan_en[number.last]).push(@anomalies[100])
219
+ else
220
+ if number[1] != 0
221
+ @sayer.push(@satuan_en[number.last]).push(@anomalies[100])
222
+ else
223
+ @sayer.push(@satuan_en[number.last]).push(@anomalies[100]).push(@anomalies[1000000000000])
224
+ end
225
+ end
226
+ end
227
+ if number[1] == 1
228
+ @sayer.push(@teen[10+@temp]).push(@anomalies[1000000000000])
229
+ elsif number[1] == 0
230
+ if @temp != 0
231
+ @sayer.push(@satuan_en[@temp]).push(@anomalies[1000000000000])
232
+ end
233
+ else
234
+ if @temp != 0
235
+ @sayer.push(@anomalies[number[1]*10]).push(@satuan_en[@temp]).push(@anomalies[1000000000000])
236
+ else
237
+ @sayer.push(@anomalies[number[1]*10]).push(@anomalies[1000000000000])
238
+ end
239
+ end
240
+ return @sayer
241
+ end
242
+ end
243
+
244
+ def self.check_nol(saying)
245
+ if saying == ["zero"] or saying == "zero"
246
+ return ["zero"]
247
+ end
248
+ @check = saying.split(@satuan_en.first)
249
+ if @check.count < 1
250
+ return @check
251
+ else
252
+ return @check.map!{ |element| element.gsub("zero", "").gsub(" ", " ") }
253
+ end
254
+ end
255
+
256
+ def self.get_number_sayer_per_separator(block, number)
257
+ @array_number = number.split("").map { |i| i.to_i }
258
+ if block == 0
259
+ get_number_sayer_ratusan(@array_number)
260
+ elsif block == 1
261
+ get_number_sayer_ratus_ribuan(@array_number)
262
+ elsif block == 2
263
+ get_number_sayer_ratus_jutaan(@array_number)
264
+ elsif block == 3
265
+ get_number_sayer_ratus_milyaran(@array_number)
266
+ elsif block == 4
267
+ get_number_sayer_ratus_triliunan(@array_number)
268
+ else
269
+ raise "exceeds the calculation function"
270
+ end
271
+ end
272
+
273
+ end
@@ -1,360 +1,368 @@
1
- class Indonesia
2
- def self.initialize_sayer
3
- @satuan_id = ["nol", "satu", "dua", "tiga", "empat", "lima", "enam", "tujuh", "delapan", "sembilan"]
4
- @anomalies = {10=>"sepuluh", 11=>"sebelas", 100=>"seratus", 1000=>"seribu", 1000000=>"juta", 1000000000=>"miliyar", 1000000000000=>"triliun" }
5
- end
6
-
7
- def self.get_number_sayer_ratusan(number)
8
- @sayer = []
9
- @temp = number.first
10
- if number.count == 1
11
- return @sayer.push(@satuan_id[@temp])
12
- elsif number.count == 2
13
- if number[1] == 1
14
- if @temp == 1 or @temp == 0
15
- @sayer.push(@anomalies[10+@temp])
16
- else
17
- @sayer.push(@satuan_id[@temp]).push("belas")
18
- end
19
- else
20
- if @temp != 0
21
- @sayer.push(@satuan_id[number[1]]).push("puluh").push(@satuan_id[@temp])
22
- else
23
- @sayer.push(@satuan_id[number[1]]).push("puluh")
24
- end
25
- end
26
- return @sayer
27
- elsif number.count == 3
28
- if number.last == 1
29
- @sayer.push(@anomalies[100])
30
- else
31
- if number.last == 0
32
- else
33
- @sayer.push(@satuan_id[number.last]).push("ratus")
34
- end
35
- end
36
- if number[1] == 1
37
- if @temp == 1 or @temp == 0
38
- @sayer.push(@anomalies[10+@temp])
39
- else
40
- @sayer.push(@satuan_id[@temp]).push("belas")
41
- end
42
- elsif number[1] == 0
43
- if @temp != 0
44
- @sayer.push(@satuan_id[@temp])
45
- end
46
- else
47
- if @temp != 0
48
- @sayer.push(@satuan_id[number[1]]).push("puluh").push(@satuan_id[@temp])
49
- else
50
- @sayer.push(@satuan_id[number[1]]).push("puluh")
51
- end
52
- end
53
- return @sayer
54
- end
55
- end
56
-
57
- def self.get_number_sayer_ratus_ribuan(number)
58
- @sayer = []
59
- @temp = number.first
60
- if number.count == 1
61
- if @temp == 1
62
- @sayer.push(@anomalies[1000])
63
- else
64
- @sayer.push(@satuan_id[@temp]).push("ribu")
65
- end
66
- return @sayer
67
- elsif number.count == 2
68
- if number[1] == 1
69
- if @temp == 1 or @temp == 0
70
- @sayer.push(@anomalies[10+@temp]).push("ribu")
71
- else
72
- @sayer.push(@satuan_id[@temp]).push("belas").push("ribu")
73
- end
74
- else
75
- if @temp != 0
76
- @sayer.push(@satuan_id[number[1]]).push("puluh").push(@satuan_id[@temp]).push("ribu")
77
- else
78
- @sayer.push(@satuan_id[number[1]]).push("puluh").push("ribu")
79
- end
80
- end
81
- return @sayer
82
- elsif number.count == 3
83
- if number.last == 1
84
- if @temp != 0
85
- @sayer.push(@anomalies[100])
86
- else
87
- if number[1] != 0
88
- @sayer.push(@anomalies[100])
89
- else
90
- @sayer.push(@anomalies[100]).push("ribu")
91
- end
92
- end
93
- else
94
- if number.last == 0
95
- else
96
- if @temp != 0
97
- @sayer.push(@satuan_id[number.last]).push("ratus")
98
- else
99
- if number[1] != 0
100
- @sayer.push(@satuan_id[number.last]).push("ratus")
101
- else
102
- @sayer.push(@satuan_id[number.last]).push("ratus").push("ribu")
103
- end
104
-
105
- end
106
- end
107
- end
108
- if number[1] == 1
109
- if @temp == 1 or @temp == 0
110
- @sayer.push(@anomalies[10+@temp]).push("ribu")
111
- else
112
- @sayer.push(@satuan_id[@temp]).push("belas").push("ribu")
113
- end
114
- elsif number[1] == 0
115
- if @temp != 0
116
- @sayer.push(@satuan_id[@temp]).push("ribu")
117
- end
118
- else
119
- if @temp != 0
120
- @sayer.push(@satuan_id[number[1]]).push("puluh").push(@satuan_id[@temp]).push("ribu")
121
- else
122
- @sayer.push(@satuan_id[number[1]]).push("puluh").push("ribu")
123
- end
124
- end
125
- end
126
- return @sayer
127
- end
128
-
129
- def self.get_number_sayer_ratus_jutaan(number)
130
- @sayer = []
131
- @temp = number.first
132
- if number.count == 1
133
- return @sayer.push(@satuan_id[@temp]).push(@anomalies[1000000])
134
- elsif number.count == 2
135
- if number[1] == 1
136
- if @temp == 1 or @temp == 0
137
- @sayer.push(@anomalies[10+@temp]).push(@anomalies[1000000])
138
- else
139
- @sayer.push(@satuan_id[@temp]).push("belas").push(@anomalies[1000000])
140
- end
141
- else
142
- if @temp != 0
143
- @sayer.push(@satuan_id[number[1]]).push("puluh").push(@satuan_id[@temp]).push(@anomalies[1000000])
144
- else
145
- @sayer.push(@satuan_id[number[1]]).push("puluh").push(@anomalies[1000000])
146
- end
147
- end
148
- return @sayer
149
- elsif number.count == 3
150
- if number.last == 1
151
- if @temp != 0
152
- @sayer.push(@anomalies[100])
153
- else
154
- if number[1] != 0
155
- @sayer.push(@anomalies[100])
156
- else
157
- @sayer.push(@anomalies[100]).push(@anomalies[1000000])
158
- end
159
- end
160
- else
161
- if number.last == 0
162
- else
163
- if @temp != 0
164
- @sayer.push(@satuan_id[number.last]).push("ratus")
165
- else
166
- if number[1] != 0
167
- @sayer.push(@satuan_id[number.last]).push("ratus")
168
- else
169
- @sayer.push(@satuan_id[number.last]).push("ratus").push(@anomalies[1000000])
170
- end
171
-
172
- end
173
- end
174
- end
175
- if number[1] == 1
176
- if @temp == 1 or @temp == 0
177
- @sayer.push(@anomalies[10+@temp]).push(@anomalies[1000000])
178
- else
179
- @sayer.push(@satuan_id[@temp]).push("belas").push(@anomalies[1000000])
180
- end
181
- elsif number[1] == 0
182
- if @temp != 0
183
- @sayer.push(@satuan_id[@temp]).push(@anomalies[1000000])
184
- end
185
- else
186
- if @temp != 0
187
- @sayer.push(@satuan_id[number[1]]).push("puluh").push(@satuan_id[@temp]).push(@anomalies[1000000])
188
- else
189
- @sayer.push(@satuan_id[number[1]]).push("puluh").push(@anomalies[1000000])
190
- end
191
- end
192
- return @sayer
193
- end
194
- end
195
-
196
- def self.get_number_sayer_ratus_milyaran(number)
197
- @sayer = []
198
- @temp = number.first
199
- if number.count == 1
200
- return @sayer.push(@satuan_id[@temp]).push(@anomalies[1000000000])
201
- elsif number.count == 2
202
- if number[1] == 1
203
- if @temp == 1 or @temp == 0
204
- @sayer.push(@anomalies[10+@temp]).push(@anomalies[1000000000])
205
- else
206
- @sayer.push(@satuan_id[@temp]).push("belas").push(@anomalies[1000000000])
207
- end
208
- else
209
- if @temp != 0
210
- @sayer.push(@satuan_id[number[1]]).push("puluh").push(@satuan_id[@temp]).push(@anomalies[1000000000])
211
- else
212
- @sayer.push(@satuan_id[number[1]]).push("puluh").push(@anomalies[1000000000])
213
- end
214
- end
215
- return @sayer
216
- elsif number.count == 3
217
- if number.last == 1
218
- if @temp != 0
219
- @sayer.push(@anomalies[100])
220
- else
221
- if number[1] != 0
222
- @sayer.push(@anomalies[100])
223
- else
224
- @sayer.push(@anomalies[100]).push(@anomalies[1000000000])
225
- end
226
- end
227
- else
228
- if number.last == 0
229
- else
230
- if @temp != 0
231
- @sayer.push(@satuan_id[number.last]).push("ratus")
232
- else
233
- if number[1] != 0
234
- @sayer.push(@satuan_id[number.last]).push("ratus")
235
- else
236
- @sayer.push(@satuan_id[number.last]).push("ratus").push(@anomalies[1000000000])
237
- end
238
-
239
- end
240
- end
241
- end
242
- if number[1] == 1
243
- if @temp == 1 or @temp == 0
244
- @sayer.push(@anomalies[10+@temp]).push(@anomalies[1000000000])
245
- else
246
- @sayer.push(@satuan_id[@temp]).push("belas").push(@anomalies[1000000000])
247
- end
248
- elsif number[1] == 0
249
- if @temp != 0
250
- @sayer.push(@satuan_id[@temp]).push(@anomalies[1000000000])
251
- end
252
- else
253
- if @temp != 0
254
- @sayer.push(@satuan_id[number[1]]).push("puluh").push(@satuan_id[@temp]).push(@anomalies[1000000000])
255
- else
256
- @sayer.push(@satuan_id[number[1]]).push("puluh").push(@anomalies[1000000000])
257
- end
258
- end
259
- return @sayer
260
- end
261
- end
262
-
263
- def self.get_number_sayer_ratus_triliunan(number)
264
- @sayer = []
265
- @temp = number.first
266
- if number.count == 1
267
- return @sayer.push(@satuan_id[@temp]).push(@anomalies[1000000000000])
268
- elsif number.count == 2
269
- if number[1] == 1
270
- if @temp == 1 or @temp == 0
271
- @sayer.push(@anomalies[10+@temp]).push(@anomalies[1000000000000])
272
- else
273
- @sayer.push(@satuan_id[@temp]).push("belas").push(@anomalies[1000000000000])
274
- end
275
- else
276
- if @temp != 0
277
- @sayer.push(@satuan_id[number[1]]).push("puluh").push(@satuan_id[@temp]).push(@anomalies[1000000000000])
278
- else
279
- @sayer.push(@satuan_id[number[1]]).push("puluh").push(@anomalies[1000000000000])
280
- end
281
- end
282
- return @sayer
283
- elsif number.count == 3
284
- if number.last == 1
285
- if @temp != 0
286
- @sayer.push(@anomalies[100])
287
- else
288
- if number[1] != 0
289
- @sayer.push(@anomalies[100])
290
- else
291
- @sayer.push(@anomalies[100]).push(@anomalies[1000000000000])
292
- end
293
- end
294
- else
295
- if number.last == 0
296
- else
297
- if @temp != 0
298
- @sayer.push(@satuan_id[number.last]).push("ratus")
299
- else
300
- if number[1] != 0
301
- @sayer.push(@satuan_id[number.last]).push("ratus")
302
- else
303
- @sayer.push(@satuan_id[number.last]).push("ratus").push(@anomalies[1000000000000])
304
- end
305
-
306
- end
307
- end
308
- end
309
- if number[1] == 1
310
- if @temp == 1 or @temp == 0
311
- @sayer.push(@anomalies[10+@temp]).push(@anomalies[1000000000000])
312
- else
313
- @sayer.push(@satuan_id[@temp]).push("belas").push(@anomalies[1000000000000])
314
- end
315
- elsif number[1] == 0
316
- if @temp != 0
317
- @sayer.push(@satuan_id[@temp]).push(@anomalies[1000000000000])
318
- end
319
- else
320
- if @temp != 0
321
- @sayer.push(@satuan_id[number[1]]).push("puluh").push(@satuan_id[@temp]).push(@anomalies[1000000000000])
322
- else
323
- @sayer.push(@satuan_id[number[1]]).push("puluh").push(@anomalies[1000000000000])
324
- end
325
- end
326
- return @sayer
327
- end
328
- end
329
-
330
- def self.check_nol(saying)
331
- @check = saying.split(@satuan_id.first)
332
- if @check.count < 1
333
- return @check
334
- else
335
- if @check.nil?
336
- return "nol"
337
- else
338
- return @check.map!{ |element| element.gsub("nol", "").gsub(" ", " ") }
339
- end
340
- end
341
- end
342
-
343
- def self.get_number_sayer_per_separator(block, number)
344
- @array_number = number.split("").map { |i| i.to_i }
345
- if block == 0
346
- get_number_sayer_ratusan(@array_number)
347
- elsif block == 1
348
- get_number_sayer_ratus_ribuan(@array_number)
349
- elsif block == 2
350
- get_number_sayer_ratus_jutaan(@array_number)
351
- elsif block == 3
352
- get_number_sayer_ratus_milyaran(@array_number)
353
- elsif block == 4
354
- get_number_sayer_ratus_triliunan(@array_number)
355
- else
356
- raise "exceeds the calculation function"
357
- end
358
- end
359
-
1
+ class Indonesia
2
+ def self.initialize_sayer
3
+ @satuan_id = ["nol", "satu", "dua", "tiga", "empat", "lima", "enam", "tujuh", "delapan", "sembilan"]
4
+ @anomalies = {10=>"sepuluh", 11=>"sebelas", 100=>"seratus", 1000=>"seribu", 1000000=>"juta", 1000000000=>"miliyar", 1000000000000=>"triliun" }
5
+ end
6
+
7
+ def self.say_koma(koma)
8
+ @koma = []
9
+ @koma.push("koma")
10
+ @temp = koma.to_s.split("")
11
+ @temp.each do |k|
12
+ @koma.push(@satuan_id[k.to_i])
13
+ end
14
+ return @koma.join(" ")
15
+ end
16
+
17
+ def self.get_number_sayer_ratusan(number)
18
+ @sayer = []
19
+ @temp = number.first
20
+ if number.count == 1
21
+ return @sayer.push(@satuan_id[@temp])
22
+ elsif number.count == 2
23
+ if number[1] == 1
24
+ if @temp == 1 or @temp == 0
25
+ @sayer.push(@anomalies[10+@temp])
26
+ else
27
+ @sayer.push(@satuan_id[@temp]).push("belas")
28
+ end
29
+ else
30
+ if @temp != 0
31
+ @sayer.push(@satuan_id[number[1]]).push("puluh").push(@satuan_id[@temp])
32
+ else
33
+ @sayer.push(@satuan_id[number[1]]).push("puluh")
34
+ end
35
+ end
36
+ return @sayer
37
+ elsif number.count == 3
38
+ if number.last == 1
39
+ @sayer.push(@anomalies[100])
40
+ else
41
+ if number.last == 0
42
+ else
43
+ @sayer.push(@satuan_id[number.last]).push("ratus")
44
+ end
45
+ end
46
+ if number[1] == 1
47
+ if @temp == 1 or @temp == 0
48
+ @sayer.push(@anomalies[10+@temp])
49
+ else
50
+ @sayer.push(@satuan_id[@temp]).push("belas")
51
+ end
52
+ elsif number[1] == 0
53
+ if @temp != 0
54
+ @sayer.push(@satuan_id[@temp])
55
+ end
56
+ else
57
+ if @temp != 0
58
+ @sayer.push(@satuan_id[number[1]]).push("puluh").push(@satuan_id[@temp])
59
+ else
60
+ @sayer.push(@satuan_id[number[1]]).push("puluh")
61
+ end
62
+ end
63
+ return @sayer
64
+ end
65
+ end
66
+
67
+ def self.get_number_sayer_ratus_ribuan(number)
68
+ @sayer = []
69
+ @temp = number.first
70
+ if number.count == 1
71
+ if @temp == 1
72
+ @sayer.push(@anomalies[1000])
73
+ else
74
+ @sayer.push(@satuan_id[@temp]).push("ribu")
75
+ end
76
+ return @sayer
77
+ elsif number.count == 2
78
+ if number[1] == 1
79
+ if @temp == 1 or @temp == 0
80
+ @sayer.push(@anomalies[10+@temp]).push("ribu")
81
+ else
82
+ @sayer.push(@satuan_id[@temp]).push("belas").push("ribu")
83
+ end
84
+ else
85
+ if @temp != 0
86
+ @sayer.push(@satuan_id[number[1]]).push("puluh").push(@satuan_id[@temp]).push("ribu")
87
+ else
88
+ @sayer.push(@satuan_id[number[1]]).push("puluh").push("ribu")
89
+ end
90
+ end
91
+ return @sayer
92
+ elsif number.count == 3
93
+ if number.last == 1
94
+ if @temp != 0
95
+ @sayer.push(@anomalies[100])
96
+ else
97
+ if number[1] != 0
98
+ @sayer.push(@anomalies[100])
99
+ else
100
+ @sayer.push(@anomalies[100]).push("ribu")
101
+ end
102
+ end
103
+ else
104
+ if number.last == 0
105
+ else
106
+ if @temp != 0
107
+ @sayer.push(@satuan_id[number.last]).push("ratus")
108
+ else
109
+ if number[1] != 0
110
+ @sayer.push(@satuan_id[number.last]).push("ratus")
111
+ else
112
+ @sayer.push(@satuan_id[number.last]).push("ratus").push("ribu")
113
+ end
114
+
115
+ end
116
+ end
117
+ end
118
+ if number[1] == 1
119
+ if @temp == 1 or @temp == 0
120
+ @sayer.push(@anomalies[10+@temp]).push("ribu")
121
+ else
122
+ @sayer.push(@satuan_id[@temp]).push("belas").push("ribu")
123
+ end
124
+ elsif number[1] == 0
125
+ if @temp != 0
126
+ @sayer.push(@satuan_id[@temp]).push("ribu")
127
+ end
128
+ else
129
+ if @temp != 0
130
+ @sayer.push(@satuan_id[number[1]]).push("puluh").push(@satuan_id[@temp]).push("ribu")
131
+ else
132
+ @sayer.push(@satuan_id[number[1]]).push("puluh").push("ribu")
133
+ end
134
+ end
135
+ end
136
+ return @sayer
137
+ end
138
+
139
+ def self.get_number_sayer_ratus_jutaan(number)
140
+ @sayer = []
141
+ @temp = number.first
142
+ if number.count == 1
143
+ return @sayer.push(@satuan_id[@temp]).push(@anomalies[1000000])
144
+ elsif number.count == 2
145
+ if number[1] == 1
146
+ if @temp == 1 or @temp == 0
147
+ @sayer.push(@anomalies[10+@temp]).push(@anomalies[1000000])
148
+ else
149
+ @sayer.push(@satuan_id[@temp]).push("belas").push(@anomalies[1000000])
150
+ end
151
+ else
152
+ if @temp != 0
153
+ @sayer.push(@satuan_id[number[1]]).push("puluh").push(@satuan_id[@temp]).push(@anomalies[1000000])
154
+ else
155
+ @sayer.push(@satuan_id[number[1]]).push("puluh").push(@anomalies[1000000])
156
+ end
157
+ end
158
+ return @sayer
159
+ elsif number.count == 3
160
+ if number.last == 1
161
+ if @temp != 0
162
+ @sayer.push(@anomalies[100])
163
+ else
164
+ if number[1] != 0
165
+ @sayer.push(@anomalies[100])
166
+ else
167
+ @sayer.push(@anomalies[100]).push(@anomalies[1000000])
168
+ end
169
+ end
170
+ else
171
+ if number.last == 0
172
+ else
173
+ if @temp != 0
174
+ @sayer.push(@satuan_id[number.last]).push("ratus")
175
+ else
176
+ if number[1] != 0
177
+ @sayer.push(@satuan_id[number.last]).push("ratus")
178
+ else
179
+ @sayer.push(@satuan_id[number.last]).push("ratus").push(@anomalies[1000000])
180
+ end
181
+
182
+ end
183
+ end
184
+ end
185
+ if number[1] == 1
186
+ if @temp == 1 or @temp == 0
187
+ @sayer.push(@anomalies[10+@temp]).push(@anomalies[1000000])
188
+ else
189
+ @sayer.push(@satuan_id[@temp]).push("belas").push(@anomalies[1000000])
190
+ end
191
+ elsif number[1] == 0
192
+ if @temp != 0
193
+ @sayer.push(@satuan_id[@temp]).push(@anomalies[1000000])
194
+ end
195
+ else
196
+ if @temp != 0
197
+ @sayer.push(@satuan_id[number[1]]).push("puluh").push(@satuan_id[@temp]).push(@anomalies[1000000])
198
+ else
199
+ @sayer.push(@satuan_id[number[1]]).push("puluh").push(@anomalies[1000000])
200
+ end
201
+ end
202
+ return @sayer
203
+ end
204
+ end
205
+
206
+ def self.get_number_sayer_ratus_milyaran(number)
207
+ @sayer = []
208
+ @temp = number.first
209
+ if number.count == 1
210
+ return @sayer.push(@satuan_id[@temp]).push(@anomalies[1000000000])
211
+ elsif number.count == 2
212
+ if number[1] == 1
213
+ if @temp == 1 or @temp == 0
214
+ @sayer.push(@anomalies[10+@temp]).push(@anomalies[1000000000])
215
+ else
216
+ @sayer.push(@satuan_id[@temp]).push("belas").push(@anomalies[1000000000])
217
+ end
218
+ else
219
+ if @temp != 0
220
+ @sayer.push(@satuan_id[number[1]]).push("puluh").push(@satuan_id[@temp]).push(@anomalies[1000000000])
221
+ else
222
+ @sayer.push(@satuan_id[number[1]]).push("puluh").push(@anomalies[1000000000])
223
+ end
224
+ end
225
+ return @sayer
226
+ elsif number.count == 3
227
+ if number.last == 1
228
+ if @temp != 0
229
+ @sayer.push(@anomalies[100])
230
+ else
231
+ if number[1] != 0
232
+ @sayer.push(@anomalies[100])
233
+ else
234
+ @sayer.push(@anomalies[100]).push(@anomalies[1000000000])
235
+ end
236
+ end
237
+ else
238
+ if number.last == 0
239
+ else
240
+ if @temp != 0
241
+ @sayer.push(@satuan_id[number.last]).push("ratus")
242
+ else
243
+ if number[1] != 0
244
+ @sayer.push(@satuan_id[number.last]).push("ratus")
245
+ else
246
+ @sayer.push(@satuan_id[number.last]).push("ratus").push(@anomalies[1000000000])
247
+ end
248
+
249
+ end
250
+ end
251
+ end
252
+ if number[1] == 1
253
+ if @temp == 1 or @temp == 0
254
+ @sayer.push(@anomalies[10+@temp]).push(@anomalies[1000000000])
255
+ else
256
+ @sayer.push(@satuan_id[@temp]).push("belas").push(@anomalies[1000000000])
257
+ end
258
+ elsif number[1] == 0
259
+ if @temp != 0
260
+ @sayer.push(@satuan_id[@temp]).push(@anomalies[1000000000])
261
+ end
262
+ else
263
+ if @temp != 0
264
+ @sayer.push(@satuan_id[number[1]]).push("puluh").push(@satuan_id[@temp]).push(@anomalies[1000000000])
265
+ else
266
+ @sayer.push(@satuan_id[number[1]]).push("puluh").push(@anomalies[1000000000])
267
+ end
268
+ end
269
+ return @sayer
270
+ end
271
+ end
272
+
273
+ def self.get_number_sayer_ratus_triliunan(number)
274
+ @sayer = []
275
+ @temp = number.first
276
+ if number.count == 1
277
+ return @sayer.push(@satuan_id[@temp]).push(@anomalies[1000000000000])
278
+ elsif number.count == 2
279
+ if number[1] == 1
280
+ if @temp == 1 or @temp == 0
281
+ @sayer.push(@anomalies[10+@temp]).push(@anomalies[1000000000000])
282
+ else
283
+ @sayer.push(@satuan_id[@temp]).push("belas").push(@anomalies[1000000000000])
284
+ end
285
+ else
286
+ if @temp != 0
287
+ @sayer.push(@satuan_id[number[1]]).push("puluh").push(@satuan_id[@temp]).push(@anomalies[1000000000000])
288
+ else
289
+ @sayer.push(@satuan_id[number[1]]).push("puluh").push(@anomalies[1000000000000])
290
+ end
291
+ end
292
+ return @sayer
293
+ elsif number.count == 3
294
+ if number.last == 1
295
+ if @temp != 0
296
+ @sayer.push(@anomalies[100])
297
+ else
298
+ if number[1] != 0
299
+ @sayer.push(@anomalies[100])
300
+ else
301
+ @sayer.push(@anomalies[100]).push(@anomalies[1000000000000])
302
+ end
303
+ end
304
+ else
305
+ if number.last == 0
306
+ else
307
+ if @temp != 0
308
+ @sayer.push(@satuan_id[number.last]).push("ratus")
309
+ else
310
+ if number[1] != 0
311
+ @sayer.push(@satuan_id[number.last]).push("ratus")
312
+ else
313
+ @sayer.push(@satuan_id[number.last]).push("ratus").push(@anomalies[1000000000000])
314
+ end
315
+
316
+ end
317
+ end
318
+ end
319
+ if number[1] == 1
320
+ if @temp == 1 or @temp == 0
321
+ @sayer.push(@anomalies[10+@temp]).push(@anomalies[1000000000000])
322
+ else
323
+ @sayer.push(@satuan_id[@temp]).push("belas").push(@anomalies[1000000000000])
324
+ end
325
+ elsif number[1] == 0
326
+ if @temp != 0
327
+ @sayer.push(@satuan_id[@temp]).push(@anomalies[1000000000000])
328
+ end
329
+ else
330
+ if @temp != 0
331
+ @sayer.push(@satuan_id[number[1]]).push("puluh").push(@satuan_id[@temp]).push(@anomalies[1000000000000])
332
+ else
333
+ @sayer.push(@satuan_id[number[1]]).push("puluh").push(@anomalies[1000000000000])
334
+ end
335
+ end
336
+ return @sayer
337
+ end
338
+ end
339
+
340
+ def self.check_nol(saying)
341
+ if saying == ["nol"] or saying == "nol"
342
+ return ["nol"]
343
+ end
344
+ @check = saying.split(@satuan_id.first)
345
+ if @check.count < 1
346
+ return @check
347
+ else
348
+ return @check.map!{ |element| element.gsub("nol", "").gsub(" ", " ") }
349
+ end
350
+ end
351
+
352
+ def self.get_number_sayer_per_separator(block, number)
353
+ @array_number = number.split("").map { |i| i.to_i }
354
+ if block == 0
355
+ get_number_sayer_ratusan(@array_number)
356
+ elsif block == 1
357
+ get_number_sayer_ratus_ribuan(@array_number)
358
+ elsif block == 2
359
+ get_number_sayer_ratus_jutaan(@array_number)
360
+ elsif block == 3
361
+ get_number_sayer_ratus_milyaran(@array_number)
362
+ elsif block == 4
363
+ get_number_sayer_ratus_triliunan(@array_number)
364
+ else
365
+ raise "exceeds the calculation function"
366
+ end
367
+ end
360
368
  end
@@ -1,3 +1,3 @@
1
1
  module SayNumber
2
- VERSION = "0.1.3"
2
+ VERSION = '1.0.1'
3
3
  end
@@ -9,16 +9,17 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Fery Japminto"]
10
10
  spec.email = ["ferydjzz@gmail.com"]
11
11
 
12
- spec.summary = %q{a simple say_number in Indonesian and any other languange.}
13
- spec.description = %q{a simple say_number in Indonesian and any other languange.}
12
+ spec.summary = %q{a simple gem that say the given number in word. Available in two languages, Indonesian and English. Support float number in the latest version (1.0.0).}
13
+ spec.description = %q{a simple gem that say the given number in word. Available in two languages, Indonesian and English. Support float number in the latest version (1.0.0).}
14
14
  spec.homepage = "https://github.com/ferydjzz/say_number"
15
15
  spec.license = "MIT"
16
16
 
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"
24
+ spec.add_development_dependency "rspec", "~> 3.2"
24
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
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: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fery Japminto
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-04-27 00:00:00.000000000 Z
11
+ date: 2020-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,7 +38,22 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
- description: a simple say_number in Indonesian and any other languange.
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.2'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.2'
55
+ description: a simple gem that say the given number in word. Available in two languages,
56
+ Indonesian and English. Support float number in the latest version (1.0.0).
42
57
  email:
43
58
  - ferydjzz@gmail.com
44
59
  executables: []
@@ -54,6 +69,7 @@ files:
54
69
  - bin/console
55
70
  - bin/setup
56
71
  - lib/say_number.rb
72
+ - lib/say_number/languages/english.rb
57
73
  - lib/say_number/languages/indonesia.rb
58
74
  - lib/say_number/version.rb
59
75
  - say_number.gemspec
@@ -67,6 +83,7 @@ require_paths:
67
83
  - lib
68
84
  - lib/say_number.rb
69
85
  - lib/say_number/languages/indonesia.rb
86
+ - lib/say_number/languages/english.rb
70
87
  required_ruby_version: !ruby/object:Gem::Requirement
71
88
  requirements:
72
89
  - - ">="
@@ -79,8 +96,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
96
  version: '0'
80
97
  requirements: []
81
98
  rubyforge_project:
82
- rubygems_version: 2.2.2
99
+ rubygems_version: 2.6.11
83
100
  signing_key:
84
101
  specification_version: 4
85
- summary: a simple say_number in Indonesian and any other languange.
102
+ summary: a simple gem that say the given number in word. Available in two languages,
103
+ Indonesian and English. Support float number in the latest version (1.0.0).
86
104
  test_files: []