phony 1.9.0 → 2.0.0.beta1

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.
Files changed (53) hide show
  1. data/README.textile +1 -1
  2. data/lib/phony.rb +28 -15
  3. data/lib/phony/countries.rb +609 -210
  4. data/lib/phony/countries/austria.rb +6 -1
  5. data/lib/phony/countries/bangladesh.rb +55 -0
  6. data/lib/phony/countries/belarus.rb +130 -0
  7. data/lib/phony/countries/georgia.rb +91 -0
  8. data/lib/phony/countries/germany.rb +20 -6
  9. data/lib/phony/countries/india.rb +50 -0
  10. data/lib/phony/countries/indonesia.rb +50 -0
  11. data/lib/phony/countries/italy.rb +38 -67
  12. data/lib/phony/countries/japan.rb +412 -0
  13. data/lib/phony/countries/kyrgyzstan.rb +118 -0
  14. data/lib/phony/countries/latvia.rb +40 -0
  15. data/lib/phony/countries/libya.rb +114 -0
  16. data/lib/phony/countries/malaysia.rb +7 -5
  17. data/lib/phony/countries/moldova.rb +50 -0
  18. data/lib/phony/countries/montenegro.rb +27 -0
  19. data/lib/phony/countries/namibia.rb +35 -0
  20. data/lib/phony/countries/nepal.rb +71 -0
  21. data/lib/phony/countries/netherlands.rb +3 -2
  22. data/lib/phony/countries/pakistan.rb +119 -0
  23. data/lib/phony/countries/paraguay.rb +145 -0
  24. data/lib/phony/countries/russia_kazakhstan_abhasia_south_osetia.rb +6 -6
  25. data/lib/phony/countries/serbia.rb +34 -0
  26. data/lib/phony/countries/somali.rb +22 -0
  27. data/lib/phony/countries/south_korea.rb +1 -1
  28. data/lib/phony/countries/sweden.rb +1 -1
  29. data/lib/phony/countries/taiwan.rb +51 -0
  30. data/lib/phony/countries/tajikistan.rb +76 -0
  31. data/lib/phony/countries/turkmenistan.rb +73 -0
  32. data/lib/phony/countries/ukraine.rb +614 -0
  33. data/lib/phony/countries/uruguay.rb +51 -0
  34. data/lib/phony/countries/zimbabwe.rb +37 -0
  35. data/lib/phony/country.rb +41 -0
  36. data/lib/phony/country_codes.rb +45 -18
  37. data/lib/phony/dsl.rb +33 -7
  38. data/lib/phony/local_splitters/fixed.rb +14 -1
  39. data/lib/phony/local_splitters/regex.rb +12 -1
  40. data/lib/phony/national_code.rb +7 -3
  41. data/lib/phony/national_splitters/default.rb +13 -1
  42. data/lib/phony/national_splitters/dsl.rb +9 -7
  43. data/lib/phony/national_splitters/fixed.rb +6 -0
  44. data/lib/phony/national_splitters/none.rb +6 -0
  45. data/lib/phony/national_splitters/regex.rb +6 -0
  46. data/lib/phony/national_splitters/variable.rb +7 -1
  47. data/spec/lib/phony/countries_spec.rb +684 -16
  48. data/spec/lib/phony/local_splitters/regex_spec.rb +41 -0
  49. data/spec/lib/phony/validations_spec.rb +542 -10
  50. data/spec/lib/phony_spec.rb +20 -6
  51. metadata +29 -9
  52. data/lib/phony/validator.rb +0 -26
  53. data/lib/phony/validators.rb +0 -88
@@ -45,5 +45,46 @@ describe Phony::LocalSplitters::Regex do
45
45
  performance_of { @splitter.split('91234567').should == ['912','34','567'] }.should < 0.00004
46
46
  end
47
47
  end
48
+
49
+ describe 'plausible?' do
50
+ let(:number) {['123', '456']}
51
+ let(:result) { local_splitter.plausible?(number) }
52
+
53
+ context 'Local splitter without mappings' do
54
+ let(:local_splitter) { described_class.instance_for({})}
55
+ it 'returns false' do
56
+ result.should be_false
57
+ end
58
+ end
59
+
60
+ context 'Mapping does not exist for a number' do
61
+ let(:local_splitter) { described_class.instance_for /\A5/ => [1,2,3]}
62
+ it 'returns false' do
63
+ result.should be_false
64
+ end
65
+ end
66
+
67
+ context "Mapping exists, but the length is greater" do
68
+ let(:local_splitter) { described_class.instance_for /\A123/ => [2,2]}
69
+ it 'returns false' do
70
+ result.should be_false
71
+ end
72
+ end
73
+
74
+ context "Mapping exists, but the length is less" do
75
+ let(:local_splitter) { described_class.instance_for /\A123/ => [2,2,3]}
76
+ it 'returns false' do
77
+ result.should be_false
78
+ end
79
+ end
80
+
81
+ context 'Mapping exists and the length is equal' do
82
+ let(:local_splitter) { described_class.instance_for /\A123/ => [2,2,2]}
83
+ it 'returns true' do
84
+ result.should be_true
85
+ end
86
+ end
87
+
88
+ end
48
89
 
49
90
  end
@@ -5,6 +5,33 @@ require 'spec_helper'
5
5
  describe 'validations' do
6
6
 
7
7
  describe 'plausible?' do
8
+
9
+ # Validations test helper.
10
+ # @param country_name [String]
11
+ # @param options [Hash]
12
+ # @option options [String, Array<String>] :samples
13
+ #
14
+ def self.it_is_correct_for(country_name, options={})
15
+ samples = [*options[:samples]]
16
+ raise ArgumentError, ':samples option should be specified' if samples.empty?
17
+
18
+ it "is correct for #{country_name}" do
19
+ samples.each do |sample|
20
+ correct = [*sample]
21
+
22
+ shortest = correct.min_by{|x| x.scan(/\d/).length}
23
+ longest = correct.max_by{|x| x.scan(/\d/).length}
24
+ incorrect = [shortest.sub(/\d\s*\z/, ''), longest + '0']
25
+
26
+ correct.each do |value|
27
+ Phony.plausible?(value).should be_true, "not validates '#{value}', but should"
28
+ end
29
+ incorrect.each do |value|
30
+ Phony.plausible?(value).should be_false, "validates '#{value}', but should not"
31
+ end
32
+ end
33
+ end
34
+ end
8
35
 
9
36
  it 'does not change the given number' do
10
37
  number = "123-123-1234"
@@ -18,10 +45,9 @@ describe 'validations' do
18
45
  Phony.plausible?('353').should be_false
19
46
  end
20
47
 
21
- # TODO
22
- # it 'is correct' do
23
- # Phony.plausible?('+1911').should be_false
24
- # end
48
+ it 'is correct' do
49
+ Phony.plausible?('+1911').should be_false
50
+ end
25
51
  it "correctly plausibilizes to#{}do countries" do
26
52
  Phony.plausible?('6327332350').should be_true
27
53
  end
@@ -69,14 +95,74 @@ describe 'validations' do
69
95
  Phony.plausible?('+41 44 111 22 33', cc: /4(0|1)/, ndc: /4(4|5)/).should be_true
70
96
  end
71
97
 
98
+ context 'Length validation' do
99
+ it 'works for Swiss cases' do
100
+ Phony.plausible?('+41 44 111 22 3').should be_false # Not long enough is not ok.
101
+ # Phony.plausible?('+41 44 111 22 33 4').should be_true # TODO Too long is ok – we don't know about extensions.
102
+ end
103
+ end
104
+
72
105
  context 'specific countries' do
73
106
 
74
- # TODO
107
+ # TODO: more needs to be done here
75
108
  #
76
- # it "is correct for Swiss numbers" do
77
- # Phony.plausible?('+41 44 111 22 33').should be_true
78
- # end
79
-
109
+ it "is correct for Swiss numbers" do
110
+ Phony.plausible?('+41 44 111 22 33').should be_true
111
+ Phony.plausible?('+41 44 111 22 334').should be_false
112
+ Phony.plausible?('+41 44 111 22').should be_false
113
+ end
114
+
115
+ it "is correct for Danish numbers" do
116
+ Phony.plausible?('+45 44 11 12 23 34').should be_false
117
+ Phony.plausible?('+45 44 11 12 2').should be_false
118
+ Phony.plausible?('+45 44 55 22 33').should be_true
119
+ end
120
+
121
+ it 'is correct for egyptian numbers' do
122
+ Phony.plausible?('+20 800 1234567').should be_true
123
+ Phony.plausible?('+20 800 12345678').should be_false
124
+ Phony.plausible?('+20 2 12345678').should be_true
125
+ Phony.plausible?('+20 2 1234567').should be_false
126
+ Phony.plausible?('+20 40 12345678').should be_true
127
+ Phony.plausible?('+20 40 1234567').should be_false
128
+ end
129
+
130
+ it 'is correct for Dutch numbers' do
131
+ Phony.plausible?('+31 6 12 34 56 78').should be_true
132
+ Phony.plausible?('+31 6 12 34 56 7').should be_false
133
+ Phony.plausible?('+31 20 123 5678').should be_true
134
+ Phony.plausible?('+31 20 123 567').should be_false
135
+ Phony.plausible?('+31 221 123 567').should be_true
136
+ Phony.plausible?('+31 221 123 56').should be_false
137
+ end
138
+ it 'is correct for Nigerian numbers' do
139
+ Phony.plausible?('+234 807 766 1234').should be_true
140
+ Phony.plausible?('+234 807 766 123').should be_false
141
+ end
142
+ it 'is correct for Italian numbers' do
143
+ Phony.plausible?('+39 06 1234 4567').should be_true
144
+ Phony.plausible?('+39 335 123 4567').should be_true
145
+ Phony.plausible?('+39 335 123').should be_false
146
+ end
147
+ it 'is correct for German numbers' do
148
+ Phony.plausible?('+49 40 123 45678').should be_true
149
+ Phony.plausible?('+49 40 123 456789').should be_false
150
+ Phony.plausible?('+49 171 123 4567').should be_true
151
+ Phony.plausible?('+49 171 123 45678').should be_false
152
+ Phony.plausible?('+49 177 123 1234').should be_true
153
+ Phony.plausible?('+49 176 123 12345').should be_true
154
+ # Phony.plausible?('+49 991 1234').should be_true # stricter 3 digit ndc rules
155
+ # Phony.plausible?('+49 2041 123').should be_true # Grandfathered numbers. TODO
156
+ Phony.plausible?('+49 2041 1234567').should be_true
157
+ Phony.plausible?('+49 2041 12345689').should be_false
158
+ Phony.plausible?('+49 31234 123456').should be_true
159
+ Phony.plausible?('+49 31234 1234567').should be_false
160
+ end
161
+
162
+ it 'is correct for Isralian numbers' do
163
+ Phony.plausible?('+972 2 123 1234').should be_true
164
+ Phony.plausible?('+972 59 123 1234').should be_true
165
+ end
80
166
  it "is correct for US numbers" do
81
167
  # Sorry, still need E164 conform numbers.
82
168
  #
@@ -88,6 +174,8 @@ describe 'validations' do
88
174
  Phony.plausible?('1-800-692-7753').should be_true
89
175
  Phony.plausible?('1-911').should be_false
90
176
  Phony.plausible?('1-911-123-1234').should be_false
177
+ Phony.plausible?('143466677777').should be_false # too long
178
+ Phony.plausible?('143466677').should be_false # too short
91
179
 
92
180
  # With string constraints.
93
181
  #
@@ -101,7 +189,451 @@ describe 'validations' do
101
189
  Phony.plausible?('14346667777', ndc: /434|435/).should be_true
102
190
  Phony.plausible?('14346667777', cc: /[123]/, ndc: /434|435/).should be_true
103
191
  end
104
-
192
+
193
+ it "is correct for Portugese numbers" do
194
+ Phony.plausible?('+351 800 123456').should be_true
195
+ Phony.plausible?('+351 90 1234567').should be_true
196
+ Phony.plausible?('+351 90 123456').should be_false
197
+ Phony.plausible?('+351 123 1234567').should be_true
198
+ end
199
+
200
+ it "is correct for Russia" do
201
+ Phony.plausible?('+7 800 2000 600').should be_true
202
+ Phony.plausible?('+7 960 301 23 45').should be_true
203
+ Phony.plausible?('+7 800 2000 60').should be_false # too short
204
+ Phony.plausible?('796030123451').should be_false # too long
205
+ end
206
+
207
+ it "is correct for Austria" do
208
+ Phony.plausible?('+43 501 1234567890').should be_true
209
+ Phony.plausible?('+43 501 123456789').should be_false # too short
210
+ Phony.plausible?('+43 501 12345678901').should be_false # too long
211
+ end
212
+
213
+ it "is correct for Azerbaijan" do
214
+ Phony.plausible?('+994 12 1234567').should be_true
215
+ Phony.plausible?('+994 12 12345').should be_false # too short
216
+ Phony.plausible?('+994 12 12345678').should be_false # too long
217
+ end
218
+
219
+ it "is correct for Albania" do
220
+ Phony.plausible?('+355 85 123456').should be_true
221
+ Phony.plausible?('+355 85 12345').should be_false # too short
222
+ Phony.plausible?('+355 85 1234567').should be_false # too long
223
+ end
224
+
225
+ it "is correct for Angola" do
226
+ Phony.plausible?('+244 852 123 456').should be_true
227
+ Phony.plausible?('+244 852 123').should be_false # too short
228
+ Phony.plausible?('+244 852 123 4567').should be_false # too long
229
+ end
230
+
231
+ it "is correct for Andorra" do
232
+ Phony.plausible?('+376 712345').should be_true
233
+ Phony.plausible?('+376 71234').should be_false # too short
234
+ Phony.plausible?('+376 7123456').should be_false # too long
235
+ Phony.plausible?('+376 712345').should be_true
236
+ Phony.plausible?('+376 71234').should be_false # too short
237
+ Phony.plausible?('+376 7123456').should be_false # too long
238
+ end
239
+
240
+ it "is correct for Netherlands Antilles" do
241
+ Phony.plausible?('+599 1234567').should be_true
242
+ Phony.plausible?('+599 123456').should be_false # too short
243
+ Phony.plausible?('+599 12345678').should be_false # too long
244
+ end
245
+
246
+ it "is correct for Armenia" do
247
+ Phony.plausible?('+374 12345678').should be_true
248
+ Phony.plausible?('+374 1234567').should be_false # too short
249
+ Phony.plausible?('+374 123456789').should be_false # too long
250
+ end
251
+
252
+ it "is correct for Aruba" do
253
+ Phony.plausible?('+297 52 1234').should be_true
254
+ Phony.plausible?('+297 52 123').should be_false # too short
255
+ Phony.plausible?('+297 52 12345').should be_false # too long
256
+ end
257
+
258
+ it 'is correct for Bangladesh' do
259
+ Phony.plausible?('+880 2 1234567').should be_true
260
+ Phony.plausible?('+880 2 12345678').should be_false # too long
261
+ Phony.plausible?('+880 2 123456').should be_false # too short
262
+
263
+ Phony.plausible?('+880 9020 12345').should be_true
264
+ Phony.plausible?('+880 9020 123456').should be_false # too long
265
+ Phony.plausible?('+880 9020 1234').should be_false # too short
266
+
267
+ # ndc with several subscriber number length
268
+ Phony.plausible?('+880 3035 1234').should be_true
269
+ Phony.plausible?('+880 3035 123').should be_true
270
+ Phony.plausible?('+880 3035 12').should be_false # too short
271
+ Phony.plausible?('+880 3035 12345').should be_false # too long
272
+ end
273
+
274
+ it 'is correct for Bahrain' do
275
+ Phony.plausible?('+973 1234 5678').should be_true
276
+ Phony.plausible?('+973 1234 567').should be_false # too short
277
+ Phony.plausible?('+973 1234 56789').should be_false # too long
278
+ end
279
+
280
+ it 'is correct for Belarus' do
281
+ Phony.plausible?('+375 152 123456').should be_true
282
+ Phony.plausible?('+375 152 12345').should be_false # too short
283
+ Phony.plausible?('+375 152 1234567').should be_false # too long
284
+
285
+ Phony.plausible?('+375 800 123').should be_true
286
+ Phony.plausible?('+375 800 1234').should be_true
287
+ Phony.plausible?('+375 800 1234567').should be_true
288
+ Phony.plausible?('+375 800 123456').should be_false
289
+ Phony.plausible?('+375 800 12345678').should be_false
290
+ end
291
+
292
+ it_is_correct_for 'Belize', :samples => '+501 205 1234'
293
+ it_is_correct_for 'Benin', :samples => '+229 1234 5678'
294
+ it_is_correct_for 'Bolivia', :samples => '+591 2 277 2266'
295
+ it_is_correct_for 'Botswana', :samples => ['+267 80 123 456',
296
+ '+267 29 567 89',
297
+ '+267 463 4567',
298
+ '+267 58 123 45',
299
+ '+267 7 6712 345',
300
+ '+267 8 1234 567']
301
+ it_is_correct_for 'Colombia', :samples => ['+57 1 123 4567', '+57 310 123 4567']
302
+ it_is_correct_for 'Philippines', :samples => [['+63 2 1234567', '+63 2 1234567890'],
303
+ '+63 88 1234567',
304
+ ['+63 920 123456', '+63 920 1234567']]
305
+
306
+ it_is_correct_for 'Pakistan', :samples => ['+92 21 1234 5678',
307
+ '+92 22 1234 567',
308
+ '+92 232 123 456',
309
+ '+92 30 1234 5678']
310
+ it_is_correct_for 'Bhutan (Kingdom of)', :samples => '+975 2 889 648'
311
+ it_is_correct_for 'Brunei Darussalam', :samples => '+673 5 523 876'
312
+ it_is_correct_for 'Burkina Faso', :samples => '+226 1476 2312'
313
+ it_is_correct_for 'Burundi', :samples => '+257 1234 5678'
314
+ it_is_correct_for 'Cameroon', :samples => '+237 7372 8186'
315
+ it_is_correct_for 'Cape Verde', :samples => '+238 642 3843'
316
+ it_is_correct_for 'Central African Republic', :samples => '+236 1234 5678'
317
+ it_is_correct_for 'Chad', :samples => '+235 1234 5678'
318
+ it_is_correct_for 'Comoros', :samples => ['+269 3901 234', '+269 3401 234']
319
+ it_is_correct_for 'Congo', :samples => '+242 1234 56789'
320
+ it_is_correct_for 'Cook Islands', :samples => '+682 71928'
321
+ it_is_correct_for 'Costa Rica', :samples => '+506 2 234 5678'
322
+ it_is_correct_for "Côte d'Ivoire", :samples => '+225 9358 8764'
323
+ it_is_correct_for 'Democratic Republic of Timor-Leste', :samples => ['+670 465 7886', '+670 7465 7886']
324
+ it_is_correct_for 'Democratic Republic of the Congo', :samples => '+243 8 864 9794'
325
+ it_is_correct_for 'Diego Garcia', :samples => '+246 123 7686'
326
+ it_is_correct_for 'Djibouti', :samples => '+253 3671 1431'
327
+ it_is_correct_for 'Ecuador', :samples => '+593 68 467 4579'
328
+ it_is_correct_for 'Equatorial Guinea', :samples => ['+240 222 201 123',
329
+ '+240 335 201 123']
330
+ it_is_correct_for 'Eritrea', :samples => '+291 6 334 475'
331
+ it_is_correct_for 'Ethiopia', :samples => '+251 89 558 3197'
332
+ it_is_correct_for 'Falkland Islands (Malvinas)', :samples => '+500 28494'
333
+ it_is_correct_for 'Faroe Islands', :samples => '+298 969 597'
334
+ it_is_correct_for 'Fiji (Republic of)', :samples => '+679 998 2441'
335
+ it_is_correct_for 'French Guiana (French Department of)', :samples => '+594 594 123 456'
336
+ it_is_correct_for "French Polynesia (Territoire français d'outre-mer)", :samples => '+689 872 784'
337
+ it_is_correct_for 'Gabonese Republic', :samples => '+241 1 627 739'
338
+ it_is_correct_for 'Gambia', :samples => '+220 989 5148'
339
+ it_is_correct_for 'Georgia', :samples => ['+995 220 123 45',
340
+ '+995 32 123 4567',
341
+ '+995 342 123 456',
342
+ '+995 596 123 456']
343
+ it_is_correct_for 'Greece', :samples => ['+30 21 4234 5678',
344
+ '+30 24 4234 5678',
345
+ '+30 50 3457 1234',
346
+ '+30 69 0123 4567',
347
+ '+30 70 0123 4567',
348
+ '+30 800 100 1234',
349
+ '+30 801 100 1234',
350
+ '+30 807 100 1234',
351
+ '+30 896 100 1234',
352
+ '+30 901 123 4565',
353
+ '+30 909 123 4565']
354
+ it_is_correct_for 'Greenland', :samples => '+299 922 954'
355
+ it_is_correct_for 'Guadeloupe (French Department of)', :samples => '+590 123 456 789'
356
+ it_is_correct_for 'Guatemala (Republic of)', :samples => ['+502 19 123 456 789',
357
+ '+502 2 123 4567']
358
+ it_is_correct_for 'Guinea', :samples => '+224 1234 5678'
359
+ it_is_correct_for 'Guinea-Bissau', :samples => '+245 728 6998'
360
+ it_is_correct_for 'Guyana', :samples => '+592 263 1234'
361
+ it_is_correct_for 'Honduras (Republic of)', :samples => '+504 12 961 637'
362
+ it_is_correct_for 'Indonesia', :samples => ['+62 13 123',
363
+ '+62 13 123 456',
364
+ '+62 174 12',
365
+ '+62 174 12 345',
366
+ '+62 177 12',
367
+ '+62 177 1212 3456',
368
+ '+62 178 123',
369
+ '+62 178 123 45',
370
+ '+62 21 123 45',
371
+ '+62 21 1234 5567',
372
+ '+62 22 123 45',
373
+ '+62 22 123 4567',
374
+ '+62 4 311 234',
375
+ '+62 4 3112 3456',
376
+ ['+62 6 221 2345', '+62 6 2212 3456'],
377
+ '+62 70 123 456',
378
+ ['+62 71 123 456', '+62 71 123 4567'],
379
+ '+62 810 123 456',
380
+ '+62 810 1234 5678',
381
+ '+62 820 123 456',
382
+ '+62 870 123 45',
383
+ '+62 877 123 456',
384
+ '+62 881 123 456',
385
+ '+62 881 1234 5656',
386
+ '+62 9 1234 567',
387
+ '+62 9 123 456 789']
388
+ it_is_correct_for 'Iraq', :samples => ['+964 1 123 4567',
389
+ '+964 21 113 456',
390
+ '+964 71 1234 5678']
391
+ it_is_correct_for 'Japan', :samples => ['+81 3 1234 5678',
392
+ '+81 120 123 456',
393
+ '+81 11 1234 567',
394
+ '+81 123 123 456',
395
+ '+81 1267 123 45',
396
+ '+81 90 1234 5678']
397
+ it_is_correct_for 'Jordan (Hashemite Kingdom of)', :samples => ['+962 800 123 45',
398
+ '+962 2 620 1234',
399
+ '+962 7 1234 5678',
400
+ '+962 7 4661 2345',
401
+ '+962 900 123 45',
402
+ '+962 85 123 456',
403
+ '+962 70 123 456',
404
+ '+962 6250 1456',
405
+ '+962 8790 1456']
406
+ it_is_correct_for 'Kiribati (Republic of)', :samples => '+686 31993'
407
+ it_is_correct_for "Democratic People's Republic of Korea", :samples => ['+850 2 123 45',
408
+ '+850 2 123 456 789',
409
+ '+850 2 381 2356',
410
+ #'+850 2 8801 1234 5678 1256',
411
+ '+850 191 123 4567']
412
+ it_is_correct_for 'Kuwait (State of)', :samples => ['+965 2345 6789', '+965 181 2345' ]
413
+ it_is_correct_for 'Kyrgyzstan', :samples => ['+996 312 212 345',
414
+ '+996 315 212 345',
415
+ '+996 3131 212 34',
416
+ '+996 3946 212 34',
417
+ '+996 50 123 4567',
418
+ '+996 52 123 4567',
419
+ '+996 58 123 4567',
420
+ '+996 800 123 456']
421
+ it_is_correct_for "Lao People's Democratic Republic", :samples => ['+856 96 443 333',
422
+ '+856 30 443 3334',
423
+ '+856 20 4433 3334']
424
+ it_is_correct_for 'Latvia', :samples => ['+371 801 234 56',
425
+ '+371 637 234 56',
426
+ '+371 294 123 45']
427
+ it_is_correct_for 'Lebanon', :samples => ['+961 1 123 456',
428
+ '+961 4 123 456',
429
+ '+961 3 123 456',
430
+ '+961 70 123 456',
431
+ '+961 90 123 456',
432
+ '+961 81 123 456']
433
+ it_is_correct_for 'Lesotho', :samples => '+266 7612 6866'
434
+ it_is_correct_for 'Liberia', :samples => [['+231 2 123 4567', '+231 4 123 456']]
435
+ it_is_correct_for 'Madagascar', :samples => ['+261 20 012 345 678',
436
+ '+261 20 124 3456',
437
+ '+261 512 345 678']
438
+ it_is_correct_for 'Malawi', :samples => ['+265 1725 123',
439
+ '+265 213 456 789',
440
+ '+265 9123 456',
441
+ '+265 991 123 456']
442
+ it_is_correct_for 'Maldives (Republic of)', :samples => '+960 928 8399'
443
+ it_is_correct_for 'Mali', :samples => '+223 1117 9812'
444
+
445
+ it 'is correct for Malaysia' do
446
+ Phony.plausible?('+60 14 123 1234').should be_true
447
+ Phony.plausible?('+60 14 1234 1234').should be_false
448
+ Phony.plausible?('+60 14 1234 12').should be_false # too short
449
+ Phony.plausible?('+60 14 1234 12345').should be_false # too long
450
+ end
451
+
452
+ it_is_correct_for 'Marshall Islands (Republic of the)', :samples => '+692 372 7183'
453
+ it_is_correct_for 'Martinique (French Department of)', :samples => '+596 596 123 456'
454
+ it_is_correct_for 'Mauritania', :samples => '+222 1234 5678'
455
+ it_is_correct_for 'Mauritius', :samples => '+230 695 2277'
456
+ it_is_correct_for 'Micronesia (Federated States of)', :samples => '+691 766 7914'
457
+ it_is_correct_for 'Moldova', :samples => ['+373 800 123 45',
458
+ '+373 22 123 345',
459
+ '+373 241 123 45',
460
+ '+373 605 123 45',
461
+ '+373 803 123 45']
462
+ it_is_correct_for 'Montenegro', :samples => ['+382 80 123 456',
463
+ ['+382 20 123 45', '+382 20 123 456'],
464
+ '+382 32 123 456',
465
+ '+382 78 103 456',
466
+ '+382 63 123',
467
+ '+382 63 123 456 7890',
468
+ '+382 77 103 456',
469
+ '+382 94 103 456',
470
+ '+382 88 103 456',
471
+ '+382 68 12',
472
+ '+382 68 12 1234 5678',
473
+ '+382 68 432 163',
474
+ '+382 69 705 542',
475
+ '+382 70 123',
476
+ '+382 70 123 456 7890']
477
+ it_is_correct_for 'Namibia', :samples => ['+264 6751 613 24',
478
+ '+264 67 175 890',
479
+ '+264 63 088 612 345',
480
+ '+264 85 1234 567']
481
+ it_is_correct_for 'Nauru (Republic of)', :samples => '+674 239 8387'
482
+ it_is_correct_for 'Nepal', :samples => ['+977 1 434 5678',
483
+ '+977 10 123 456',
484
+ '+977 98 1234 5678']
485
+ it_is_correct_for "New Caledonia (Territoire français d'outre-mer)", :samples => '+687 546 835'
486
+ it_is_correct_for 'Nicaragua', :samples => '+505 12 345 678'
487
+ it_is_correct_for 'Niger', :samples => '+227 1234 5678'
488
+ it_is_correct_for 'Niue', :samples => '+683 3791'
489
+ it_is_correct_for 'Oman', :samples => ['+968 24 423 123',
490
+ '+968 25 423 123']
491
+ it_is_correct_for 'Palau (Republic of)', :samples => '+680 483 7871'
492
+ it_is_correct_for 'Panama (Republic of)', :samples => ['+507 800 1234',
493
+ '+507 6 123 4567',
494
+ '+507 2 123 456']
495
+ it_is_correct_for 'Papua New Guinea', :samples => ['+675 3 123 567',
496
+ '+675 180 1234',
497
+ '+675 80 123 456',
498
+ '+675 91 123 456',
499
+ '+675 16 123 45',
500
+ '+675 184 1234 5678',
501
+ '+675 170 12',
502
+ '+675 189 1',
503
+ '+675 270 1234',
504
+ '+675 275 1234',
505
+ '+675 279 12',
506
+ '+675 115 1234 5678']
507
+ it_is_correct_for 'Paraguay (Republic of)', :samples => [['+595 21 123 456', '+595 21 123 4567'],
508
+ '+595 345 123 456',
509
+ '+595 96 161 1234']
510
+ it_is_correct_for 'Qatar', :samples => ['+974 1245 123 456',
511
+ '+974 26 134 56',
512
+ '+974 33 123 456',
513
+ '+974 44 412 456',
514
+ '+974 800 12 34',
515
+ '+974 900 12 34',
516
+ '+974 92 123',
517
+ '+974 97 123']
518
+ it_is_correct_for 'Reunion / Mayotte (new)', :samples => '+262 29527 69649'
519
+ it_is_correct_for 'Saint Helena', :samples => '+290 5134'
520
+ it_is_correct_for 'Saint Pierre and Miquelon (Collectivité territoriale de la République française)', :samples => '+508 474 714'
521
+ it_is_correct_for 'Samoa (Independent State of)', :samples => ['+685 800 123',
522
+ '+685 61 123',
523
+ '+685 721 2345',
524
+ '+685 830 123',
525
+ '+685 601 234',
526
+ '+685 841 2345']
527
+ it_is_correct_for 'San Marino', :samples => ['+378 800 123',
528
+ '+378 800 123 4567',
529
+ '+378 012 345',
530
+ '+378 012 345 6789',
531
+ '+378 512 345',
532
+ '+378 512 345 6789']
533
+ it_is_correct_for 'Sao Tome and Principe', :samples => ['+239 2 220 012',
534
+ '+239 9 920 012']
535
+ it_is_correct_for 'Saudi Arabia (Kingdom of)', :samples => '+966 5 296 3727'
536
+ it_is_correct_for 'Senegal', :samples => '+221 1234 56789'
537
+ it_is_correct_for 'Serbia', :samples => ['+381 800 123 45',
538
+ ['+381 10 123 45', '+381 10 123 456'],
539
+ ['+381 11 123 456', '+381 11 123 4567'],
540
+ '+381 72 123 456',
541
+ '+381 60 123',
542
+ '+381 60 123 4567',
543
+ '+381 42 123 456',
544
+ '+381 9 123 4567',
545
+ '+381 60 123',
546
+ '+381 60 123 456 7890',
547
+ '+381 70 123 456']
548
+ it_is_correct_for 'Sierra Leone', :samples => '+232 42 393 972'
549
+ it_is_correct_for 'Solomon Islands', :samples => '+677 97851'
550
+ it_is_correct_for 'Somali Democratic Republic', :samples => ['+252 1034 123 45',
551
+ '+252 1313 123',
552
+ '+252 160 12 34',
553
+ '+252 500 123 45',
554
+ '+252 67 1234 567']
555
+ it_is_correct_for 'South Sudan', :samples => ['+211 123 212 345',
556
+ '+211 973 212 345']
557
+ it_is_correct_for 'Suriname (Republic of)', :samples => ['+597 212 345', '+597 612 3456']
558
+ it_is_correct_for 'Swaziland', :samples => ['+268 2207 1234', '+268 550 1234']
559
+ it_is_correct_for 'Syrian Arab Republic', :samples => ['+963 11 123 4567',
560
+ '+963 31 123 4567',
561
+ '+963 15 731 234',
562
+ '+963 9 1234 5678']
563
+ it_is_correct_for 'Taiwan', :samples => ['+886 18 123 456',
564
+ '+886 612 123 4567',
565
+ '+886 2 1234 5678',
566
+ '+886 3 123 4567',
567
+ '+886 33 123 456',
568
+ '+886 827 123 45',
569
+ '+886 412 1234',
570
+ ['+886 90 123 456', '+886 90 123 4567'],
571
+ '+886 94 991 345']
572
+ it_is_correct_for 'Tajikistan', :samples => ['+992 3130 123 45',
573
+ '+992 331700 123',
574
+ '+992 372 123 345',
575
+ '+992 505 123 456',
576
+ '+992 973 123 456',
577
+ '+992 474 456 123']
578
+ it_is_correct_for 'Thailand', :samples => ['+6621231234',
579
+ '+6636123123',
580
+ '+66851234567']
581
+ it_is_correct_for 'Togolese Republic', :samples => '+228 1234 5678'
582
+ it_is_correct_for 'Tokelau', :samples => '+690 3 291'
583
+ it_is_correct_for 'Tonga (Kingdom of)', :samples => ['+676 20 123',
584
+ '+676 84 123',
585
+ '+676 77 123 45',
586
+ '+676 89 123 45']
587
+ it_is_correct_for 'Turkmenistan', :samples => ['+993 12 456 789',
588
+ '+993 131 456 78',
589
+ '+993 1392 4567',
590
+ '+993 6 123 4567']
591
+ it_is_correct_for 'Tuvalu', :samples => '+688 93742'
592
+ it_is_correct_for 'Uzbekistan (Republic of)', :samples => '+998 78 867 4419'
593
+ it_is_correct_for 'Vanuatu (Republic of)', :samples => ['+678 7216 123', '+678 26 123']
594
+ it_is_correct_for 'Lybia', :samples => ['+218 205 123 45',
595
+ '+218 22 123 456',
596
+ '+218 21 1234 456',
597
+ '+218 91 1234 456']
598
+ it_is_correct_for 'Mongolia', :samples => ['+976 11 123 45',
599
+ ['+976 121 12 34', '+976 121 12 345'],
600
+ '+976 70 123 456',
601
+ '+976 75 123 456',
602
+ '+976 88 123 456',
603
+ '+976 50 123 456']
604
+ it_is_correct_for 'Mozambique', :samples => ['+258 600 123 456',
605
+ '+258 251 123 45',
606
+ '+258 82 1234 456',
607
+ '+258 7 1234 4567']
608
+ it_is_correct_for 'Ukraine', :samples => ['+380 800 123 456',
609
+ '+380 312 123 456',
610
+ '+380 32 2123 456',
611
+ '+380 3259 123 45',
612
+ '+380 32606 1234',
613
+ '+380 981 234 567']
614
+ it_is_correct_for 'United Arab Emirates', :samples => ['+971 800 12',
615
+ '+971 800 12 345 6789',
616
+ '+971 2 123 4567',
617
+ '+971 50 641 2345',
618
+ '+971 600 641 234',
619
+ '+971 500 641 234',
620
+ '+971 200 641 234']
621
+ it_is_correct_for 'Uruguay (Eastern Republic of)', :samples => ['+598 800 123 45',
622
+ '+598 2 012 3456',
623
+ '+598 21 123 456',
624
+ '+598 909 123 45',
625
+ '+598 93 123 456',
626
+ '+598 908 123 45',
627
+ '+598 805 123 45']
628
+ it_is_correct_for 'Yemen', :samples => [['+967 1 234 567', '+967 1 234 5678'],
629
+ '+967 7 234 567',
630
+ '+967 77 123 4567',
631
+ '+967 58 1234']
632
+ it_is_correct_for 'Zimbabwe', :samples => [['+263 2582 123 456', '+263 2582 123'],
633
+ ['+263 147 123 456', '+263 147 123'],
634
+ ['+263 270 123 456', '+263 270 123 45'],
635
+ '+263 86 1235 4567']
636
+
105
637
  end
106
638
 
107
639
  end