phony 1.7.10 → 1.7.11
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/phony/countries/russia_kazakhstan_abhasia_south_osetia.rb +6 -2
- data/lib/phony/countries/united_kingdom.rb +80 -59
- data/lib/phony/country.rb +1 -3
- data/lib/phony/national_code.rb +3 -3
- data/lib/phony/national_splitters/none.rb +2 -0
- data/spec/lib/phony/countries_spec.rb +251 -239
- metadata +2 -2
@@ -118,7 +118,11 @@ Phony.define do
|
|
118
118
|
one_of(ndcs_with_7_subscriber_digits) >> split(3, 2, 2) |
|
119
119
|
one_of(%w(800)) >> split(3, 2, 2) | # Russia free number
|
120
120
|
one_of(%w(929 995344 9971 99744 9976 997)) >> split(2, 2, 2) | # South Osetia
|
121
|
-
|
122
|
-
|
121
|
+
|
122
|
+
# The two following lines have been replaced by fixed(3).
|
123
|
+
#
|
124
|
+
# match(/([67]\d{2})/) >> split(2, 2, 2) | # Kazakhstan: (600..799)
|
125
|
+
# one_of(%w(840 940)) >> split(2,2,2) # Abhasia
|
126
|
+
|
123
127
|
fixed(3) >> split(2,2,2)
|
124
128
|
end
|
@@ -1,34 +1,40 @@
|
|
1
|
-
# The United Kingdom uses a variable-length
|
2
|
-
# thus we use a separate file to not let
|
1
|
+
# The United Kingdom uses a variable-length NDC code,
|
2
|
+
# thus we use a separate file to not let countries.rb explode.
|
3
3
|
#
|
4
|
-
# Note: The United Kingdom uses a variable
|
4
|
+
# Note: The United Kingdom uses a variable NDC format from length 2 to 5.
|
5
5
|
#
|
6
6
|
# The UK is special in formatting in that it uses:
|
7
|
-
# a 4-4 formatting rule with area codes that are 2 digits long,
|
8
|
-
# a 3-4 formatting rule with area codes that are 3 digits long,
|
9
|
-
# a 6 or 5 formatting rule with area codes that are 4 digits long, and
|
10
|
-
# a 5 or 4 formatting rule with area codes that are 5 digits long.
|
11
|
-
#
|
12
|
-
# To reflect this different formatting, we need to install all handlers in a row.
|
13
|
-
# First, the area codes of length 2, without a fallback length (since this
|
14
|
-
# captures all), but with a nil fallback length.
|
15
|
-
#
|
16
|
-
# TODO Implement and use length-based splitter.
|
7
|
+
# a 2-4-4 formatting rule with area codes that are 2 digits long,
|
8
|
+
# a 3-3-4 or 3-6 formatting rule with area codes that are 3 digits long,
|
9
|
+
# a 4-6 or 4-5 formatting rule with area codes that are 4 digits long, and
|
10
|
+
# a 5-5 or 5-4 formatting rule with area codes that are 5 digits long.
|
11
|
+
# There can be a mix of number lengths within a single area code.
|
17
12
|
#
|
18
13
|
|
19
14
|
two_digit_ndc = [
|
15
|
+
# Geographic [2+8].
|
16
|
+
#
|
20
17
|
'20', # London
|
21
18
|
'23', # Southampton, Portsmith
|
22
19
|
'24', # Coventry
|
23
20
|
'28', # Northern Ireland
|
24
21
|
'29', # Cardiff
|
22
|
+
|
23
|
+
# Non-geographic [2+8].
|
24
|
+
#
|
25
25
|
'55', # Corporate
|
26
26
|
'56', # LIECS/VoIP
|
27
27
|
'70', # Personal numbers
|
28
28
|
]
|
29
29
|
|
30
|
+
# three_digit_ndc_with_nine_digits
|
31
|
+
# Non-geographic [3+6].
|
32
|
+
#
|
33
|
+
# '500', # Freephone (9 digits) handled in specific rule, see below.
|
34
|
+
# '800', # Freephone (9 digits) handled in specific rule, see below.
|
35
|
+
|
30
36
|
three_digit_ndc = [
|
31
|
-
# Geographic.
|
37
|
+
# Geographic [3+7].
|
32
38
|
#
|
33
39
|
'113', # Leeds
|
34
40
|
'114', # Sheffield
|
@@ -41,15 +47,14 @@ three_digit_ndc = [
|
|
41
47
|
'141', # Glasgow
|
42
48
|
'151', # Liverpool
|
43
49
|
'161', # Manchester
|
44
|
-
'171', # Used for inner London until 2000
|
45
|
-
'181', # Used for outer London until 2000
|
46
50
|
'191', # Tyne and Wear/County Durham
|
47
51
|
|
48
|
-
# Services.
|
52
|
+
# Services [3+7].
|
49
53
|
#
|
50
54
|
'300', # Non-geographic charged at same rate as 01
|
51
55
|
'301',
|
52
56
|
'303',
|
57
|
+
'306',
|
53
58
|
'308',
|
54
59
|
'309',
|
55
60
|
'330',
|
@@ -66,20 +71,20 @@ three_digit_ndc = [
|
|
66
71
|
'372',
|
67
72
|
'373',
|
68
73
|
|
69
|
-
'800', # Freephone (9
|
74
|
+
'800', # Freephone (10 digits) # 9 digits handled in specific rule, see below.
|
70
75
|
'808', # Freephone (10 digits)
|
71
76
|
|
72
|
-
'842', # Business rate
|
77
|
+
'842', # Business rate [3+7].
|
73
78
|
'843',
|
74
79
|
'844',
|
75
80
|
'845',
|
76
81
|
'870',
|
77
82
|
|
78
|
-
'871', # Premium rate
|
83
|
+
'871', # Premium rate [3+7].
|
79
84
|
'872',
|
80
85
|
'873',
|
81
86
|
|
82
|
-
'900', # Premium rate content services
|
87
|
+
'900', # Premium rate content services [3+7].
|
83
88
|
'901',
|
84
89
|
'902',
|
85
90
|
'903',
|
@@ -88,18 +93,42 @@ three_digit_ndc = [
|
|
88
93
|
'906',
|
89
94
|
'907',
|
90
95
|
|
91
|
-
'908', # Sexual entertainment services
|
92
|
-
'909',
|
93
|
-
'982',
|
96
|
+
'908', # Sexual entertainment services [3+7].
|
97
|
+
'909',
|
98
|
+
'982',
|
94
99
|
]
|
95
100
|
|
96
|
-
#
|
97
|
-
#
|
98
|
-
|
99
|
-
'
|
101
|
+
# five_digit_ndc_with_nine_digits
|
102
|
+
# Geographic [5+4].
|
103
|
+
#
|
104
|
+
# '16977', # Brampton (contains both 4 and 5 digit numbers)
|
105
|
+
# # 9 digits handled in specific rule, see below.
|
100
106
|
|
101
|
-
|
107
|
+
five_digit_ndc = [
|
108
|
+
# Geographic [5+5].
|
102
109
|
#
|
110
|
+
# These areas use 5-5 format. One area has some 5-4 numbers too (see above).
|
111
|
+
# They share their initial digits with area codes using 4-6 (and 4-5).
|
112
|
+
'13873', # Langholm
|
113
|
+
'15242', # Hornby
|
114
|
+
'15394', # Hawkshead
|
115
|
+
'15395', # Grange-over-Sands
|
116
|
+
'15396', # Sedbergh
|
117
|
+
'16973', # Wigton
|
118
|
+
'16974', # Raughton Head
|
119
|
+
'16977', # Brampton (contains both 4 and 5 digit numbers)
|
120
|
+
'17683', # Appleby
|
121
|
+
'17684', # Pooley Bridge
|
122
|
+
'17687', # Keswick
|
123
|
+
'19467', # Gosforth
|
124
|
+
]
|
125
|
+
|
126
|
+
no_split = [
|
127
|
+
# Geographic [4+6]/[4+5].
|
128
|
+
#
|
129
|
+
# These 40 area codes have a mix of 4-6 and 4-5 numbers
|
130
|
+
# The three 'mixed' areas also have part of their number
|
131
|
+
# range sub-allocated as 5-5.
|
103
132
|
'1204', # Bolton
|
104
133
|
'1208', # Bodmin
|
105
134
|
'1254', # Blackburn
|
@@ -141,51 +170,43 @@ no_split = [
|
|
141
170
|
'1963', # Wincanton
|
142
171
|
'1995', # Garstang
|
143
172
|
|
144
|
-
|
173
|
+
# 6 is the fallback length.
|
174
|
+
#
|
175
|
+
# Mobile [4+6].
|
145
176
|
#
|
177
|
+
('7400'..'7599').to_a,
|
178
|
+
'7624',
|
179
|
+
('7700'..'7999').to_a,
|
180
|
+
|
181
|
+
# Geographic [4+6].
|
182
|
+
#
|
183
|
+
# About 500 area codes use the 4-6 format
|
184
|
+
# The three 'mixed' areas also have part of their number
|
185
|
+
# range sub-allocated as 5-5 and one also has some 5-4.
|
146
186
|
'1224', # Aberdeen
|
147
187
|
'1244', # Chester
|
148
188
|
'1382', # Dundee
|
189
|
+
'1387', # Dumfries (Mixed area)
|
149
190
|
'1429', # Hartlepool
|
150
191
|
'1482', # Hull
|
192
|
+
'1539', # Kendal (Mixed area)
|
151
193
|
'1582', # Luton
|
152
194
|
'1670', # Morpeth
|
195
|
+
'1697', # Brampton (Mixed area)
|
153
196
|
'1730', # Petersfield
|
154
197
|
'1736', # Penzance
|
155
198
|
'1772', # Preston
|
156
199
|
'1853', # Ullapool
|
157
200
|
'1947', # Whitby
|
158
201
|
# and 500 others
|
159
|
-
|
160
|
-
# Mobile.
|
161
|
-
#
|
162
|
-
('7400'..'7599').to_a,
|
163
|
-
'7624',
|
164
|
-
('7700'..'7999').to_a,
|
165
|
-
|
166
|
-
# Geographic.
|
167
|
-
#
|
168
|
-
# Note: We could remove these and use fixed(5) >> split(5)
|
169
|
-
# for this as a catchall (see sweden.rb).
|
170
|
-
#
|
171
|
-
'13873', # Langholm
|
172
|
-
'15242', # Hornby
|
173
|
-
'15394', # Hawkshead
|
174
|
-
'15395', # Grange-over-Sands
|
175
|
-
'15396', # Sedbergh
|
176
|
-
'16973', # Wigton
|
177
|
-
'16974', # Raughton Head
|
178
|
-
'16977', # Brampton
|
179
|
-
'17683', # Appleby
|
180
|
-
'17684', # Pooley Bridge
|
181
|
-
'17687', # Keswick
|
182
|
-
'19467', # Gosforth
|
183
202
|
].flatten
|
184
203
|
|
185
|
-
# '16977', # Brampton -- TODO 016977 + 4 digits for 169772 and 169773
|
186
|
-
|
187
204
|
Phony.define do
|
188
|
-
country '44', one_of(two_digit_ndc)
|
189
|
-
|
190
|
-
one_of(
|
205
|
+
country '44', one_of(two_digit_ndc) >> split(4,4) | # 2-4-4
|
206
|
+
match(/^([58]00)\d{6}$/) >> split(6) | # Special handling for 500 and 800: 3-6 numbers.
|
207
|
+
one_of(three_digit_ndc) >> split(3,4) | # 3-3-4
|
208
|
+
match(/^(16977)\d{4}$/) >> split(4) | # Special handling for 16977: 5-4 numbers.
|
209
|
+
one_of(five_digit_ndc) >> split(5) | # 5-5
|
210
|
+
one_of(no_split) >> split(6) | # 4-6 and 4-5
|
211
|
+
fixed(4) >> split(6) # Catchall for 4-6 numbers.
|
191
212
|
end
|
data/lib/phony/country.rb
CHANGED
data/lib/phony/national_code.rb
CHANGED
@@ -16,9 +16,9 @@ module Phony
|
|
16
16
|
# its parts.
|
17
17
|
#
|
18
18
|
def split national_number
|
19
|
-
zero,
|
20
|
-
return [zero,
|
21
|
-
[zero,
|
19
|
+
zero, ndc_or_rest, rest = @national_splitter.split national_number.dup
|
20
|
+
return [zero, ndc_or_rest] unless rest
|
21
|
+
[zero, ndc_or_rest, *@local_splitter.split(rest)]
|
22
22
|
end
|
23
23
|
|
24
24
|
# Split gets a number without country code and removes a relative zero.
|
@@ -4,152 +4,156 @@ require 'spec_helper'
|
|
4
4
|
|
5
5
|
describe 'country descriptions' do
|
6
6
|
|
7
|
+
def self.it_splits number, expected
|
8
|
+
it { Phony.split(number).should == expected }
|
9
|
+
end
|
10
|
+
|
7
11
|
describe 'splitting' do
|
8
|
-
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
end
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
end
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
end
|
43
|
-
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
end
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
end
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
end
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
end
|
65
|
-
|
66
|
-
|
67
|
-
end
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
end
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
end
|
127
|
-
|
128
|
-
Phony.split('
|
129
|
-
Phony.split('
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
Phony.split('
|
134
|
-
Phony.split('
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
Phony.split('
|
140
|
-
Phony.split('
|
141
|
-
Phony.split('
|
142
|
-
end
|
143
|
-
|
144
|
-
Phony.split('
|
145
|
-
Phony.split('
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
Phony.split('
|
150
|
-
Phony.split('
|
151
|
-
end
|
152
|
-
|
12
|
+
describe 'Afghanistan' do
|
13
|
+
it_splits '93201234567', ['93', '20', '1234567'] # Kabul
|
14
|
+
end
|
15
|
+
describe 'Algeria' do
|
16
|
+
it_splits '213211231234', ['213', '21', '123', '1234'] # Algiers
|
17
|
+
it_splits '213331231234', ['213', '33', '123', '1234'] # Batna
|
18
|
+
end
|
19
|
+
describe 'Argentina' do
|
20
|
+
it_splits '541112345678', ['54', '11', '1234', '5678']
|
21
|
+
it_splits '542911234567', ['54', '291', '123', '4567']
|
22
|
+
it_splits '542965123456', ['54', '2965', '12', '3456']
|
23
|
+
it_splits '5491112345678', ['54', '911', '1234', '5678']
|
24
|
+
it_splits '5492201234567', ['54', '9220', '123', '4567']
|
25
|
+
it_splits '5492221123456', ['54', '92221', '12', '3456']
|
26
|
+
end
|
27
|
+
describe 'Austria' do
|
28
|
+
it_splits '43198110', ['43', '1', '98110'] # Vienna
|
29
|
+
it_splits '4366914093902', ['43', '669', '14093902'] # Mobile
|
30
|
+
it_splits '433161234567891', ['43', '316', '1234567891'] # Graz
|
31
|
+
it_splits '432164123456789', ['43', '2164', '123456789'] # Rohrau
|
32
|
+
end
|
33
|
+
describe 'Australia' do
|
34
|
+
it_splits '61512341234', ['61', '5', '1234', '1234'] # Landline
|
35
|
+
it_splits '61423123123', ['61', '423', '123', '123'] # Mobile
|
36
|
+
end
|
37
|
+
describe 'Belgium' do
|
38
|
+
it_splits '3235551212', ['32', '3', '555', '1212'] # Antwerpen
|
39
|
+
it_splits '32505551212', ['32', '50', '555', '1212'] # Brugge
|
40
|
+
it_splits '3225551212', ['32', '2', '555', '1212'] # Brussels
|
41
|
+
it_splits '3295551914', ['32', '9', '555', '1914'] # Gent
|
42
|
+
it_splits '3245551414', ['32', '4', '555', '1414'] # Liège
|
43
|
+
it_splits '3216473200', ['32', '16', '473', '200'] # Leuven
|
44
|
+
it_splits '32475279584', ['32', '475', '279584'] # mobile
|
45
|
+
it_splits '3270123123', ['32', '70', '123', '123'] # Bus Service?
|
46
|
+
end
|
47
|
+
describe 'Brazil' do
|
48
|
+
it_splits '551112341234', ['55', '11', '1234', '1234']
|
49
|
+
end
|
50
|
+
describe 'Chile' do
|
51
|
+
it_splits '5621234567', ['56', '2', '1234567'] # Santiago
|
52
|
+
it_splits '5675123456', ['56', '75', '123456'] # Curico
|
53
|
+
it_splits '56912345678', ['56', '9', '12345678'] # Mobile
|
54
|
+
it_splits '56137123456', ['56', '137', '123', '456'] # Service
|
55
|
+
end
|
56
|
+
describe 'China' do
|
57
|
+
it_splits '862112345678', ['86', '21', '1234', '5678'] # Shanghai
|
58
|
+
it_splits '8675582193447', ['86', '755', '8219', '3447'] # Shenzhen
|
59
|
+
end
|
60
|
+
describe 'Croatia' do
|
61
|
+
it_splits '385112312345', ['385', '1', '123', '12345'] # Zagreb
|
62
|
+
it_splits '385491231234', ['385', '49', '123', '1234'] # Krapina
|
63
|
+
end
|
64
|
+
describe 'Cuba' do
|
65
|
+
it_splits '5351231234', ['53', '5123', '1234'] # Mobile
|
66
|
+
it_splits '5371234567', ['53', '7', '1234567'] # Havana
|
67
|
+
it_splits '5342123456', ['53', '42', '123456'] # Villa Clara
|
68
|
+
end
|
69
|
+
describe 'Denmark' do
|
70
|
+
it_splits '4532121212', ['45', false, '32', '12', '12', '12']
|
71
|
+
end
|
72
|
+
describe 'Egypt' do
|
73
|
+
it_splits '20212345678', ['20', '2', '12345678']
|
74
|
+
it_splits '20921234567', ['20', '92', '1234567']
|
75
|
+
it_splits '20951234567', ['20', '95', '1234567']
|
76
|
+
end
|
77
|
+
describe 'Finland' do
|
78
|
+
it_splits '3589123123', ['358', '9', '123', '123'] # Helsinki
|
79
|
+
it_splits '3581912312', ['358', '19', '123', '12'] # Nylandia
|
80
|
+
it_splits '3585012312', ['358', '50', '123', '12'] # Mobile
|
81
|
+
it_splits '358600123', ['358', '600', '123'] # Service
|
82
|
+
end
|
83
|
+
describe 'France' do
|
84
|
+
it_splits '33112345678', ['33', '1', '12','34','56','78'] # Paris
|
85
|
+
it_splits '33812345678', ['33', '8', '12','34','56','78'] # Service number
|
86
|
+
end
|
87
|
+
describe 'Germany' do
|
88
|
+
it_splits '493038625454', ['49', '30', '386', '25454'] # Berlin
|
89
|
+
it_splits '4932221764542', ['49', '32', '221', '764542'] # Non-Geographical
|
90
|
+
it_splits '4922137683323', ['49', '221', '376', '83323'] # Cologne
|
91
|
+
it_splits '497614767676', ['49', '761', '476', '7676'] # Freiburg im Breisgau
|
92
|
+
it_splits '4921535100', ['49', '2153', '510', '0'] # Nettetal-Lobberich
|
93
|
+
it_splits '493434144602', ['49', '34341', '446', '02'] # Geithain
|
94
|
+
it_splits '491805878323', ['49', '180', '587', '8323'] # Service number
|
95
|
+
it_splits '491815878323', ['49', '181', '587', '8323'] # Service number
|
96
|
+
end
|
97
|
+
describe 'Ghana' do
|
98
|
+
it_splits '233302123456', ['233', '30', '212', '3456'] # Mobile Vodafone, Accra
|
99
|
+
end
|
100
|
+
describe 'Greece' do
|
101
|
+
it_splits '3021123456', ['30', '21', '123456'] # Athens
|
102
|
+
it_splits '3069512345', ['30', '695', '12345'] # Mobile
|
103
|
+
it_splits '302108131234', ['30', '21', '08131234'] # Long mobile, noted by vilcsak in pull request #26.
|
104
|
+
it_splits '3025941234', ['30', '2594', '1234']
|
105
|
+
it_splits '3022631234', ['30', '2263', '1234']
|
106
|
+
end
|
107
|
+
describe 'Hungary' do
|
108
|
+
it_splits'3612345678', ['36', '1', '234', '5678']
|
109
|
+
it_splits'3622123456', ['36', '22', '123', '456']
|
110
|
+
end
|
111
|
+
describe 'Iceland' do
|
112
|
+
it_splits '354112', ['354', false, '112'] # Emergency TODO
|
113
|
+
it_splits '3544211234', ['354', false, '421', '1234'] # Keflavík
|
114
|
+
it_splits '3544621234', ['354', false, '462', '1234'] # Akureyri
|
115
|
+
it_splits '3545511234', ['354', false, '551', '1234'] # Reykjavík
|
116
|
+
end
|
117
|
+
describe 'Ireland' do
|
118
|
+
it_splits '35311234567', ['353', '1', '123', '4567'] # Dublin, 7 digit subscriber #
|
119
|
+
it_splits '3532212345', ['353', '22', '12345'] # Mallow, 5 digit subscriber #
|
120
|
+
it_splits '35345123456', ['353', '45', '123456'] # Naas, 6 digit subscriber #
|
121
|
+
it_splits '353801234567', ['353', '80', '123', '4567'] # Mobile
|
122
|
+
it_splits '353761234567', ['353', '76', '123', '4567'] # VoIP
|
123
|
+
it_splits '353800123456', ['353', '800', '123456'] # Freefone
|
124
|
+
it_splits '353000123456', ['353', '000', '123456'] # Default fixed 3 split for unrecognized
|
125
|
+
end
|
126
|
+
describe 'Italy' do
|
127
|
+
it_splits '3934869528', ['39', '3486', '952', '8'] # Mobile
|
128
|
+
it_splits '390612341234', ['39', '06', '1234', '1234'] # Roma
|
129
|
+
it_splits '390909709511', ['39', '090', '970', '9511'] # Barcellona
|
130
|
+
end
|
131
|
+
describe 'Kenya' do
|
132
|
+
it { Phony.split('254201234567').should == ['254', '20', '1234567'] } # Nairobi
|
133
|
+
it { Phony.split('254111234567').should == ['254', '11', '1234567'] } # Mombasa
|
134
|
+
end
|
135
|
+
describe 'Lithuania' do
|
136
|
+
it { Phony.split('37070012123').should == ['370', '700', '12', '123'] } # Service
|
137
|
+
it { Phony.split('37061212123').should == ['370', '612', '12', '123'] } # Mobile
|
138
|
+
it { Phony.split('37051231212').should == ['370', '5', '123', '12', '12'] } # Vilnius
|
139
|
+
it { Phony.split('37037121212').should == ['370', '37', '12', '12', '12'] } # Kaunas
|
140
|
+
it { Phony.split('37044011212').should == ['370', '440', '1', '12', '12'] } # Skuodas
|
141
|
+
end
|
142
|
+
describe 'Malaysia' do
|
143
|
+
it { Phony.split('6082123456').should == ['60', '82', '123456'] } # Kuching
|
144
|
+
it { Phony.split('60312345678').should == ['60', '3', '12345678'] } # Kuala Lumpur
|
145
|
+
it { Phony.split('60212345678').should == ['60', '2', '12345678'] } # Singapore
|
146
|
+
end
|
147
|
+
describe 'Mexico' do
|
148
|
+
it { Phony.split('525512121212').should == ['52', '55', '12', '12', '12', '12'] } # Mexico City
|
149
|
+
it { Phony.split('526641231212').should == ['52', '664', '123', '12', '12'] } # Tijuana
|
150
|
+
end
|
151
|
+
describe 'The Netherlands' do
|
152
|
+
it { Phony.split('31612345678').should == ['31', '6', '12345678'] } # mobile
|
153
|
+
it { Phony.split('31201234567').should == ['31', '20', '1234567'] }
|
154
|
+
it { Phony.split('31222123456').should == ['31', '222', '123456'] }
|
155
|
+
end
|
156
|
+
describe 'Norway' do
|
153
157
|
Phony.split('4721234567').should == ['47',false,'21','23','45','67']
|
154
158
|
Phony.split('4731234567').should == ['47',false,'31','23','45','67']
|
155
159
|
Phony.split('4741234567').should == ['47',false,'412','34','567']
|
@@ -159,114 +163,122 @@ describe 'country descriptions' do
|
|
159
163
|
Phony.split('4781234567').should == ['47',false,'812','34','567']
|
160
164
|
Phony.split('4791234567').should == ['47',false,'912','34','567']
|
161
165
|
end
|
162
|
-
|
166
|
+
describe 'Peru' do
|
163
167
|
Phony.split('51112341234').should == ['51', '1', '1234', '1234'] # Lima
|
164
168
|
Phony.split('51912341234').should == ['51', '9', '1234', '1234'] # mobile
|
165
169
|
Phony.split('51841234123').should == ['51', '84', '1234', '123'] # Cuzco, best effort
|
166
170
|
end
|
167
|
-
|
171
|
+
describe 'Poland' do
|
168
172
|
Phony.split('48123456789').should == ['48', '12', '345', '67', '89'] # Landline
|
169
173
|
Phony.split('48501123456').should == ['48', '501', '123', '456'] # Mobile
|
170
174
|
Phony.split('48800123456').should == ['48', '800', '123', '456'] # Free
|
171
175
|
Phony.split('48801123456').should == ['48', '801', '123', '456'] # Shared cost
|
172
176
|
Phony.split('48701123456').should == ['48', '701', '123', '456'] # Premium
|
173
177
|
end
|
174
|
-
|
178
|
+
describe 'Portugal' do
|
175
179
|
Phony.split('351211231234').should == ['351', '21', '123', '1234'] # Lisboa
|
176
180
|
Phony.split('351241123123').should == ['351', '241', '123', '123'] # Abrantes
|
177
181
|
Phony.split('351931231234').should == ['351', '93', '123', '1234'] # mobile
|
178
182
|
end
|
179
|
-
|
180
|
-
Phony.split('40211231234').should == ['40', '21', '123', '1234'] # Bucureşti
|
181
|
-
Phony.split('40721231234').should == ['40', '72', '123', '1234'] # mobile
|
182
|
-
Phony.split('40249123123').should == ['40', '249', '123', '123'] # Olt
|
183
|
-
end
|
184
|
-
|
185
|
-
Phony.split('78122345678').should == ['7', '812', '234', '56', '78'] # Russia 3-digit
|
186
|
-
Phony.split('74012771077').should == ['7', '4012', '77', '10', '77'] # Russia 4-digit
|
187
|
-
Phony.split('78402411212').should == ['7', '84024', '1', '12', '12'] # Russia 5-digit
|
188
|
-
Phony.split('7840121212').should == ['7', '840', '12', '12', '12'] # Abhasia
|
189
|
-
Phony.split('
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
Phony.split('
|
195
|
-
Phony.split('
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
Phony.split('
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
Phony.split('
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
Phony.split('
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
Phony.split('
|
238
|
-
Phony.split('
|
239
|
-
Phony.split('
|
240
|
-
Phony.split('
|
241
|
-
Phony.split('
|
242
|
-
Phony.split('
|
243
|
-
Phony.split('
|
244
|
-
Phony.split('
|
245
|
-
Phony.split('
|
246
|
-
Phony.split('
|
247
|
-
Phony.split('
|
248
|
-
Phony.split('
|
249
|
-
Phony.split('
|
250
|
-
Phony.split('
|
251
|
-
Phony.split('
|
252
|
-
Phony.split('
|
253
|
-
|
254
|
-
Phony.split('
|
255
|
-
Phony.split('
|
256
|
-
|
257
|
-
|
258
|
-
Phony.split('
|
259
|
-
|
260
|
-
|
261
|
-
Phony.split('
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
Phony.split('
|
267
|
-
end
|
268
|
-
|
269
|
-
Phony.split('
|
183
|
+
describe 'Romania' do
|
184
|
+
it { Phony.split('40211231234').should == ['40', '21', '123', '1234'] } # Bucureşti
|
185
|
+
it { Phony.split('40721231234').should == ['40', '72', '123', '1234'] } # mobile
|
186
|
+
it { Phony.split('40249123123').should == ['40', '249', '123', '123'] } # Olt
|
187
|
+
end
|
188
|
+
describe 'Russia' do
|
189
|
+
it { Phony.split('78122345678').should == ['7', '812', '234', '56', '78'] } # Russia 3-digit
|
190
|
+
it { Phony.split('74012771077').should == ['7', '4012', '77', '10', '77'] } # Russia 4-digit
|
191
|
+
it { Phony.split('78402411212').should == ['7', '84024', '1', '12', '12'] } # Russia 5-digit
|
192
|
+
it { Phony.split('7840121212').should == ['7', '840', '12', '12', '12'] } # Abhasia
|
193
|
+
it { Phony.split('7799121212').should == ['7', '799', '12', '12', '12'] } # Kazachstan
|
194
|
+
it { Phony.split('7995344121212').should == ['7','995344','12','12','12'] } # South Osetia
|
195
|
+
it { Phony.split('7209175276').should == ['7', '209', '17', '52', '76'] } # Fantasy number
|
196
|
+
end
|
197
|
+
describe 'South Korea' do
|
198
|
+
it { Phony.split('82212345678').should == ['82', '2', '1234', '5678'] } # Seoul
|
199
|
+
it { Phony.split('825112345678').should == ['82', '51', '1234', '5678'] } # Busan
|
200
|
+
it { Phony.split('821027975588').should == ['82', '10', '2797', '5588'] } # mobile
|
201
|
+
it { Phony.split('821087971234').should == ['82', '10', '8797', '1234'] } # mobile
|
202
|
+
end
|
203
|
+
describe 'Thailand' do
|
204
|
+
it { Phony.split('6621231234').should == ['66', '2', '123', '1234'] } # Bangkok
|
205
|
+
it { Phony.split('6636123123').should == ['66', '36', '123', '123'] } # Lop Buri
|
206
|
+
end
|
207
|
+
describe 'Tunesia' do
|
208
|
+
it { Phony.split('21611231234').should == ['216', '1', '123', '1234'] } # Ariana
|
209
|
+
it { Phony.split('21621231234').should == ['216', '2', '123', '1234'] } # Bizerte
|
210
|
+
end
|
211
|
+
describe 'Singapore' do
|
212
|
+
it { Phony.split('6561231234').should == ['65', false, '6123', '1234'] } # Fixed line
|
213
|
+
end
|
214
|
+
describe 'Slovakia' do
|
215
|
+
it { Phony.split('421912123456').should == ['421', '912', '123456'] } # Mobile
|
216
|
+
it { Phony.split('421212345678').should == ['421', '2', '12345678'] } # Bratislava
|
217
|
+
it { Phony.split('421371234567').should == ['421', '37', '1234567'] } # Nitra / Other
|
218
|
+
end
|
219
|
+
describe 'Sweden' do
|
220
|
+
it { Phony.split('46812345678').should == ['46', '8', '12345678'] } # Stockholm
|
221
|
+
it { Phony.split('46111234567').should == ['46', '11', '1234567'] }
|
222
|
+
it { Phony.split('46125123456').should == ['46', '125', '123456'] }
|
223
|
+
end
|
224
|
+
describe 'Switzerland' do
|
225
|
+
it { Phony.split('41443643532').should == ['41', '44', '364', '35', '32'] } # Zurich (usually)
|
226
|
+
it { Phony.split('41800334455').should == ['41', '800', '334', '455'] } # Service number
|
227
|
+
end
|
228
|
+
describe 'Tanzania' do
|
229
|
+
it { Phony.split('255221231234').should == ['255', '22', '123', '1234'] } # Dar Es Salaam
|
230
|
+
it { Phony.split('255651231234').should == ['255', '65', '123', '1234'] } # TIGO
|
231
|
+
it { Phony.split('255861123123').should == ['255', '861', '123', '123'] } # Special Rates
|
232
|
+
end
|
233
|
+
describe 'Turkey' do
|
234
|
+
it { Phony.split('903121234567').should == ['90', '312', '123', '4567'] } # Ankara
|
235
|
+
end
|
236
|
+
describe 'Uganda' do
|
237
|
+
it { Phony.split('256414123456').should == ['256', '41', '4123456'] } # Kampania
|
238
|
+
it { Phony.split('256464441234').should == ['256', '464', '441234'] } # Mubende
|
239
|
+
end
|
240
|
+
describe 'The UK' do
|
241
|
+
it { Phony.split('442075671113').should == ['44', '20', '7567', '1113'] } # London
|
242
|
+
it { Phony.split('442920229901').should == ['44', '29', '2022', '9901'] } # Cardiff
|
243
|
+
it { Phony.split('441134770011').should == ['44', '113', '477', '0011'] } # Leeds
|
244
|
+
it { Phony.split('441412770022').should == ['44', '141', '277', '0022'] } # Glasgow
|
245
|
+
it { Phony.split('441204500532').should == ['44', '1204', '500532'] } # Bolton
|
246
|
+
it { Phony.split('44120462532').should == ['44', '1204', '62532'] } # Bolton
|
247
|
+
it { Phony.split('441382229845').should == ['44', '1382', '229845'] } # Dundee
|
248
|
+
it { Phony.split('441539248756').should == ['44', '1539', '248756'] } # Kendal
|
249
|
+
it { Phony.split('441539648788').should == ['44', '15396', '48788'] } # Sedbergh
|
250
|
+
it { Phony.split('441697222555').should == ['44', '1697', '222555'] } # Brampton
|
251
|
+
it { Phony.split('441697388555').should == ['44', '16973', '88555'] } # Wigton
|
252
|
+
it { Phony.split('44169772333').should == ['44', '16977', '2333'] } # Brampton
|
253
|
+
it { Phony.split('441697744888').should == ['44', '16977', '44888'] } # Brampton
|
254
|
+
it { Phony.split('441946555777').should == ['44', '1946', '555777'] } # Whitehaven
|
255
|
+
it { Phony.split('44194662888').should == ['44', '1946', '62888'] } # Whitehaven
|
256
|
+
it { Phony.split('441946722444').should == ['44', '19467', '22444'] } # Gosforth
|
257
|
+
it { Phony.split('443005878323').should == ['44', '300', '587', '8323'] } # Non-geographic
|
258
|
+
it { Phony.split('443457777334').should == ['44', '345', '777', '7334'] } # Non-geographic
|
259
|
+
it { Phony.split('44500557788').should == ['44', '500', '557788'] } # Freefone 500 + 6
|
260
|
+
it { Phony.split('445575671113').should == ['44', '55', '7567', '1113'] } # Corporate
|
261
|
+
it { Phony.split('445644775533').should == ['44', '56', '4477', '5533'] } # LIECS/VoIP
|
262
|
+
it { Phony.split('447020229901').should == ['44', '70', '2022', '9901'] } # Personal numbers
|
263
|
+
it { Phony.split('447780605207').should == ['44', '7780', '605207'] } # Mobile
|
264
|
+
it { Phony.split('447480605207').should == ['44', '7480', '605207'] } # Mobile
|
265
|
+
it { Phony.split('44800557788').should == ['44', '800', '557788'] } # Freefone 800 + 6
|
266
|
+
it { Phony.split('448084682355').should == ['44', '808', '468', '2355'] } # Freefone
|
267
|
+
it { Phony.split('448005878323').should == ['44', '800', '587', '8323'] } # Freefone, regression
|
268
|
+
end
|
269
|
+
describe 'US' do
|
270
|
+
it { Phony.split('15551115511').should == ['1', '555', '111', '5511'] }
|
271
|
+
end
|
272
|
+
describe 'Venezuela' do
|
273
|
+
it { Phony.split('582121234567').should == ['58', '212', '1234567'] }
|
274
|
+
end
|
275
|
+
describe 'Vietnam' do
|
276
|
+
it { Phony.split('8498123456').should == ['84', '98', '123456'] } # Viettel Mobile
|
277
|
+
it { Phony.split('8499612345').should == ['84', '996', '12345'] } # GTel
|
278
|
+
it { Phony.split('8441234567').should == ['84', '4', '1234567'] } # Hanoi
|
279
|
+
end
|
280
|
+
describe 'New Zealand' do
|
281
|
+
it { Phony.split('6491234567').should == ['64', '9', '123', '4567'] }
|
270
282
|
end
|
271
283
|
end
|
272
284
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phony
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.7.
|
4
|
+
version: 1.7.11
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-24 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: ! 'Fast international phone number (E164 standard) normalizing, splitting
|
15
15
|
and formatting. Lots of formatting options: International (+.., 00..), national
|