phony 1.9.0 → 2.19.14

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 (82) hide show
  1. checksums.yaml +7 -0
  2. data/README.textile +64 -112
  3. data/lib/phony/config.rb +91 -0
  4. data/lib/phony/countries/argentina.rb +355 -0
  5. data/lib/phony/countries/austria.rb +56 -22
  6. data/lib/phony/countries/bangladesh.rb +57 -0
  7. data/lib/phony/countries/belarus.rb +133 -0
  8. data/lib/phony/countries/brazil.rb +101 -95
  9. data/lib/phony/countries/cambodia.rb +131 -0
  10. data/lib/phony/countries/china.rb +13 -6
  11. data/lib/phony/countries/croatia.rb +23 -0
  12. data/lib/phony/countries/georgia.rb +94 -0
  13. data/lib/phony/countries/germany.rb +66 -42
  14. data/lib/phony/countries/guinea.rb +46 -0
  15. data/lib/phony/countries/india.rb +50 -0
  16. data/lib/phony/countries/indonesia.rb +55 -0
  17. data/lib/phony/countries/ireland.rb +35 -28
  18. data/lib/phony/countries/italy.rb +272 -166
  19. data/lib/phony/countries/japan.rb +468 -0
  20. data/lib/phony/countries/kyrgyzstan.rb +120 -0
  21. data/lib/phony/countries/latvia.rb +43 -0
  22. data/lib/phony/countries/libya.rb +116 -0
  23. data/lib/phony/countries/malaysia.rb +31 -7
  24. data/lib/phony/countries/moldova.rb +53 -0
  25. data/lib/phony/countries/montenegro.rb +30 -0
  26. data/lib/phony/countries/myanmar.rb +55 -0
  27. data/lib/phony/countries/namibia.rb +37 -0
  28. data/lib/phony/countries/nepal.rb +73 -0
  29. data/lib/phony/countries/netherlands.rb +17 -5
  30. data/lib/phony/countries/pakistan.rb +121 -0
  31. data/lib/phony/countries/paraguay.rb +147 -0
  32. data/lib/phony/countries/{russia_kazakhstan_abhasia_south_osetia.rb → russia_kazakhstan_abkhasia_south_ossetia.rb} +35 -24
  33. data/lib/phony/countries/saudi_arabia.rb +40 -0
  34. data/lib/phony/countries/serbia.rb +47 -0
  35. data/lib/phony/countries/somalia.rb +26 -0
  36. data/lib/phony/countries/south_korea.rb +19 -10
  37. data/lib/phony/countries/sweden.rb +58 -38
  38. data/lib/phony/countries/taiwan.rb +28 -0
  39. data/lib/phony/countries/tajikistan.rb +79 -0
  40. data/lib/phony/countries/turkmenistan.rb +76 -0
  41. data/lib/phony/countries/ukraine.rb +630 -0
  42. data/lib/phony/countries/united_kingdom.rb +639 -44
  43. data/lib/phony/countries/uruguay.rb +53 -0
  44. data/lib/phony/countries/vietnam.rb +133 -0
  45. data/lib/phony/countries/zimbabwe.rb +39 -0
  46. data/lib/phony/countries.rb +901 -301
  47. data/lib/phony/country.rb +177 -20
  48. data/lib/phony/country_codes.rb +119 -101
  49. data/lib/phony/dsl.rb +113 -68
  50. data/lib/phony/local_splitters/fixed.rb +25 -1
  51. data/lib/phony/local_splitters/regex.rb +16 -2
  52. data/lib/phony/national_code.rb +7 -7
  53. data/lib/phony/national_splitters/default.rb +35 -3
  54. data/lib/phony/national_splitters/dsl.rb +12 -7
  55. data/lib/phony/national_splitters/fixed.rb +7 -1
  56. data/lib/phony/national_splitters/none.rb +7 -3
  57. data/lib/phony/national_splitters/regex.rb +6 -0
  58. data/lib/phony/national_splitters/variable.rb +13 -9
  59. data/lib/phony/trunk_code.rb +57 -0
  60. data/lib/phony/vanity.rb +3 -3
  61. data/lib/phony.rb +239 -55
  62. data/spec/functional/config_spec.rb +44 -0
  63. data/spec/functional/plausibility_spec.rb +656 -0
  64. data/spec/lib/phony/countries_spec.rb +1207 -119
  65. data/spec/lib/phony/country_codes_spec.rb +99 -81
  66. data/spec/lib/phony/country_spec.rb +54 -14
  67. data/spec/lib/phony/dsl_spec.rb +2 -2
  68. data/spec/lib/phony/local_splitters/fixed_spec.rb +4 -4
  69. data/spec/lib/phony/local_splitters/regex_spec.rb +50 -2
  70. data/spec/lib/phony/national_code_spec.rb +34 -34
  71. data/spec/lib/phony/national_splitters/default_spec.rb +34 -0
  72. data/spec/lib/phony/national_splitters/fixed_spec.rb +12 -6
  73. data/spec/lib/phony/national_splitters/none_spec.rb +13 -3
  74. data/spec/lib/phony/national_splitters/regex_spec.rb +1 -1
  75. data/spec/lib/phony/national_splitters/variable_spec.rb +11 -5
  76. data/spec/lib/phony/trunk_code_spec.rb +85 -0
  77. data/spec/lib/phony/vanity_spec.rb +15 -19
  78. data/spec/lib/phony_spec.rb +59 -277
  79. metadata +67 -34
  80. data/lib/phony/validator.rb +0 -26
  81. data/lib/phony/validators.rb +0 -88
  82. data/spec/lib/phony/validations_spec.rb +0 -109
@@ -0,0 +1,468 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Japan
4
+ # http://www.itu.int/oth/T020200006D/en
5
+
6
+ ndcs_with_8_subscriber_numbers = %w(3 6)
7
+
8
+ ndcs_with_7_subscriber_numbers = %w(
9
+ 11
10
+ 15
11
+ 17
12
+ 18
13
+ 19
14
+ 22
15
+ 23
16
+ 24
17
+ 25
18
+ 26
19
+ 27
20
+ 28
21
+ 29
22
+ 42
23
+ 43
24
+ 44
25
+ 45
26
+ 46
27
+ 47
28
+ 48
29
+ 49
30
+ 52
31
+ 53
32
+ 54
33
+ 55
34
+ 58
35
+ 59
36
+ 72
37
+ 73
38
+ 75
39
+ 76
40
+ 77
41
+ 78
42
+ 79
43
+ 82
44
+ 83
45
+ 84
46
+ 86
47
+ 87
48
+ 88
49
+ 89
50
+ 92
51
+ 93
52
+ 95
53
+ 96
54
+ 97
55
+ 98
56
+ 99
57
+ )
58
+
59
+ ndcs_with_6_subscriber_numbers = %w(
60
+ 123
61
+ 124
62
+ 125
63
+ 126
64
+ 133
65
+ 134
66
+ 135
67
+ 136
68
+ 137
69
+ 138
70
+ 139
71
+ 142
72
+ 143
73
+ 144
74
+ 145
75
+ 146
76
+ 152
77
+ 153
78
+ 154
79
+ 155
80
+ 156
81
+ 157
82
+ 158
83
+ 162
84
+ 163
85
+ 164
86
+ 165
87
+ 166
88
+ 167
89
+ 172
90
+ 173
91
+ 174
92
+ 175
93
+ 176
94
+ 178
95
+ 179
96
+ 182
97
+ 183
98
+ 184
99
+ 185
100
+ 186
101
+ 187
102
+ 191
103
+ 192
104
+ 193
105
+ 194
106
+ 195
107
+ 197
108
+ 198
109
+ 220
110
+ 223
111
+ 224
112
+ 225
113
+ 226
114
+ 228
115
+ 229
116
+ 233
117
+ 234
118
+ 235
119
+ 237
120
+ 238
121
+ 240
122
+ 241
123
+ 242
124
+ 243
125
+ 244
126
+ 246
127
+ 247
128
+ 248
129
+ 250
130
+ 254
131
+ 255
132
+ 256
133
+ 257
134
+ 258
135
+ 259
136
+ 260
137
+ 261
138
+ 263
139
+ 264
140
+ 265
141
+ 266
142
+ 267
143
+ 268
144
+ 269
145
+ 270
146
+ 274
147
+ 276
148
+ 277
149
+ 278
150
+ 279
151
+ 280
152
+ 282
153
+ 283
154
+ 284
155
+ 285
156
+ 287
157
+ 288
158
+ 289
159
+ 291
160
+ 293
161
+ 294
162
+ 295
163
+ 296
164
+ 297
165
+ 299
166
+ 422
167
+ 428
168
+ 436
169
+ 438
170
+ 439
171
+ 460
172
+ 463
173
+ 465
174
+ 466
175
+ 467
176
+ 470
177
+ 475
178
+ 476
179
+ 478
180
+ 479
181
+ 480
182
+ 493
183
+ 494
184
+ 495
185
+ 531
186
+ 532
187
+ 533
188
+ 536
189
+ 537
190
+ 538
191
+ 539
192
+ 544
193
+ 545
194
+ 547
195
+ 548
196
+ 550
197
+ 551
198
+ 553
199
+ 554
200
+ 555
201
+ 556
202
+ 557
203
+ 558
204
+ 561
205
+ 562
206
+ 563
207
+ 564
208
+ 565
209
+ 566
210
+ 567
211
+ 568
212
+ 569
213
+ 572
214
+ 573
215
+ 574
216
+ 575
217
+ 576
218
+ 577
219
+ 578
220
+ 581
221
+ 584
222
+ 585
223
+ 586
224
+ 587
225
+ 594
226
+ 595
227
+ 596
228
+ 597
229
+ 598
230
+ 599
231
+ 721
232
+ 725
233
+ 735
234
+ 736
235
+ 737
236
+ 738
237
+ 739
238
+ 740
239
+ 742
240
+ 743
241
+ 744
242
+ 745
243
+ 746
244
+ 747
245
+ 748
246
+ 749
247
+ 761
248
+ 763
249
+ 765
250
+ 766
251
+ 767
252
+ 768
253
+ 770
254
+ 771
255
+ 772
256
+ 773
257
+ 774
258
+ 776
259
+ 778
260
+ 779
261
+ 790
262
+ 791
263
+ 794
264
+ 795
265
+ 796
266
+ 797
267
+ 798
268
+ 799
269
+ 820
270
+ 823
271
+ 824
272
+ 826
273
+ 827
274
+ 829
275
+ 833
276
+ 834
277
+ 835
278
+ 836
279
+ 837
280
+ 838
281
+ 845
282
+ 846
283
+ 847
284
+ 848
285
+ 852
286
+ 853
287
+ 854
288
+ 855
289
+ 856
290
+ 857
291
+ 858
292
+ 859
293
+ 863
294
+ 865
295
+ 866
296
+ 867
297
+ 868
298
+ 869
299
+ 875
300
+ 877
301
+ 879
302
+ 880
303
+ 883
304
+ 884
305
+ 885
306
+ 887
307
+ 889
308
+ 892
309
+ 893
310
+ 894
311
+ 895
312
+ 896
313
+ 897
314
+ 898
315
+ 920
316
+ 930
317
+ 940
318
+ 942
319
+ 943
320
+ 944
321
+ 946
322
+ 947
323
+ 948
324
+ 949
325
+ 950
326
+ 952
327
+ 954
328
+ 955
329
+ 956
330
+ 957
331
+ 959
332
+ 964
333
+ 965
334
+ 966
335
+ 967
336
+ 968
337
+ 969
338
+ 972
339
+ 973
340
+ 974
341
+ 977
342
+ 978
343
+ 979
344
+ 980
345
+ 982
346
+ 983
347
+ 984
348
+ 985
349
+ 986
350
+ 987
351
+ 993
352
+ 994
353
+ 995
354
+ 996
355
+ 997
356
+ )
357
+
358
+ ndcs_with_5_subscriber_numbers = %w(
359
+ 1267
360
+ 1372
361
+ 1374
362
+ 1377
363
+ 1392
364
+ 1397
365
+ 1398
366
+ 1456
367
+ 1457
368
+ 1466
369
+ 1547
370
+ 1558
371
+ 1564
372
+ 1586
373
+ 1587
374
+ 1632
375
+ 1634
376
+ 1635
377
+ 1648
378
+ 1654
379
+ 1655
380
+ 1656
381
+ 1658
382
+ 4992
383
+ 4994
384
+ 4996
385
+ 4998
386
+ 5769
387
+ 5979
388
+ 7468
389
+ 8387
390
+ 8388
391
+ 8396
392
+ 8477
393
+ 8512
394
+ 8514
395
+ 9496
396
+ 9802
397
+ 9912
398
+ 9913
399
+ 9969
400
+ )
401
+
402
+ Phony.define do
403
+ country '81',
404
+ trunk('0', normalize: true, format: true, split: true) |
405
+ one_of(%w(20 50 60 70 90)) >> split(4,4) | # mobile, VoIP telephony
406
+ match(/\A(597)9[0178]\d+\z/) >> split(2,4) |
407
+ one_of(ndcs_with_5_subscriber_numbers) >> split(1,4) |
408
+ match(/\A(4)70[019]\d+\z/) >> split(4,4) |
409
+ match(/\A(4)71\d+\z/) >> split(4,4) |
410
+ match(/\A(4)20\d+\z/) >> split(4,4) |
411
+ match(/\A(4)29[02-69]\d+\z/) >> split(4,4) |
412
+ match(/\A(15)4[018]\d+\z/) >> split(3,4) |
413
+ match(/\A(22)3[014-9]\d+\z/) >> split(3,4) |
414
+ match(/\A(25)[04][01]\d+\z/) >> split(3,4) |
415
+ match(/\A(25)5[0-69]\d+\z/) >> split(3,4) |
416
+ match(/\A(25)[68][01]\d+\z/) >> split(3,4) |
417
+ match(/\A(25)7[015-9]\d+\z/) >> split(3,4) |
418
+ match(/\A(25)917\d+\z/) >> split(3,4) |
419
+ match(/\A(25)999\d+\z/) >> split(3,4) |
420
+ match(/\A(26)4[016-9]\d+\z/) >> split(3,4) |
421
+ match(/\A(28)3[0134]\d+\z/) >> split(3,4) |
422
+ match(/\A(28)9[0-5]\d+\z/) >> split(3,4) |
423
+ match(/\A(29)17\d+\z/) >> split(3,4) |
424
+ match(/\A(29)3[015-9]\d+\z/) >> split(3,4) |
425
+ match(/\A(42)21\d+\z/) >> split(3,4) |
426
+ match(/\A(42)8[01456]\d+\z/) >> split(3,4) |
427
+ match(/\A(47)5[019]\d+\z/) >> split(3,4) |
428
+ match(/\A(47)9[019]\d+\z/) >> split(3,4) |
429
+ match(/\A(59)8[019]\d+\z/) >> split(3,4) |
430
+ match(/\A(59)9[01]\d+\z/) >> split(3,4) |
431
+ match(/\A(79)4[0-59]\d+\z/) >> split(3,4) |
432
+ match(/\A(79)5[01569]\d+\z/) >> split(3,4) |
433
+ match(/\A(79)6[0167]\d+\z/) >> split(3,4) |
434
+ match(/\A(82)4[0-39]\d+\z/) >> split(3,4) |
435
+ match(/\A(82)9[019]\d+\z/) >> split(3,4) |
436
+ match(/\A(82)92[1-9]\d+\z/) >> split(3,4) |
437
+ match(/\A(82)94[1-3]\d+\z/) >> split(3,4) |
438
+ match(/\A(82)96[0-47-9]\d+\z/) >> split(3,4) |
439
+ match(/\A(82)965[01346-9]\d+\z/) >> split(3,4) |
440
+ match(/\A(82)966[1-9]\d+\z/) >> split(3,4) |
441
+ match(/\A(83)76[6-8]\d+\z/) >> split(3,4) |
442
+ match(/\A(83)7[01789]\d+\z/) >> split(3,4) |
443
+ match(/\A(83)8[01]\d+\z/) >> split(3,4) |
444
+ match(/\A(86)36[23]\d+\z/) >> split(3,4) |
445
+ match(/\A(86)5[0-389]\d+\z/) >> split(3,4) |
446
+ match(/\A(86)55[23]\d+\z/) >> split(3,4) |
447
+ match(/\A(86)[01]\d+\z/) >> split(3,4) |
448
+ match(/\A(86)9[178]\d+\z/) >> split(3,4) |
449
+ match(/\A(86)72\d+\z/) >> split(3,4) |
450
+ match(/\A(86)8[019]\d+\z/) >> split(3,4) |
451
+ match(/\A(86)9[0145]\d+\z/) >> split(3,4) |
452
+ match(/\A(86)99[014-9]\d+\z/) >> split(3,4) |
453
+ match(/\A(99)331\d+\z/) >> split(3,4) |
454
+ match(/\A(99)34[357]\d+\z/) >> split(3,4) |
455
+ match(/\A(99)4[0178]\d+\z/) >> split(3,4) |
456
+ one_of(ndcs_with_6_subscriber_numbers) >> split(2,4) |
457
+ one_of(%w(120)) >> split(3,3) | # freephone
458
+ one_of(%w(800)) >> split(3,4) | # freephone
459
+ one_of(%w(180 570)) >> split(3,3) | # Tele-gong/Tele-dome, Navi-dial
460
+ one_of(%w(170 990)) >> split(2,4) | # Dengon-dial, Dial Q2 (discontinued)
461
+ one_of(%w(80)) >> split(4,4) | # mobile
462
+ one_of(ndcs_with_7_subscriber_numbers) >> split(3,4) |
463
+ one_of(ndcs_with_8_subscriber_numbers) >> split(4,4) |
464
+ # TODO: 91(NDC) N(S)N length: 5-13 - Non-geographic number (Direct subscriber telephone service (legacy))
465
+ fixed(2) >> split(4,4),
466
+ local_space: :-,
467
+ space: :-
468
+ end
@@ -0,0 +1,120 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Kyrgyz Republic
4
+ # https://www.numberingplans.com/?page=dialling&sub=areacodes
5
+ # https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=KG
6
+
7
+ ndcs_with_6_subscriber_digits = %w(312 315)
8
+
9
+ ndcs_with_5_subscriber_digits = %w(
10
+ 3131
11
+ 3132
12
+ 3133
13
+ 3134
14
+ 3135
15
+ 3137
16
+ 3138
17
+ 3147
18
+ 3161
19
+ 3162
20
+ 3163
21
+ 3164
22
+ 3165
23
+ 3166
24
+ 3167
25
+ 3168
26
+ 3222
27
+ 3230
28
+ 3231
29
+ 3232
30
+ 3233
31
+ 3234
32
+ 3237
33
+ 3239
34
+ 3261
35
+ 3262
36
+ 3263
37
+ 3264
38
+ 3265
39
+ 3266
40
+ 3267
41
+ 3422
42
+ 3456
43
+ 3457
44
+ 3458
45
+ 3459
46
+ 3461
47
+ 3462
48
+ 3463
49
+ 3464
50
+ 3522
51
+ 3534
52
+ 3535
53
+ 3536
54
+ 3537
55
+ 3559
56
+ 3561
57
+ 3562
58
+ 3563
59
+ 3564
60
+ 3565
61
+ 3622
62
+ 3653
63
+ 3655
64
+ 3656
65
+ 3657
66
+ 3661
67
+ 3662
68
+ 3663
69
+ 3722
70
+ 3734
71
+ 3736
72
+ 3738
73
+ 3741
74
+ 3742
75
+ 3743
76
+ 3744
77
+ 3745
78
+ 3746
79
+ 3747
80
+ 3748
81
+ 3759
82
+ 3761
83
+ 3762
84
+ 3763
85
+ 3764
86
+ 3765
87
+ 3766
88
+ 3767
89
+ 3768
90
+ 3769
91
+ 3775
92
+ 3776
93
+ 3777
94
+ 3922
95
+ 3941
96
+ 3942
97
+ 3943
98
+ 3944
99
+ 3945
100
+ 3946
101
+ 3947
102
+ 3961
103
+ 3962
104
+ 3963
105
+ 3964
106
+ 3965
107
+ 3966
108
+ 3967
109
+ 3968
110
+ )
111
+
112
+ Phony.define do
113
+ country '996',
114
+ one_of(ndcs_with_5_subscriber_digits) >> split(3,2) |
115
+ one_of(ndcs_with_6_subscriber_digits) >> split(3,3) |
116
+ one_of(%w(800)) >> split(3,3) | # freephone
117
+ one_of(%w(50 51 54 55 56 57 58 60 61 62 70 77)) >> split(3,4) | # mobile
118
+ one_of(%w(52)) >> split(3,4) | # satellite
119
+ fixed(3) >> split(3,3)
120
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Latvia
4
+ # https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=LV
5
+ # https://www.numberingplans.com/?page=dialling&sub=areacodes
6
+
7
+ ndcs_with_5_subscriber_numbers = %w(
8
+ 630
9
+ 631
10
+ 632
11
+ 633
12
+ 634
13
+ 636
14
+ 637
15
+ 638
16
+ 639
17
+ 640
18
+ 641
19
+ 642
20
+ 643
21
+ 644
22
+ 645
23
+ 646
24
+ 647
25
+ 648
26
+ 650
27
+ 651
28
+ 652
29
+ 653
30
+ 654
31
+ 656
32
+ 657
33
+ )
34
+
35
+ ndcs_with_6_subscriber_numbers = %w(67)
36
+
37
+ Phony.define do
38
+ country '371',
39
+ trunk('8', :normalize => false) |
40
+ one_of(ndcs_with_5_subscriber_numbers) >> split(3,2) |
41
+ one_of(ndcs_with_6_subscriber_numbers) >> split(3,3) |
42
+ fixed(3) >> split(3,2)
43
+ end
@@ -0,0 +1,116 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Lybia, https://www.numberingplans.com/?page=dialling&sub=areacodes
4
+ # https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=LY
5
+
6
+ ndcs_with_7_subscriber_numbers = %w(21)
7
+
8
+ ndcs_with_6_subscriber_numbers = %w(
9
+ 22
10
+ 23
11
+ 24
12
+ 25
13
+ 26
14
+ 31
15
+ 41
16
+ 47
17
+ 51
18
+ 54
19
+ 57
20
+ 61
21
+ 63
22
+ 67
23
+ 71
24
+ 73
25
+ 81
26
+ 82
27
+ 84
28
+ 87
29
+ )
30
+
31
+ ndcs_with_5_subscriber_numbers = %w(
32
+ 205
33
+ 206
34
+ 224
35
+ 252
36
+ 271
37
+ 272
38
+ 274
39
+ 275
40
+ 277
41
+ 279
42
+ 281
43
+ 282
44
+ 284
45
+ 322
46
+ 323
47
+ 325
48
+ 326
49
+ 421
50
+ 422
51
+ 423
52
+ 425
53
+ 427
54
+ 452
55
+ 453
56
+ 454
57
+ 481
58
+ 482
59
+ 484
60
+ 521
61
+ 522
62
+ 523
63
+ 524
64
+ 526
65
+ 529
66
+ 551
67
+ 553
68
+ 554
69
+ 555
70
+ 581
71
+ 582
72
+ 583
73
+ 584
74
+ 623
75
+ 624
76
+ 625
77
+ 626
78
+ 627
79
+ 628
80
+ 629
81
+ 652
82
+ 653
83
+ 654
84
+ 655
85
+ 657
86
+ 681
87
+ 682
88
+ 683
89
+ 684
90
+ 685
91
+ 721
92
+ 723
93
+ 724
94
+ 725
95
+ 726
96
+ 727
97
+ 729
98
+ 731
99
+ 732
100
+ 733
101
+ 734
102
+ 821
103
+ 851
104
+ 852
105
+ 854
106
+ 884
107
+ )
108
+
109
+ Phony.define do
110
+ country '218',
111
+ one_of(ndcs_with_5_subscriber_numbers) >> split(3,2) |
112
+ one_of(ndcs_with_6_subscriber_numbers) >> split(3,3) |
113
+ one_of(ndcs_with_7_subscriber_numbers) >> split(4,3) |
114
+ one_of(%w(91 92 94 95)) >> split(4,3) | # mobile
115
+ fixed(2) >> split(3,3)
116
+ end