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.
- data/README.textile +1 -1
- data/lib/phony.rb +28 -15
- data/lib/phony/countries.rb +609 -210
- data/lib/phony/countries/austria.rb +6 -1
- data/lib/phony/countries/bangladesh.rb +55 -0
- data/lib/phony/countries/belarus.rb +130 -0
- data/lib/phony/countries/georgia.rb +91 -0
- data/lib/phony/countries/germany.rb +20 -6
- data/lib/phony/countries/india.rb +50 -0
- data/lib/phony/countries/indonesia.rb +50 -0
- data/lib/phony/countries/italy.rb +38 -67
- data/lib/phony/countries/japan.rb +412 -0
- data/lib/phony/countries/kyrgyzstan.rb +118 -0
- data/lib/phony/countries/latvia.rb +40 -0
- data/lib/phony/countries/libya.rb +114 -0
- data/lib/phony/countries/malaysia.rb +7 -5
- data/lib/phony/countries/moldova.rb +50 -0
- data/lib/phony/countries/montenegro.rb +27 -0
- data/lib/phony/countries/namibia.rb +35 -0
- data/lib/phony/countries/nepal.rb +71 -0
- data/lib/phony/countries/netherlands.rb +3 -2
- data/lib/phony/countries/pakistan.rb +119 -0
- data/lib/phony/countries/paraguay.rb +145 -0
- data/lib/phony/countries/russia_kazakhstan_abhasia_south_osetia.rb +6 -6
- data/lib/phony/countries/serbia.rb +34 -0
- data/lib/phony/countries/somali.rb +22 -0
- data/lib/phony/countries/south_korea.rb +1 -1
- data/lib/phony/countries/sweden.rb +1 -1
- data/lib/phony/countries/taiwan.rb +51 -0
- data/lib/phony/countries/tajikistan.rb +76 -0
- data/lib/phony/countries/turkmenistan.rb +73 -0
- data/lib/phony/countries/ukraine.rb +614 -0
- data/lib/phony/countries/uruguay.rb +51 -0
- data/lib/phony/countries/zimbabwe.rb +37 -0
- data/lib/phony/country.rb +41 -0
- data/lib/phony/country_codes.rb +45 -18
- data/lib/phony/dsl.rb +33 -7
- data/lib/phony/local_splitters/fixed.rb +14 -1
- data/lib/phony/local_splitters/regex.rb +12 -1
- data/lib/phony/national_code.rb +7 -3
- data/lib/phony/national_splitters/default.rb +13 -1
- data/lib/phony/national_splitters/dsl.rb +9 -7
- data/lib/phony/national_splitters/fixed.rb +6 -0
- data/lib/phony/national_splitters/none.rb +6 -0
- data/lib/phony/national_splitters/regex.rb +6 -0
- data/lib/phony/national_splitters/variable.rb +7 -1
- data/spec/lib/phony/countries_spec.rb +684 -16
- data/spec/lib/phony/local_splitters/regex_spec.rb +41 -0
- data/spec/lib/phony/validations_spec.rb +542 -10
- data/spec/lib/phony_spec.rb +20 -6
- metadata +29 -9
- data/lib/phony/validator.rb +0 -26
- data/lib/phony/validators.rb +0 -88
@@ -0,0 +1,145 @@
|
|
1
|
+
# Paraguay (Republic of)
|
2
|
+
# https://www.numberingplans.com/?page=dialling&sub=areacodes
|
3
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=PY
|
4
|
+
|
5
|
+
ndcs_with_6_7_subscriber_numbers = %w(
|
6
|
+
21
|
7
|
+
24
|
8
|
+
25
|
9
|
+
26
|
10
|
+
28
|
11
|
+
31
|
12
|
+
32
|
13
|
+
33
|
14
|
+
36
|
15
|
+
37
|
16
|
+
38
|
17
|
+
39
|
18
|
+
41
|
19
|
+
42
|
20
|
+
43
|
21
|
+
44
|
22
|
+
46
|
23
|
+
47
|
24
|
+
48
|
25
|
+
61
|
26
|
+
71
|
27
|
+
72
|
28
|
+
73
|
29
|
+
75
|
30
|
+
81
|
31
|
+
82
|
32
|
+
83
|
33
|
+
86
|
34
|
+
91
|
35
|
+
92
|
36
|
+
93
|
37
|
+
94
|
38
|
+
)
|
39
|
+
|
40
|
+
ndcs_with_6_subscriber_numbers = %w(
|
41
|
+
271
|
42
|
+
275
|
43
|
+
291
|
44
|
+
292
|
45
|
+
293
|
46
|
+
294
|
47
|
+
295
|
48
|
+
345
|
49
|
+
351
|
50
|
+
418
|
51
|
+
451
|
52
|
+
453
|
53
|
+
464
|
54
|
+
511
|
55
|
+
512
|
56
|
+
513
|
57
|
+
514
|
58
|
+
515
|
59
|
+
516
|
60
|
+
517
|
61
|
+
518
|
62
|
+
519
|
63
|
+
520
|
64
|
+
521
|
65
|
+
522
|
66
|
+
523
|
67
|
+
524
|
68
|
+
527
|
69
|
+
528
|
70
|
+
529
|
71
|
+
531
|
72
|
+
532
|
73
|
+
533
|
74
|
+
534
|
75
|
+
535
|
76
|
+
536
|
77
|
+
537
|
78
|
+
538
|
79
|
+
539
|
80
|
+
541
|
81
|
+
542
|
82
|
+
544
|
83
|
+
545
|
84
|
+
546
|
85
|
+
547
|
86
|
+
548
|
87
|
+
549
|
88
|
+
550
|
89
|
+
552
|
90
|
+
553
|
91
|
+
554
|
92
|
+
631
|
93
|
+
632
|
94
|
+
633
|
95
|
+
644
|
96
|
+
671
|
97
|
+
672
|
98
|
+
673
|
99
|
+
674
|
100
|
+
675
|
101
|
+
676
|
102
|
+
677
|
103
|
+
678
|
104
|
+
717
|
105
|
+
718
|
106
|
+
740
|
107
|
+
741
|
108
|
+
742
|
109
|
+
743
|
110
|
+
761
|
111
|
+
762
|
112
|
+
763
|
113
|
+
764
|
114
|
+
767
|
115
|
+
768
|
116
|
+
780
|
117
|
+
781
|
118
|
+
782
|
119
|
+
783
|
120
|
+
784
|
121
|
+
785
|
122
|
+
787
|
123
|
+
858
|
124
|
+
871
|
125
|
+
873
|
126
|
+
918
|
127
|
+
951
|
128
|
+
952
|
129
|
+
)
|
130
|
+
|
131
|
+
Phony.define do
|
132
|
+
|
133
|
+
country '595',
|
134
|
+
one_of(ndcs_with_6_subscriber_numbers) >> split(3,3) | # geographic
|
135
|
+
one_of(ndcs_with_6_7_subscriber_numbers) >>
|
136
|
+
matched_split(
|
137
|
+
/\A\d{6}\z/ => [3,3],
|
138
|
+
/\A\d+\z/ => [3,4]) | # geographic
|
139
|
+
one_of(%w(96 97 98 99)) >> split(3,4) | # mobile
|
140
|
+
fixed(2) >>
|
141
|
+
matched_split(
|
142
|
+
/\A\d{6}\z/ => [3,3],
|
143
|
+
/\A\d+\z/ => [3,4])
|
144
|
+
|
145
|
+
end
|
@@ -113,16 +113,16 @@ ndcs_with_6_subscriber_digits = %w(3012 3022 3412 3435 3439 3452 3456 3462 3463
|
|
113
113
|
ndcs_with_7_subscriber_digits = %w(342 343 347 351 383 391 473 495 496 498 499 812 818 831 843 844 846 861 862 863)
|
114
114
|
|
115
115
|
Phony.define do
|
116
|
-
country '7', one_of(ndcs_with_5_subscriber_digits) >> split(1, 2, 2) |
|
117
|
-
one_of(ndcs_with_6_subscriber_digits) >> split(2, 2, 2) |
|
118
|
-
one_of(ndcs_with_7_subscriber_digits) >> split(3, 2, 2) |
|
119
|
-
one_of(%w(800))
|
120
|
-
one_of(%w(929 995344 9971 99744 9976 997)) >> split(2, 2, 2) | # South Osetia
|
116
|
+
country '7', one_of(ndcs_with_5_subscriber_digits) >> trunk('8') >> split(1, 2, 2) |
|
117
|
+
one_of(ndcs_with_6_subscriber_digits) >> trunk('8') >> split(2, 2, 2) |
|
118
|
+
one_of(ndcs_with_7_subscriber_digits) >> trunk('8') >> split(3, 2, 2) |
|
119
|
+
one_of(%w(800)) >> trunk('8') >> split(3, 2, 2) | # Russia free number
|
120
|
+
one_of(%w(929 995344 9971 99744 9976 997)) >> trunk('8') >> split(2, 2, 2) | # South Osetia
|
121
121
|
|
122
122
|
# The two following lines have been replaced by fixed(3).
|
123
123
|
#
|
124
124
|
# match(/([67]\d{2})/) >> split(2, 2, 2) | # Kazakhstan: (600..799)
|
125
125
|
# one_of(%w(840 940)) >> split(2,2,2) # Abhasia
|
126
126
|
|
127
|
-
fixed(3)
|
127
|
+
fixed(3) >> trunk('8') >> split(2,2,3) # TODO 2,2,3 or 2,2,2?
|
128
128
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# Serbia
|
2
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=RS
|
3
|
+
|
4
|
+
Phony.define do
|
5
|
+
country '381',
|
6
|
+
one_of(%w(800)) >> split(3,2) | # freephone
|
7
|
+
one_of(%w(808)) >> split(3,2) | # payphone
|
8
|
+
one_of(%w(230)) >> matched_split(
|
9
|
+
/\A\d{4}\z/ => [4],
|
10
|
+
/\A\d+\z/ => [3,2]) |
|
11
|
+
one_of(%w(11 21)) >> matched_split(
|
12
|
+
/\A\d{6}\z/ => [3,3],
|
13
|
+
/\A\d+\z/ => [3,4]) |
|
14
|
+
one_of(%w(26 31 35)) >> split(3,3) |
|
15
|
+
one_of(%w(10 12 13 14 15 16 17 18 19 20 22 23 24 25 27 30 32 33 34 36 37)) >> matched_split(
|
16
|
+
/\A\d{5}\z/ => [3,2],
|
17
|
+
/\A\d+\z/ => [3,3]) |
|
18
|
+
one_of(%w(72)) >> split(3,3) | # ISP
|
19
|
+
one_of(%w(60 61 62 63 66 68 69)) >> matched_split(
|
20
|
+
/\A\d{3}\z/ => [3],
|
21
|
+
/\A\d{7}\z/ => [3,4],
|
22
|
+
/\A\d+\z/ => [3,3,4]) | # mobile, voicemail (mobile)
|
23
|
+
one_of(%w(64 65)) >> matched_split(
|
24
|
+
/\A\d{2}\z/ => [2],
|
25
|
+
/\A\d{3}\z/ => [3],
|
26
|
+
/\A\d{6}\z/ => [3,3],
|
27
|
+
/\A\d+\z/ => [3,3,4]) | # mobile, voicemail (mobile)
|
28
|
+
one_of(%w(70)) >> split(3,3) | # universal access
|
29
|
+
one_of(%w(42 78)) >> split(3,3) | # premium rate
|
30
|
+
one_of(%w(9)) >> split(3,4) | # premium rate
|
31
|
+
fixed(2) >> matched_split(
|
32
|
+
/\A\d{5}\z/ => [3,2],
|
33
|
+
/\A\d+\z/ => [3,3])
|
34
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
Phony.define do
|
2
|
+
# Somali Democratic Republic http://www.wtng.info/wtng-252-so.html
|
3
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=SO
|
4
|
+
country '252',
|
5
|
+
one_of('88216') >> split(3) | # Thuraya Satellite Telecommunications Company
|
6
|
+
one_of(%w(1034 1043)) >> split(3,2) | # Hortel
|
7
|
+
one_of(%w(1313)) >> split(3) | # Telcom Somalia
|
8
|
+
one_of(%w(160 161 162 163 164 165 166 167 168)) >> split(2,2) | # Hortel
|
9
|
+
one_of(%w(200 203 211 212 213 313)) >> split(3) | # Telcom Somalia
|
10
|
+
one_of(%w(201 204 208 210 214)) >> split(2,2) | # Telcom Somalia
|
11
|
+
one_of(%w(500 501 502 503 504 505 506 507 508 509)) >> split(3,2) | # mobile NationLink Telecom
|
12
|
+
one_of(%w(523 525 526)) >> split(2,2) | # Netco
|
13
|
+
one_of(%w(642 643 644 648 649)) >> split(2,2) | # Galcom
|
14
|
+
one_of(%w(33 51 52 54 55 56 57 58 59 68 71 76 78 79 88)) >> split(3,2) |
|
15
|
+
match(/\A(67)\d{5}\z/) >> split(3,2) | # Golis Telecom Somalia
|
16
|
+
one_of(%w(15 40 42 45 46 60 61 90 91)) >> split(3,3) | # mobile Somafone, Hortel
|
17
|
+
one_of(%w(18)) >> split(3,2) | # Hortel
|
18
|
+
one_of(%w(27 28 29 62 63 87)) >> split(2,2) | # Telcom Somalia, Emir Set
|
19
|
+
one_of(%w(67 69)) >> split(4,3) | # mobile NationLink Telecom
|
20
|
+
one_of('1') >> split(3,3) |
|
21
|
+
fixed(1) >> split(3,3)
|
22
|
+
end
|
@@ -12,7 +12,7 @@ special = %w{ 100 101 105 106 107 108 109 111 112 113 114 115 116 117 118 119 12
|
|
12
12
|
Phony.define do
|
13
13
|
country '82', match(/^(#{special.join("|")})$/) >> split(3,3) | # Special actually don't need to be split – but better err.
|
14
14
|
one_of('2') >> split(4,4) | # Seoul, also includes "services".
|
15
|
-
fixed(2) >> split(4,4) #
|
15
|
+
fixed(2) >> split(4,4) # Catchall.
|
16
16
|
|
17
17
|
# See above.
|
18
18
|
#
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# Taiwan
|
2
|
+
# https://www.numberingplans.com/?page=dialling&sub=areacodes
|
3
|
+
#
|
4
|
+
|
5
|
+
ndcs_with_8_subscriber_numbers = %w(1 2)
|
6
|
+
|
7
|
+
ndcs_with_7_subscriber_numbers = %w(3 4 5 6 7 8)
|
8
|
+
|
9
|
+
ndcs_with_6_subscriber_numbers = %w(
|
10
|
+
33
|
11
|
+
34
|
12
|
+
35
|
13
|
+
36
|
14
|
+
37
|
15
|
+
38
|
16
|
+
39
|
17
|
+
42
|
18
|
+
43
|
19
|
+
44
|
20
|
+
45
|
21
|
+
46
|
22
|
+
47
|
23
|
+
48
|
24
|
+
49
|
25
|
+
55
|
26
|
+
56
|
27
|
+
62
|
28
|
+
66
|
29
|
+
67
|
30
|
+
69
|
31
|
+
88
|
32
|
+
89
|
33
|
+
)
|
34
|
+
|
35
|
+
ndcs_with_5_subscriber_numbers = %w(823 826 827)
|
36
|
+
|
37
|
+
Phony.define do
|
38
|
+
country '886',
|
39
|
+
one_of(ndcs_with_5_subscriber_numbers) >> split(3,2) |
|
40
|
+
match(/\A(6\d\d)\d{7}\z/) >> split(3,4) | # geographic ; Taipei
|
41
|
+
one_of(%w(412)) >> split(4) | # VoIP telephony ; Taichung
|
42
|
+
one_of(ndcs_with_6_subscriber_numbers) >> split(3,3) |
|
43
|
+
one_of(%w(18)) >> split(3,3) | # freephone
|
44
|
+
one_of(%w(90 91 92 93 95 96 97 98)) >> matched_split(
|
45
|
+
/\A\d{6}\z/ => [3,3],
|
46
|
+
/\A\d+\z/ => [3,4]) | # mobile
|
47
|
+
one_of(%w(60 70 94 95 99)) >> split(3,3) | # pager
|
48
|
+
one_of(ndcs_with_7_subscriber_numbers) >> split(3,4) |
|
49
|
+
one_of(ndcs_with_8_subscriber_numbers) >> split(4,4) |
|
50
|
+
fixed(2) >> split(3,3)
|
51
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# Tajikistan (Republic of)
|
2
|
+
|
3
|
+
ndcs_with_6_subscriber_digits = %w(372)
|
4
|
+
|
5
|
+
ndcs_with_5_subscriber_digits = %w(
|
6
|
+
3130
|
7
|
+
3131
|
8
|
+
3132
|
9
|
+
3133
|
10
|
+
3134
|
11
|
+
3135
|
12
|
+
3136
|
13
|
+
3137
|
14
|
+
3138
|
15
|
+
3139
|
16
|
+
3141
|
17
|
+
3153
|
18
|
+
3154
|
19
|
+
3155
|
20
|
+
3156
|
21
|
+
3222
|
22
|
+
3240
|
23
|
+
3242
|
24
|
+
3243
|
25
|
+
3245
|
26
|
+
3246
|
27
|
+
3247
|
28
|
+
3248
|
29
|
+
3249
|
30
|
+
3250
|
31
|
+
3251
|
32
|
+
3252
|
33
|
+
3311
|
34
|
+
3312
|
35
|
+
3314
|
36
|
+
3315
|
37
|
+
3316
|
38
|
+
3318
|
39
|
+
3322
|
40
|
+
3422
|
41
|
+
3441
|
42
|
+
3442
|
43
|
+
3443
|
44
|
+
3445
|
45
|
+
3451
|
46
|
+
3452
|
47
|
+
3453
|
48
|
+
3454
|
49
|
+
3455
|
50
|
+
3456
|
51
|
+
3462
|
52
|
+
3464
|
53
|
+
3465
|
54
|
+
3467
|
55
|
+
3475
|
56
|
+
3479
|
57
|
+
3522
|
58
|
+
3551
|
59
|
+
3552
|
60
|
+
3553
|
61
|
+
3554
|
62
|
+
3555
|
63
|
+
3556
|
64
|
+
)
|
65
|
+
|
66
|
+
ndcs_with_3_subscriber_digits = %w(331700)
|
67
|
+
|
68
|
+
Phony.define do
|
69
|
+
country '992',
|
70
|
+
one_of(ndcs_with_3_subscriber_digits) >> trunk('8') >> split(3) |
|
71
|
+
one_of(ndcs_with_5_subscriber_digits) >> trunk('8') >> split(3,2) |
|
72
|
+
one_of(ndcs_with_6_subscriber_digits) >> trunk('8') >> split(3,3) |
|
73
|
+
match(/\A(505|9\d\d)\d+\z/) >> trunk('8') >> split(3,3) | # mobile
|
74
|
+
one_of(%w(446 474 487)) >> trunk('8') >> split(3,3) | # wireless geographic
|
75
|
+
fixed(3) >> trunk('8') >> split(3,3)
|
76
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# Turkmenistan
|
2
|
+
# https://www.numberingplans.com/?page=dialling&sub=areacodes
|
3
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=TM
|
4
|
+
|
5
|
+
ndcs_with_6_subscriber_digits = %w(12)
|
6
|
+
|
7
|
+
ndcs_with_5_subscriber_digits = %w(
|
8
|
+
131
|
9
|
+
132
|
10
|
+
133
|
11
|
+
134
|
12
|
+
135
|
13
|
+
136
|
14
|
+
137
|
15
|
+
138
|
16
|
+
222
|
17
|
+
240
|
18
|
+
241
|
19
|
+
242
|
20
|
+
243
|
21
|
+
245
|
22
|
+
246
|
23
|
+
247
|
24
|
+
248
|
25
|
+
322
|
26
|
+
340
|
27
|
+
343
|
28
|
+
344
|
29
|
+
345
|
30
|
+
346
|
31
|
+
347
|
32
|
+
348
|
33
|
+
349
|
34
|
+
360
|
35
|
+
422
|
36
|
+
431
|
37
|
+
432
|
38
|
+
438
|
39
|
+
440
|
40
|
+
441
|
41
|
+
442
|
42
|
+
443
|
43
|
+
444
|
44
|
+
445
|
45
|
+
446
|
46
|
+
447
|
47
|
+
448
|
48
|
+
449
|
49
|
+
461
|
50
|
+
465
|
51
|
+
522
|
52
|
+
557
|
53
|
+
558
|
54
|
+
559
|
55
|
+
560
|
56
|
+
561
|
57
|
+
564
|
58
|
+
565
|
59
|
+
566
|
60
|
+
568
|
61
|
+
569
|
62
|
+
)
|
63
|
+
|
64
|
+
ndcs_with_4_subscriber_digits = %w(1392)
|
65
|
+
|
66
|
+
Phony.define do
|
67
|
+
country '993',
|
68
|
+
one_of(ndcs_with_4_subscriber_digits) >> trunk('8') >> split(4) |
|
69
|
+
one_of(ndcs_with_5_subscriber_digits) >> trunk('8') >> split(3,2) |
|
70
|
+
one_of(ndcs_with_6_subscriber_digits) >> trunk('8') >> split(3,3) |
|
71
|
+
one_of('6') >> trunk('8') >> split(3,4) | # mobile
|
72
|
+
fixed(3) >> trunk('8') >> split(3,2)
|
73
|
+
end
|