phony 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +14 -2
- data/lib/phony.rb +58 -463
- data/lib/phony/countries/all_other.rb +417 -0
- data/lib/phony/countries/austria.rb +69 -0
- data/lib/phony/countries/egypt.rb +40 -0
- data/lib/phony/countries/germany.rb +156 -0
- data/lib/phony/countries/greece.rb +30 -0
- data/lib/phony/countries/hungary.rb +23 -0
- data/lib/phony/countries/italy.rb +105 -0
- data/lib/phony/country.rb +102 -0
- data/lib/phony/country_codes.rb +102 -0
- data/lib/phony/local_splitter.rb +46 -0
- data/lib/phony/national_code.rb +27 -0
- data/lib/phony/national_splitters/fixed.rb +36 -0
- data/lib/phony/national_splitters/variable.rb +64 -0
- data/lib/phony/vanity.rb +35 -0
- data/spec/lib/phony/countries/austria_spec.rb +24 -0
- data/spec/lib/phony/countries/egypt_spec.rb +18 -0
- data/spec/lib/phony/countries/germany_spec.rb +24 -0
- data/spec/lib/phony/countries/greece_spec.rb +18 -0
- data/spec/lib/phony/countries/hungary_spec.rb +18 -0
- data/spec/lib/phony/countries/switzerland_spec.rb +18 -0
- data/spec/lib/phony/country_codes_spec.rb +110 -0
- data/spec/lib/phony/country_spec.rb +91 -0
- data/spec/lib/phony/local_splitter_spec.rb +48 -0
- data/spec/lib/phony/national_code_spec.rb +36 -0
- data/spec/lib/phony/national_splitters/fixed_spec.rb +43 -0
- data/spec/lib/phony/national_splitters/variable_spec.rb +35 -0
- data/spec/lib/phony/vanity_spec.rb +34 -0
- data/spec/lib/phony_spec.rb +117 -238
- metadata +45 -21
- data/lib/ndc/austria.rb +0 -69
- data/lib/ndc/fixed_size.rb +0 -113
- data/lib/ndc/germany.rb +0 -157
- data/lib/ndc/prefix.rb +0 -67
- data/lib/ndc/splitter.rb +0 -81
- data/spec/lib/ndc/austria_spec.rb +0 -40
- data/spec/lib/ndc/fixed_size_spec.rb +0 -65
- data/spec/lib/ndc/germany_spec.rb +0 -40
- data/spec/lib/ndc/prefix_spec.rb +0 -25
- data/spec/lib/ndc/splitter_spec.rb +0 -59
data/README.textile
CHANGED
@@ -3,6 +3,14 @@ h1. Phony
|
|
3
3
|
h2. Description
|
4
4
|
|
5
5
|
This gem can normalize, format and split E164 numbers.
|
6
|
+
"More about E164 numbers in this Wiki":http://en.wikipedia.org/wiki/E.164.
|
7
|
+
|
8
|
+
Currently handles Austrian, Australian, Belgian, Czech, Egyptian, French, German, Greek, Hungarian, Italian, New Zealand, Norwegian, Polish, Russian, South African, Spanish, Swiss, Liechtenstein, US numbers.
|
9
|
+
And to some extend, all others. Just try if it works for you.
|
10
|
+
|
11
|
+
h2. Installation
|
12
|
+
|
13
|
+
<pre><code>gem install phony</code></pre>
|
6
14
|
|
7
15
|
h2. Some examples
|
8
16
|
|
@@ -100,7 +108,7 @@ h3. Splitting
|
|
100
108
|
|
101
109
|
@Phony.split('4976112345').should == ['49', '761', '123', '45']@
|
102
110
|
|
103
|
-
@Phony.split('3928061371').should == ['39', '
|
111
|
+
@Phony.split('3928061371').should == ['39', '2', '806', '1371']@
|
104
112
|
|
105
113
|
@Phony.split('41443643532').should == ['41', '44', '364', '35', '32']@
|
106
114
|
|
@@ -108,4 +116,8 @@ h3. Splitting
|
|
108
116
|
|
109
117
|
@Phony.split('6491234567').should == ['64', '9', '123', '4567']@
|
110
118
|
|
111
|
-
@Phony.split('41800334455').should == ['41', '800', '33', '44', '55']@
|
119
|
+
@Phony.split('41800334455').should == ['41', '800', '33', '44', '55']@
|
120
|
+
|
121
|
+
Note: There is also a ! version of each of these methods which
|
122
|
+
will destroy the original string and return a new (or old) one.
|
123
|
+
Just work only with the returned value, and you will be fine.
|
data/lib/phony.rb
CHANGED
@@ -8,489 +8,84 @@ require 'active_support/core_ext/object/blank'
|
|
8
8
|
|
9
9
|
# Framework.
|
10
10
|
#
|
11
|
-
require File.expand_path '../
|
12
|
-
require File.expand_path '../
|
13
|
-
require File.expand_path '../
|
14
|
-
|
15
|
-
|
11
|
+
require File.expand_path '../phony/vanity', __FILE__
|
12
|
+
require File.expand_path '../phony/local_splitter', __FILE__
|
13
|
+
require File.expand_path '../phony/national_splitters/fixed', __FILE__
|
14
|
+
require File.expand_path '../phony/national_splitters/variable', __FILE__
|
15
|
+
require File.expand_path '../phony/national_code', __FILE__
|
16
|
+
require File.expand_path '../phony/country', __FILE__
|
17
|
+
|
18
|
+
# Countries.
|
19
|
+
#
|
20
|
+
# Note: See country_codes.rb for a complete mapping.
|
16
21
|
#
|
17
|
-
require File.expand_path '../
|
18
|
-
require File.expand_path '../
|
22
|
+
require File.expand_path '../phony/countries/all_other', __FILE__
|
23
|
+
require File.expand_path '../phony/countries/austria', __FILE__
|
24
|
+
require File.expand_path '../phony/countries/egypt', __FILE__
|
25
|
+
require File.expand_path '../phony/countries/germany', __FILE__
|
26
|
+
require File.expand_path '../phony/countries/greece', __FILE__
|
27
|
+
require File.expand_path '../phony/countries/hungary', __FILE__
|
28
|
+
require File.expand_path '../phony/countries/italy', __FILE__
|
19
29
|
|
20
|
-
|
30
|
+
require File.expand_path '../phony/country_codes', __FILE__
|
21
31
|
|
22
32
|
module Phony
|
23
33
|
|
24
|
-
|
25
|
-
|
26
|
-
# Returns a fixed ndc splitter.
|
34
|
+
# Phony uses a single country codes instance.
|
27
35
|
#
|
28
|
-
|
29
|
-
NDC.fixed national_code_length, options
|
30
|
-
end
|
31
|
-
|
32
|
-
# prefix length =>
|
33
|
-
# country code => national prefix length
|
34
|
-
@@country_codes = {
|
35
|
-
1 => {
|
36
|
-
'0' => fixed(0), # reserved
|
37
|
-
'1' => fixed(3, :local => [3, 10]), # USA, Canada, etc.
|
38
|
-
'7' => fixed(3), # Kazakhstan (Republic of) & Russian Federation
|
39
|
-
},
|
40
|
-
2 => {
|
41
|
-
'20' => fixed(2), # Egypt
|
42
|
-
'27' => fixed(2), # South Africa
|
43
|
-
|
44
|
-
'30' => fixed(2), # Greece
|
45
|
-
'31' => fixed(2), # Netherlands
|
46
|
-
'32' => fixed(2), # Belgium
|
47
|
-
'33' => fixed(1, :local => [2, 2, 2, 2]), # France
|
48
|
-
'34' => fixed(2), # Spain
|
49
|
-
'36' => fixed(2), # Hungary
|
50
|
-
'39' => fixed(3), # Italy
|
51
|
-
|
52
|
-
'40' => fixed(2), # Romania
|
53
|
-
'41' => fixed(2, :local => [3, 2, 2], :special_ndcs => ['800', '840', '842', '844', '848']), # Switzerland (Confederation of)
|
54
|
-
'43' => Austria,
|
55
|
-
'44' => fixed(2), # United Kingdom of Great Britain and Northern Ireland
|
56
|
-
'45' => fixed(2), # Denmark
|
57
|
-
'46' => fixed(2), # Sweden
|
58
|
-
'47' => fixed(2), # Norway
|
59
|
-
'48' => fixed(2), # Poland (Republic of)
|
60
|
-
'49' => Germany,
|
61
|
-
|
62
|
-
'51' => fixed(2), # Peru
|
63
|
-
'52' => fixed(2), # Mexico
|
64
|
-
'53' => fixed(2), # Cuba
|
65
|
-
'54' => fixed(2), # Argentine Republic
|
66
|
-
'55' => fixed(2), # Brazil (Federative Republic of)
|
67
|
-
'56' => fixed(2), # Chile
|
68
|
-
'57' => fixed(2), # Colombia (Republic of)
|
69
|
-
'58' => fixed(2), # Venezuela (Bolivarian Republic of)
|
70
|
-
|
71
|
-
'60' => fixed(2), # Malaysia
|
72
|
-
'61' => fixed(2), # Australia
|
73
|
-
'62' => fixed(2), # Indonesia (Republic of)
|
74
|
-
'63' => fixed(2), # Philippines (Republic of the)
|
75
|
-
'64' => fixed(1, :local => [3, 4]), # New Zealand
|
76
|
-
'65' => fixed(2), # Singapore (Republic of)
|
77
|
-
'66' => fixed(2), # Thailand
|
78
|
-
|
79
|
-
'81' => fixed(2), # Japan
|
80
|
-
'82' => fixed(2), # Korea (Republic of)
|
81
|
-
'84' => fixed(2), # Viet Nam (Socialist Republic of)
|
82
|
-
'86' => fixed(2), # China (People's Republic of)
|
83
|
-
|
84
|
-
'90' => fixed(2), # Turkey
|
85
|
-
'91' => fixed(2), # India (Republic of)
|
86
|
-
'92' => fixed(2), # Pakistan (Islamic Republic of)
|
87
|
-
'93' => fixed(2), # Afghanistan
|
88
|
-
'94' => fixed(2), # Sri Lanka (Democratic Socialist Republic of)
|
89
|
-
'95' => fixed(2), # Myanmar (Union of)
|
90
|
-
'98' => fixed(2), #Iran (Islamic Republic of)
|
91
|
-
},
|
92
|
-
3 => {
|
93
|
-
'210' => fixed(2), # -
|
94
|
-
'211' => fixed(2), # -
|
95
|
-
'212' => fixed(2), # Morocco
|
96
|
-
'213' => fixed(2), # Algeria
|
97
|
-
'214' => fixed(2), # -
|
98
|
-
'215' => fixed(2), # -
|
99
|
-
'216' => fixed(2), # Tunisia
|
100
|
-
'217' => fixed(2), # -
|
101
|
-
'218' => fixed(2), # Lybia
|
102
|
-
'219' => fixed(2), # -
|
103
|
-
|
104
|
-
'220' => fixed(2), # Gambia
|
105
|
-
'221' => fixed(2), # Senegal
|
106
|
-
'222' => fixed(2), # Mauritania
|
107
|
-
'223' => fixed(2), # Mali
|
108
|
-
'224' => fixed(2), # Guinea
|
109
|
-
'225' => fixed(2), # Côte d'Ivoire
|
110
|
-
'226' => fixed(2), # Burkina Faso
|
111
|
-
'227' => fixed(2), # Niger
|
112
|
-
'228' => fixed(2), # Togolese Republic
|
113
|
-
'229' => fixed(2), # Benin
|
114
|
-
|
115
|
-
'230' => fixed(2), # Mauritius
|
116
|
-
'231' => fixed(2), # Liberia
|
117
|
-
'232' => fixed(2), # Sierra Leone
|
118
|
-
'233' => fixed(2), # Ghana
|
119
|
-
'234' => fixed(2), # Nigeria
|
120
|
-
'235' => fixed(2), # Chad
|
121
|
-
'236' => fixed(2), # Central African Republic
|
122
|
-
'237' => fixed(2), # Cameroon
|
123
|
-
'238' => fixed(2), # Cape Verde
|
124
|
-
'239' => fixed(2), # Sao Tome and Principe
|
125
|
-
|
126
|
-
'240' => fixed(2), # Equatorial Guinea
|
127
|
-
'241' => fixed(2), # Gabonese Republic
|
128
|
-
'242' => fixed(2), # Congo
|
129
|
-
'243' => fixed(2), # Democratic Republic of the Congo
|
130
|
-
'244' => fixed(2), # Angola
|
131
|
-
'245' => fixed(2), # Guinea-Bissau
|
132
|
-
'246' => fixed(2), # Diego Garcia
|
133
|
-
'247' => fixed(2), # Ascension
|
134
|
-
'248' => fixed(2), # Seychelles
|
135
|
-
'249' => fixed(2), # Sudan
|
136
|
-
|
137
|
-
'250' => fixed(2), # Rwanda
|
138
|
-
'251' => fixed(2), # Ethiopia
|
139
|
-
'252' => fixed(2), # Somali Democratic Republic
|
140
|
-
'253' => fixed(2), # Djibouti
|
141
|
-
'254' => fixed(2), # Kenya
|
142
|
-
'255' => fixed(2), # Tanzania
|
143
|
-
'256' => fixed(2), # Uganda
|
144
|
-
'257' => fixed(2), # Burundi
|
145
|
-
'258' => fixed(2), # Mozambique
|
146
|
-
'259' => fixed(2), # -
|
147
|
-
|
148
|
-
'260' => fixed(2), # Zambia
|
149
|
-
'261' => fixed(2), # Madagascar
|
150
|
-
'262' => fixed(3), # Reunion / Mayotte (new)
|
151
|
-
'263' => fixed(2), # Zimbabwe
|
152
|
-
'264' => fixed(2), # Namibia
|
153
|
-
'265' => fixed(2), # Malawi
|
154
|
-
'266' => fixed(2), # Lesotho
|
155
|
-
'267' => fixed(2), # Botswana
|
156
|
-
'268' => fixed(2), # Swaziland
|
157
|
-
'269' => fixed(2), # Comoros
|
158
|
-
|
159
|
-
'280' => fixed(2), # -
|
160
|
-
'281' => fixed(2), # -
|
161
|
-
'282' => fixed(2), # -
|
162
|
-
'283' => fixed(2), # -
|
163
|
-
'284' => fixed(2), # -
|
164
|
-
'285' => fixed(2), # -
|
165
|
-
'286' => fixed(2), # -
|
166
|
-
'287' => fixed(2), # -
|
167
|
-
'288' => fixed(2), # -
|
168
|
-
'289' => fixed(2), # -
|
169
|
-
'290' => fixed(2), # Saint Helena
|
170
|
-
|
171
|
-
'291' => fixed(2), # Eritrea
|
172
|
-
'292' => fixed(2), # -
|
173
|
-
'293' => fixed(2), # -
|
174
|
-
'294' => fixed(2), # -
|
175
|
-
'295' => fixed(2), # -
|
176
|
-
'296' => fixed(2), # -
|
177
|
-
'297' => fixed(2), # Aruba
|
178
|
-
'298' => fixed(2), # Faroe Islands
|
179
|
-
'299' => fixed(2), # Greenland
|
180
|
-
|
181
|
-
'350' => fixed(2), # Gibraltar
|
182
|
-
'351' => fixed(2), # Portugal
|
183
|
-
'352' => fixed(2), # Luxembourg
|
184
|
-
'353' => fixed(2), # Ireland
|
185
|
-
'354' => fixed(2), # Iceland
|
186
|
-
'355' => fixed(2), # Albania
|
187
|
-
'356' => fixed(2), # Malta
|
188
|
-
'357' => fixed(2), # Cyprus
|
189
|
-
'358' => fixed(2), # Finland
|
190
|
-
'359' => fixed(2), # Bulgaria
|
191
|
-
|
192
|
-
'370' => fixed(2), # Lithuania
|
193
|
-
'371' => fixed(2), # Latvia
|
194
|
-
'372' => fixed(2), # Estonia
|
195
|
-
'373' => fixed(2), # Moldova
|
196
|
-
'374' => fixed(2), # Armenia
|
197
|
-
'375' => fixed(2), # Belarus
|
198
|
-
'376' => fixed(2), # Andorra
|
199
|
-
'377' => fixed(2), # Monaco
|
200
|
-
'378' => fixed(2), # San Marino
|
201
|
-
'379' => fixed(2), # Vatican City State
|
202
|
-
|
203
|
-
'380' => fixed(2), # Ukraine
|
204
|
-
'381' => fixed(2), # Serbia and Montenegro
|
205
|
-
'382' => fixed(2), # -
|
206
|
-
'383' => fixed(2), # -
|
207
|
-
'384' => fixed(2), # -
|
208
|
-
'385' => fixed(2), # Croatia
|
209
|
-
'386' => fixed(2), # Slovenia
|
210
|
-
'387' => fixed(2), # Bosnia and Herzegovina
|
211
|
-
'388' => fixed(2), # Group of countries, shared code
|
212
|
-
'389' => fixed(2), # The Former Yugoslav Republic of Macedonia
|
213
|
-
|
214
|
-
'420' => fixed(2), # Czech Republic
|
215
|
-
'421' => fixed(2), # Slovak Republic
|
216
|
-
'422' => fixed(2), # Spare code
|
217
|
-
'423' => fixed(0, :local => [3, 2, 2]), # Liechtenstein (Principality of)
|
218
|
-
'424' => fixed(2), # -
|
219
|
-
'425' => fixed(2), # -
|
220
|
-
'426' => fixed(2), # -
|
221
|
-
'427' => fixed(2), # -
|
222
|
-
'428' => fixed(2), # -
|
223
|
-
'429' => fixed(2), # -
|
224
|
-
|
225
|
-
'500' => fixed(2), # Falkland Islands (Malvinas)
|
226
|
-
'501' => fixed(2), # Belize
|
227
|
-
'502' => fixed(2), # Guatemala (Republic of)
|
228
|
-
'503' => fixed(2), # El Salvador (Republic of)
|
229
|
-
'504' => fixed(2), # Honduras (Republic of)
|
230
|
-
'505' => fixed(2), # Nicaragua
|
231
|
-
'506' => fixed(2), # Costa Rica
|
232
|
-
'507' => fixed(2), # Panama (Republic of)
|
233
|
-
'508' => fixed(2), # Saint Pierre and Miquelon (Collectivité territoriale de la République française)
|
234
|
-
'509' => fixed(2), # Haiti (Republic of)
|
235
|
-
|
236
|
-
'590' => fixed(3), # Guadeloupe (French Department of)
|
237
|
-
'591' => fixed(2), # Bolivia (Republic of)
|
238
|
-
'592' => fixed(2), # Guyana
|
239
|
-
'593' => fixed(2), # Ecuador
|
240
|
-
'594' => fixed(3), # French Guiana (French Department of)
|
241
|
-
'595' => fixed(2), # Paraguay (Republic of)
|
242
|
-
'596' => fixed(3), # Martinique (French Department of)
|
243
|
-
'597' => fixed(2), # Suriname (Republic of)
|
244
|
-
'598' => fixed(2), # Uruguay (Eastern Republic of)
|
245
|
-
'599' => fixed(2), # Netherlands Antilles
|
246
|
-
|
247
|
-
'670' => fixed(2), # Democratic Republic of Timor-Leste
|
248
|
-
'671' => fixed(2), # Spare code
|
249
|
-
'672' => fixed(2), # Australian External Territories
|
250
|
-
'673' => fixed(2), # Brunei Darussalam
|
251
|
-
'674' => fixed(2), # Nauru (Republic of)
|
252
|
-
'675' => fixed(2), # Papua New Guinea
|
253
|
-
'676' => fixed(2), # Tonga (Kingdom of)
|
254
|
-
'677' => fixed(2), # Solomon Islands
|
255
|
-
'678' => fixed(2), # Vanuatu (Republic of)
|
256
|
-
'679' => fixed(2), # Fiji (Republic of)
|
257
|
-
|
258
|
-
'680' => fixed(2), # Palau (Republic of)
|
259
|
-
'681' => fixed(2), # Wallis and Futuna (Territoire français d'outre-mer)
|
260
|
-
'682' => fixed(2), # Cook Islands
|
261
|
-
'683' => fixed(2), # Niue
|
262
|
-
'684' => fixed(2), # -
|
263
|
-
'685' => fixed(2), # Samoa (Independent State of)
|
264
|
-
'686' => fixed(2), # Kiribati (Republic of)
|
265
|
-
'687' => fixed(2), # New Caledonia (Territoire français d'outre-mer)
|
266
|
-
'688' => fixed(2), # Tuvalu
|
267
|
-
'689' => fixed(2), # French Polynesia (Territoire français d'outre-mer)
|
268
|
-
|
269
|
-
'690' => fixed(2), # Tokelau
|
270
|
-
'691' => fixed(2), # Micronesia (Federated States of)
|
271
|
-
'692' => fixed(2), # Marshall Islands (Republic of the)
|
272
|
-
'693' => fixed(2), # -
|
273
|
-
'694' => fixed(2), # -
|
274
|
-
'695' => fixed(2), # -
|
275
|
-
'696' => fixed(2), # -
|
276
|
-
'697' => fixed(2), # -
|
277
|
-
'698' => fixed(2), # -
|
278
|
-
'699' => fixed(2), # -
|
279
|
-
|
280
|
-
'800' => fixed(2), # International Freephone Service
|
281
|
-
'801' => fixed(2), # -
|
282
|
-
'802' => fixed(2), # -
|
283
|
-
'803' => fixed(2), # -
|
284
|
-
'804' => fixed(2), # -
|
285
|
-
'805' => fixed(2), # -
|
286
|
-
'806' => fixed(2), # -
|
287
|
-
'807' => fixed(2), # -
|
288
|
-
'808' => fixed(2), # International Shared Cost Service (ISCS)
|
289
|
-
'809' => fixed(2), # -
|
290
|
-
|
291
|
-
'830' => fixed(2), # -
|
292
|
-
'831' => fixed(2), # -
|
293
|
-
'832' => fixed(2), # -
|
294
|
-
'833' => fixed(2), # -
|
295
|
-
'834' => fixed(2), # -
|
296
|
-
'835' => fixed(2), # -
|
297
|
-
'836' => fixed(2), # -
|
298
|
-
'837' => fixed(2), # -
|
299
|
-
'838' => fixed(2), # -
|
300
|
-
'839' => fixed(2), # -
|
301
|
-
|
302
|
-
'850' => fixed(2), # Democratic People's Republic of Korea
|
303
|
-
'851' => fixed(2), # Spare code
|
304
|
-
'852' => fixed(2), # Hong Kong, China
|
305
|
-
'853' => fixed(2), # Macao, China
|
306
|
-
'854' => fixed(2), # Spare code
|
307
|
-
'855' => fixed(2), # Cambodia (Kingdom of)
|
308
|
-
'856' => fixed(2), # Lao People's Democratic Republic
|
309
|
-
'857' => fixed(2), # Spare code
|
310
|
-
'858' => fixed(2), # Spare code
|
311
|
-
'859' => fixed(2), # Spare code
|
312
|
-
|
313
|
-
'870' => fixed(2), # Inmarsat SNAC
|
314
|
-
'871' => fixed(2), # Inmarsat (Atlantic Ocean-East)
|
315
|
-
'872' => fixed(2), # Inmarsat (Pacific Ocean)
|
316
|
-
'873' => fixed(2), # Inmarsat (Indian Ocean)
|
317
|
-
'874' => fixed(2), # Inmarsat (Atlantic Ocean-West)
|
318
|
-
'875' => fixed(2), # Reserved - Maritime Mobile Service Applications
|
319
|
-
'876' => fixed(2), # Reserved - Maritime Mobile Service Applications
|
320
|
-
'877' => fixed(2), # Reserved - Maritime Mobile Service Applications
|
321
|
-
'878' => fixed(2), # Universal Personal Telecommunication Service (UPT)
|
322
|
-
'879' => fixed(2), # Reserved for national non-commercial purposes
|
323
|
-
|
324
|
-
'880' => fixed(2), # Bangladesh (People's Republic of)
|
325
|
-
'881' => fixed(2), # International Mobile, shared code
|
326
|
-
'882' => fixed(2), # International Networks, shared code
|
327
|
-
'883' => fixed(2), # -
|
328
|
-
'884' => fixed(2), # -
|
329
|
-
'885' => fixed(2), # -
|
330
|
-
'886' => fixed(2), # Reserved
|
331
|
-
'887' => fixed(2), # -
|
332
|
-
'888' => fixed(2), # Reserved for future global service
|
333
|
-
'889' => fixed(2), # -
|
334
|
-
|
335
|
-
'890' => fixed(2), # -
|
336
|
-
'891' => fixed(2), # -
|
337
|
-
'892' => fixed(2), # -
|
338
|
-
'893' => fixed(2), # -
|
339
|
-
'894' => fixed(2), # -
|
340
|
-
'895' => fixed(2), # -
|
341
|
-
'896' => fixed(2), # -
|
342
|
-
'897' => fixed(2), # -
|
343
|
-
'898' => fixed(2), # -
|
344
|
-
'899' => fixed(2), # -
|
345
|
-
|
346
|
-
'960' => fixed(2), # Maldives (Republic of)
|
347
|
-
'961' => fixed(2), # Lebanon
|
348
|
-
'962' => fixed(2), # Jordan (Hashemite Kingdom of)
|
349
|
-
'963' => fixed(2), # Syrian Arab Republic
|
350
|
-
'964' => fixed(2), # Iraq (Republic of)
|
351
|
-
'965' => fixed(2), # Kuwait (State of)
|
352
|
-
'966' => fixed(2), # Saudi Arabia (Kingdom of)
|
353
|
-
'967' => fixed(2), # Yemen (Republic of)
|
354
|
-
'968' => fixed(2), # Oman (Sultanate of)
|
355
|
-
'969' => fixed(2), # Reserved - reservation currently under investigation
|
356
|
-
|
357
|
-
'970' => fixed(2), # Reserved
|
358
|
-
'971' => fixed(2), # United Arab Emirates
|
359
|
-
'972' => fixed(2), # Israel (State of)
|
360
|
-
'973' => fixed(2), # Bahrain (Kingdom of)
|
361
|
-
'974' => fixed(2), # Qatar (State of)
|
362
|
-
'975' => fixed(2), # Bhutan (Kingdom of)
|
363
|
-
'976' => fixed(2), # Mongolia
|
364
|
-
'977' => fixed(2), # Nepal
|
365
|
-
'978' => fixed(2), # -
|
366
|
-
'979' => fixed(2), # International Premium Rate Service (IPRS)
|
367
|
-
|
368
|
-
'990' => fixed(2), # Spare code
|
369
|
-
'991' => fixed(2), # Trial of a proposed new international telecommunication public correspondence service, shared code
|
370
|
-
'992' => fixed(2), # Tajikistan (Republic of)
|
371
|
-
'993' => fixed(2), # Turkmenistan
|
372
|
-
'994' => fixed(2), # Azerbaijani Republic
|
373
|
-
'995' => fixed(2), # Georgia
|
374
|
-
'996' => fixed(2), # Kyrgyz Republic
|
375
|
-
'997' => fixed(2), # Spare code
|
376
|
-
'998' => fixed(2), # Uzbekistan (Republic of)
|
377
|
-
'999' => fixed(2), # Reserved for possible future use within the Telecommunications for Disaster Relief (TDR) concept
|
378
|
-
}
|
379
|
-
}
|
36
|
+
@codes = CountryCodes.new
|
380
37
|
|
381
|
-
#
|
38
|
+
# Normalizes the given number.
|
382
39
|
#
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
40
|
+
# Useful before inserting the number into a database.
|
41
|
+
#
|
42
|
+
def self.normalize phone_number
|
43
|
+
normalize! phone_number.dup
|
44
|
+
end
|
45
|
+
def self.normalize! phone_number
|
46
|
+
@codes.normalize phone_number
|
390
47
|
end
|
391
48
|
|
392
|
-
#
|
49
|
+
# Splits the phone number into pieces according to the country codes.
|
393
50
|
#
|
394
|
-
def self.
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
space = options[:spaces] || ' '
|
401
|
-
formatted_cc_ndc(cc, ndc, options[:format], space) + splitter_or_number.locally_formatted(local, space)
|
51
|
+
def self.split phone_number
|
52
|
+
split! phone_number.dup
|
53
|
+
end
|
54
|
+
def self.split! phone_number
|
55
|
+
@codes.split phone_number
|
402
56
|
end
|
403
57
|
|
404
|
-
#
|
58
|
+
# Formats a E164 number according to local customs.
|
405
59
|
#
|
406
|
-
def self.
|
407
|
-
|
408
|
-
phone_number.gsub!(/\D*/, '').gsub!(/^0+/, '') # Remove zeros at the beginning and non-digit chars
|
409
|
-
remove_relative_zeros! phone_number
|
60
|
+
def self.formatted phone_number, options = {}
|
61
|
+
formatted! phone_number.dup, options
|
410
62
|
end
|
411
|
-
|
412
|
-
|
413
|
-
#
|
414
|
-
def self.vanity_number?(number)
|
415
|
-
(number.gsub(' ', '') =~ /^\d{4}\w{6,12}$/) ? true : false
|
63
|
+
def self.formatted! phone_number, options = {}
|
64
|
+
@codes.formatted phone_number, options
|
416
65
|
end
|
417
66
|
|
418
|
-
#
|
419
|
-
#
|
67
|
+
# def self.service? number
|
68
|
+
# @codes.service? number.dup
|
69
|
+
# end
|
70
|
+
# def self.mobile? number
|
71
|
+
# @codes.mobile? number.dup
|
72
|
+
# end
|
73
|
+
# def self.landline? number
|
74
|
+
# @codes.landline? number.dup
|
75
|
+
# end
|
76
|
+
|
77
|
+
# Returns true if there is a character in the number
|
78
|
+
# after the first four numbers.
|
420
79
|
#
|
421
|
-
def self.
|
422
|
-
|
80
|
+
def self.vanity? phone_number
|
81
|
+
@codes.vanity? phone_number.dup
|
423
82
|
end
|
424
83
|
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
]
|
431
|
-
def self.mapping
|
432
|
-
@@mapping
|
433
|
-
end
|
434
|
-
|
435
|
-
# Replaces vanity characters of passed number with correct digits.
|
436
|
-
# Does not check for validity of vanity_number. Simply replaces all characters in the number
|
437
|
-
#
|
438
|
-
def self.replace number
|
439
|
-
number.tr *mapping
|
440
|
-
end
|
441
|
-
|
84
|
+
# Converts any character in the vanity_number to its numeric representation.
|
85
|
+
# Does not check if the passed number is a valid vanity_number, simply does replacement.
|
86
|
+
#
|
87
|
+
def self.vanity_to_number vanity_number
|
88
|
+
@codes.vanity_to_number vanity_number.dup
|
442
89
|
end
|
443
90
|
|
444
|
-
|
445
|
-
private
|
446
|
-
|
447
|
-
# Removes 0s from partially normalized numbers such as:
|
448
|
-
# 410443643533
|
449
|
-
#
|
450
|
-
# Example:
|
451
|
-
# 410443643533 -> 41443643533
|
452
|
-
def self.remove_relative_zeros!(phone_number, format = nil)
|
453
|
-
'%s%s' % split_cc(phone_number).collect! { |code| code.gsub(/^0+/, '') }
|
454
|
-
end
|
455
|
-
|
456
|
-
# Formats country code and national destination code.
|
457
|
-
#
|
458
|
-
def self.formatted_cc_ndc(cc, ndc, format, space = nil)
|
459
|
-
space ||= ' '
|
460
|
-
format, split_phone_number = case format
|
461
|
-
when nil, :international_absolute, :international, :+
|
462
|
-
[ndc.blank? ? '+%s%s' : '+%s%s%s%s', [cc, space, ndc, space]]
|
463
|
-
when :international_relative
|
464
|
-
[ndc.blank? ? '00%s%s' : '00%s%s%s%s', [cc, space, ndc, space]]
|
465
|
-
when :national
|
466
|
-
[ndc.blank? ? '' : '0%s%s', [ndc, space]]
|
467
|
-
when :local
|
468
|
-
['', []]
|
469
|
-
end
|
470
|
-
format % split_phone_number
|
471
|
-
end
|
472
|
-
|
473
|
-
def self.split_cc(phone_number)
|
474
|
-
split_internal(phone_number) do |splitter, cc, ndc_local|
|
475
|
-
[cc, ndc_local]
|
476
|
-
end
|
477
|
-
end
|
478
|
-
|
479
|
-
def self.split_cc_ndc(phone_number)
|
480
|
-
split_internal(phone_number) do |splitter, cc, ndc_local|
|
481
|
-
splitter ? [cc, splitter.split_ndc(ndc_local)].flatten : [cc, ndc_local, '']
|
482
|
-
end
|
483
|
-
end
|
484
|
-
|
485
|
-
def self.split_internal(phone_number)
|
486
|
-
number = phone_number.dup
|
487
|
-
presumed_code = ''
|
488
|
-
1.upto(3) do |i|
|
489
|
-
presumed_code << number.slice!(0..0)
|
490
|
-
splitter = @@country_codes[i][presumed_code]
|
491
|
-
return yield(splitter, presumed_code, number) if splitter
|
492
|
-
end
|
493
|
-
return yield(nil, '', '')
|
494
|
-
end
|
495
|
-
|
496
91
|
end
|