phony 1.7.10 → 1.7.11
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/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
|