phony 1.9.0 → 2.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- 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,40 @@
|
|
1
|
+
# Latvia
|
2
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=LV
|
3
|
+
# https://www.numberingplans.com/?page=dialling&sub=areacodes
|
4
|
+
|
5
|
+
ndcs_with_5_subscriber_numbers = %w(
|
6
|
+
630
|
7
|
+
631
|
8
|
+
632
|
9
|
+
633
|
10
|
+
634
|
11
|
+
636
|
12
|
+
637
|
13
|
+
638
|
14
|
+
639
|
15
|
+
640
|
16
|
+
641
|
17
|
+
642
|
18
|
+
643
|
19
|
+
644
|
20
|
+
645
|
21
|
+
646
|
22
|
+
647
|
23
|
+
648
|
24
|
+
650
|
25
|
+
651
|
26
|
+
652
|
27
|
+
653
|
28
|
+
654
|
29
|
+
656
|
30
|
+
657
|
31
|
+
)
|
32
|
+
|
33
|
+
ndcs_with_6_subscriber_numbers = %w(67)
|
34
|
+
|
35
|
+
Phony.define do
|
36
|
+
country '371',
|
37
|
+
one_of(ndcs_with_5_subscriber_numbers) >> trunk('8') >> split(3,2) |
|
38
|
+
one_of(ndcs_with_6_subscriber_numbers) >> trunk('8') >> split(3,3) |
|
39
|
+
fixed(3) >> trunk('8') >> split(3,2)
|
40
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
# Lybia, https://www.numberingplans.com/?page=dialling&sub=areacodes
|
2
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=LY
|
3
|
+
|
4
|
+
ndcs_with_7_subscriber_numbers = %w(21)
|
5
|
+
|
6
|
+
ndcs_with_6_subscriber_numbers = %w(
|
7
|
+
22
|
8
|
+
23
|
9
|
+
24
|
10
|
+
25
|
11
|
+
26
|
12
|
+
31
|
13
|
+
41
|
14
|
+
47
|
15
|
+
51
|
16
|
+
54
|
17
|
+
57
|
18
|
+
61
|
19
|
+
63
|
20
|
+
67
|
21
|
+
71
|
22
|
+
73
|
23
|
+
81
|
24
|
+
82
|
25
|
+
84
|
26
|
+
87
|
27
|
+
)
|
28
|
+
|
29
|
+
ndcs_with_5_subscriber_numbers = %w(
|
30
|
+
205
|
31
|
+
206
|
32
|
+
224
|
33
|
+
252
|
34
|
+
271
|
35
|
+
272
|
36
|
+
274
|
37
|
+
275
|
38
|
+
277
|
39
|
+
279
|
40
|
+
281
|
41
|
+
282
|
42
|
+
284
|
43
|
+
322
|
44
|
+
323
|
45
|
+
325
|
46
|
+
326
|
47
|
+
421
|
48
|
+
422
|
49
|
+
423
|
50
|
+
425
|
51
|
+
427
|
52
|
+
452
|
53
|
+
453
|
54
|
+
454
|
55
|
+
481
|
56
|
+
482
|
57
|
+
484
|
58
|
+
521
|
59
|
+
522
|
60
|
+
523
|
61
|
+
524
|
62
|
+
526
|
63
|
+
529
|
64
|
+
551
|
65
|
+
553
|
66
|
+
554
|
67
|
+
555
|
68
|
+
581
|
69
|
+
582
|
70
|
+
583
|
71
|
+
584
|
72
|
+
623
|
73
|
+
624
|
74
|
+
625
|
75
|
+
626
|
76
|
+
627
|
77
|
+
628
|
78
|
+
629
|
79
|
+
652
|
80
|
+
653
|
81
|
+
654
|
82
|
+
655
|
83
|
+
657
|
84
|
+
681
|
85
|
+
682
|
86
|
+
683
|
87
|
+
684
|
88
|
+
685
|
89
|
+
721
|
90
|
+
723
|
91
|
+
724
|
92
|
+
725
|
93
|
+
726
|
94
|
+
727
|
95
|
+
729
|
96
|
+
731
|
97
|
+
732
|
98
|
+
733
|
99
|
+
734
|
100
|
+
821
|
101
|
+
851
|
102
|
+
852
|
103
|
+
854
|
104
|
+
884
|
105
|
+
)
|
106
|
+
|
107
|
+
Phony.define do
|
108
|
+
country '218',
|
109
|
+
one_of(ndcs_with_5_subscriber_numbers) >> split(3,2) |
|
110
|
+
one_of(ndcs_with_6_subscriber_numbers) >> split(3,3) |
|
111
|
+
one_of(ndcs_with_7_subscriber_numbers) >> split(4,3) |
|
112
|
+
one_of(%w(91 92)) >> split(4,3) | # mobile
|
113
|
+
fixed(2) >> split(3,3)
|
114
|
+
end
|
@@ -12,11 +12,13 @@ ndcs = [
|
|
12
12
|
'9', # Kelantan, Pahang (except Cameron Highlands & Genting Highlands) & Terengganu
|
13
13
|
]
|
14
14
|
mobile = %w{ 10 11 12 13 14 153 154 156 158 16 17 18 19 }
|
15
|
-
service = %w{ 100 101 102 103 104 108
|
15
|
+
service = %w{ 100 101 102 103 104 108 991 994 995 999 } # Emergeny and Service numbers, only 3 digits long
|
16
|
+
freephone = %w{ 300 700 800 }
|
16
17
|
|
17
18
|
Phony.define do
|
18
|
-
country '60', one_of(
|
19
|
-
one_of(
|
20
|
-
one_of(
|
21
|
-
|
19
|
+
country '60', one_of(freephone) >> split(2,4) | # Freephone, Tollfree, Forwarding
|
20
|
+
# one_of(service) >> none | # Service
|
21
|
+
one_of(mobile) >> split(3,4) | # Mobile
|
22
|
+
one_of(ndcs) >> split(8) | # 1-digit NDCs
|
23
|
+
fixed(2) >> split(8) # 2-digit NDCs (Also, fallback)
|
22
24
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# Moldova
|
2
|
+
# https://www.numberingplans.com/?page=dialling&sub=areacodes
|
3
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=MD
|
4
|
+
|
5
|
+
ndcs_with_6_subscriber_numbers = %w(22)
|
6
|
+
ndcs_with_5_subscriber_numbers = %w(
|
7
|
+
230
|
8
|
+
231
|
9
|
+
235
|
10
|
+
236
|
11
|
+
237
|
12
|
+
241
|
13
|
+
242
|
14
|
+
243
|
15
|
+
244
|
16
|
+
246
|
17
|
+
247
|
18
|
+
248
|
19
|
+
249
|
20
|
+
250
|
21
|
+
251
|
22
|
+
252
|
23
|
+
254
|
24
|
+
256
|
25
|
+
258
|
26
|
+
259
|
27
|
+
262
|
28
|
+
263
|
29
|
+
264
|
30
|
+
265
|
31
|
+
268
|
32
|
+
269
|
33
|
+
271
|
34
|
+
272
|
35
|
+
273
|
36
|
+
277
|
37
|
+
291
|
38
|
+
293
|
39
|
+
294
|
40
|
+
297
|
41
|
+
298
|
42
|
+
299
|
43
|
+
)
|
44
|
+
|
45
|
+
Phony.define do
|
46
|
+
country '373',
|
47
|
+
one_of(ndcs_with_5_subscriber_numbers) >> split(3,2) |
|
48
|
+
one_of(ndcs_with_6_subscriber_numbers) >> split(3,3) |
|
49
|
+
fixed(3) >> split(3,2)
|
50
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Montenegro
|
2
|
+
# https://www.numberingplans.com/?page=dialling&sub=areacodes
|
3
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=ME
|
4
|
+
|
5
|
+
Phony.define do
|
6
|
+
country '382',
|
7
|
+
one_of(%w(80)) >> split(3,3) | # freephone
|
8
|
+
one_of(%w(20 30 31 40 52)) >> matched_split(
|
9
|
+
/\A\d{5}\z/ => [3,2],
|
10
|
+
/\A\d+\z/ => [3,3]) |
|
11
|
+
one_of(%w(32 33 50 51)) >> split(3,3) |
|
12
|
+
one_of(%w(77)) >> split(3,3) | # national geographic
|
13
|
+
one_of(%w(78)) >> split(3,3) | # VoIP telephony
|
14
|
+
one_of(%w(88)) >> split(3,3) | # shared cost
|
15
|
+
one_of(%w(94 95)) >> split(3,3) | # premium rate
|
16
|
+
one_of(%w(63 67 69 70)) >> matched_split(
|
17
|
+
/\A\d{3}\z/ => [3],
|
18
|
+
/\A\d{6}\z/ => [3,3],
|
19
|
+
/\A\d+\z/ => [3,3,4]) | # mobile, voicemail (mobile
|
20
|
+
one_of(%w(68)) >> matched_split(
|
21
|
+
/\A\d{2}\z/ => [2],
|
22
|
+
/\A\d{6}\z/ => [3,3],
|
23
|
+
/\A\d+\z/ => [2,4,4]) | # voicemail (mobile)
|
24
|
+
fixed(2) >> matched_split(
|
25
|
+
/\A\d{5}\z/ => [3,2],
|
26
|
+
/\A\d+\z/ => [3,3])
|
27
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# Namibia
|
2
|
+
# https://www.numberingplans.com/?page=dialling&sub=areacodes
|
3
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=NA
|
4
|
+
|
5
|
+
Phony.define do
|
6
|
+
country '264',
|
7
|
+
one_of(%w(632532)) >> split(4) |
|
8
|
+
one_of(%w(6342)) >> matched_split(
|
9
|
+
/\A\d{3}\z/ => [3],
|
10
|
+
/\A\d+\z/ => [3,3]) |
|
11
|
+
one_of(%w(6362 6638)) >> split(4) |
|
12
|
+
one_of(%w(6642)) >> matched_split(
|
13
|
+
/\A\d{4}\z/ => [4],
|
14
|
+
/\A\d+\z/ => [3,3]) |
|
15
|
+
one_of(%w(6751)) >> split(3,2) |
|
16
|
+
one_of(%w(628)) >> split(4) |
|
17
|
+
one_of(%w(658)) >> split(5) |
|
18
|
+
one_of(%w(668)) >> matched_split(
|
19
|
+
/\A\d{4}\z/ => [4],
|
20
|
+
/\A\d{5}\z/ => [3,2],
|
21
|
+
/\A\d+\z/ => [3,3]) |
|
22
|
+
one_of(%w(61 63 64 65 67)) >> matched_split(
|
23
|
+
/\A\d{6}\z/ => [3,3],
|
24
|
+
/\A\d+\z/ => [3,3,3]) |
|
25
|
+
one_of(%w(66)) >> matched_split(
|
26
|
+
/\A\d{4}\z/ => [4],
|
27
|
+
/\A\d+\z/ => [3,3]) |
|
28
|
+
one_of(%w(62)) >> split(3,3) |
|
29
|
+
one_of(%w(67)) >> matched_split(
|
30
|
+
/\A\d{6}\z/ => [3,3],
|
31
|
+
/\A\d{7}\z/ => [4,3],
|
32
|
+
/\A\d+\z/ => [3,3,3]) |
|
33
|
+
one_of(%w(60 81 82 83 85)) >> split(4,3) |
|
34
|
+
fixed(2) >> split(3,3)
|
35
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# Nepal
|
2
|
+
# https://www.numberingplans.com/?page=dialling&sub=areacodes
|
3
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=NP
|
4
|
+
|
5
|
+
ndcs_with_7_subscriber_digits = %w(1)
|
6
|
+
|
7
|
+
ndcs_with_6_subscriber_digits = %w(
|
8
|
+
10
|
9
|
+
11
|
10
|
+
21
|
11
|
+
23
|
12
|
+
24
|
13
|
+
25
|
14
|
+
26
|
15
|
+
27
|
16
|
+
29
|
17
|
+
31
|
18
|
+
33
|
19
|
+
35
|
20
|
+
36
|
21
|
+
37
|
22
|
+
38
|
23
|
+
41
|
24
|
+
44
|
25
|
+
46
|
26
|
+
47
|
27
|
+
49
|
28
|
+
51
|
29
|
+
53
|
30
|
+
55
|
31
|
+
56
|
32
|
+
57
|
33
|
+
61
|
34
|
+
63
|
35
|
+
64
|
36
|
+
66
|
37
|
+
67
|
38
|
+
68
|
39
|
+
69
|
40
|
+
71
|
41
|
+
75
|
42
|
+
76
|
43
|
+
77
|
44
|
+
78
|
45
|
+
79
|
46
|
+
81
|
47
|
+
82
|
48
|
+
83
|
49
|
+
84
|
50
|
+
86
|
51
|
+
87
|
52
|
+
89
|
53
|
+
91
|
54
|
+
92
|
55
|
+
93
|
56
|
+
94
|
57
|
+
95
|
58
|
+
96
|
59
|
+
97
|
60
|
+
99
|
61
|
+
)
|
62
|
+
|
63
|
+
Phony.define do
|
64
|
+
country '977',
|
65
|
+
one_of(ndcs_with_6_subscriber_digits) >> split(3,3) |
|
66
|
+
one_of(%w(98)) >> split(4,4) | # mobile
|
67
|
+
one_of(ndcs_with_7_subscriber_digits) >> split(3,4) |
|
68
|
+
fixed(2) >> split(3,3)
|
69
|
+
end
|
70
|
+
|
71
|
+
|
@@ -52,6 +52,7 @@ service = [
|
|
52
52
|
|
53
53
|
Phony.define do
|
54
54
|
country '31', one_of(service) >> split(3,3) |
|
55
|
-
one_of(
|
56
|
-
|
55
|
+
one_of('6') >> split(2,2,2,2) | # mobile
|
56
|
+
one_of(ndcs) >> split(3,4) | # landline (geographic region)
|
57
|
+
fixed(3) >> split(3,3) # 3 digit ndc
|
57
58
|
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
# Pakistan (Islamic Republic of)
|
2
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=PK
|
3
|
+
|
4
|
+
ndcs_with_8_subscriber_numbers = %w(21 42 58)
|
5
|
+
|
6
|
+
ndcs_with_7_subscriber_numbers = %w(
|
7
|
+
22
|
8
|
+
25
|
9
|
+
40
|
10
|
+
41
|
11
|
+
44
|
12
|
+
46
|
13
|
+
47
|
14
|
+
48
|
15
|
+
49
|
16
|
+
51
|
17
|
+
52
|
18
|
+
53
|
19
|
+
55
|
20
|
+
56
|
21
|
+
57
|
22
|
+
61
|
23
|
+
62
|
24
|
+
63
|
25
|
+
64
|
26
|
+
65
|
27
|
+
66
|
28
|
+
67
|
29
|
+
68
|
30
|
+
71
|
31
|
+
74
|
32
|
+
81
|
33
|
+
86
|
34
|
+
91
|
35
|
+
)
|
36
|
+
|
37
|
+
ndcs_with_6_subscriber_numbers = %w(
|
38
|
+
232
|
39
|
+
233
|
40
|
+
235
|
41
|
+
238
|
42
|
+
242
|
43
|
+
243
|
44
|
+
244
|
45
|
+
297
|
46
|
+
298
|
47
|
+
453
|
48
|
+
454
|
49
|
+
457
|
50
|
+
459
|
51
|
+
542
|
52
|
+
543
|
53
|
+
544
|
54
|
+
546
|
55
|
+
547
|
56
|
+
604
|
57
|
+
606
|
58
|
+
608
|
59
|
+
722
|
60
|
+
723
|
61
|
+
726
|
62
|
+
822
|
63
|
+
823
|
64
|
+
824
|
65
|
+
825
|
66
|
+
826
|
67
|
+
828
|
68
|
+
829
|
69
|
+
832
|
70
|
+
833
|
71
|
+
835
|
72
|
+
837
|
73
|
+
838
|
74
|
+
843
|
75
|
+
844
|
76
|
+
847
|
77
|
+
848
|
78
|
+
852
|
79
|
+
853
|
80
|
+
855
|
81
|
+
856
|
82
|
+
922
|
83
|
+
923
|
84
|
+
924
|
85
|
+
925
|
86
|
+
926
|
87
|
+
927
|
88
|
+
928
|
89
|
+
932
|
90
|
+
937
|
91
|
+
938
|
92
|
+
939
|
93
|
+
942
|
94
|
+
943
|
95
|
+
944
|
96
|
+
945
|
97
|
+
946
|
98
|
+
963
|
99
|
+
965
|
100
|
+
966
|
101
|
+
969
|
102
|
+
992
|
103
|
+
995
|
104
|
+
996
|
105
|
+
997
|
106
|
+
998
|
107
|
+
)
|
108
|
+
|
109
|
+
Phony.define do
|
110
|
+
|
111
|
+
country '92',
|
112
|
+
one_of(ndcs_with_6_subscriber_numbers) >> split(3,3) |
|
113
|
+
one_of('122') >> split(3,3) | # universal access
|
114
|
+
one_of(ndcs_with_7_subscriber_numbers) >> split(4,3) |
|
115
|
+
one_of(ndcs_with_8_subscriber_numbers) >> split(4,4) |
|
116
|
+
one_of(%w(30 31 32 33 34 35 36)) >> split(4,4) | # mobile
|
117
|
+
fixed(2) >> split(4,4)
|
118
|
+
|
119
|
+
end
|