phony 2.18.15 → 2.20.0
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.
- checksums.yaml +4 -4
- data/README.textile +5 -1
- data/lib/phony/countries/ireland.rb +6 -4
- data/lib/phony/countries/italy.rb +24 -16
- data/lib/phony/countries/japan.rb +58 -8
- data/lib/phony/countries/libya.rb +1 -1
- data/lib/phony/countries/serbia.rb +5 -1
- data/lib/phony/countries/taiwan.rb +1 -0
- data/lib/phony/countries/vietnam.rb +1 -0
- data/lib/phony/countries.rb +46 -33
- data/lib/phony/country.rb +8 -2
- data/lib/phony/country_codes.rb +15 -2
- data/lib/phony/local_splitters/fixed.rb +2 -0
- data/lib/phony/national_code.rb +1 -1
- data/lib/phony/national_splitters/none.rb +1 -3
- data/lib/phony/trunk_code.rb +5 -5
- data/spec/functional/plausibility_spec.rb +63 -11
- data/spec/lib/phony/countries_spec.rb +43 -11
- data/spec/lib/phony/country_codes_spec.rb +63 -44
- data/spec/lib/phony/country_spec.rb +12 -0
- data/spec/lib/phony/trunk_code_spec.rb +85 -0
- metadata +8 -6
@@ -179,6 +179,14 @@ describe 'plausibility' do
|
|
179
179
|
Phony.plausible?('+359 998 123456').should be_truthy
|
180
180
|
Phony.plausible?('+359 999 123456').should be_truthy
|
181
181
|
end
|
182
|
+
it_is_correct_for 'Colombia', :samples => ['+57 601 411 1899',
|
183
|
+
'+57 602 111 2222',
|
184
|
+
'+57 603 111 2222',
|
185
|
+
'+57 604 111 2222',
|
186
|
+
'+57 605 111 2222',
|
187
|
+
'+57 606 111 2222',
|
188
|
+
'+57 607 111 2222',
|
189
|
+
'+57 608 111 2222']
|
182
190
|
it_is_correct_for 'Congo', :samples => '+242 1234 56789'
|
183
191
|
it_is_correct_for 'Cook Islands', :samples => '+682 71928'
|
184
192
|
it_is_correct_for 'Costa Rica', :samples => '+506 2 234 5678'
|
@@ -192,7 +200,7 @@ describe 'plausibility' do
|
|
192
200
|
Phony.plausible?('+385 60 12 345').should be_truthy # Premium rate
|
193
201
|
Phony.plausible?('+385 62 123 456').should be_truthy # Premium, personal and UAN
|
194
202
|
end
|
195
|
-
it_is_correct_for "Côte d'Ivoire", :samples => '+225
|
203
|
+
it_is_correct_for "Côte d'Ivoire", :samples => '+225 01 9358 8764'
|
196
204
|
it_is_correct_for 'Democratic Republic of Timor-Leste', :samples => ['+670 465 7886', '+670 7465 7886']
|
197
205
|
it_is_correct_for 'Democratic Republic of the Congo', :samples => '+243 80 864 9794'
|
198
206
|
it_is_correct_for 'Diego Garcia', :samples => '+246 123 7686'
|
@@ -249,7 +257,14 @@ describe 'plausibility' do
|
|
249
257
|
end
|
250
258
|
it_is_correct_for 'French Guiana (French Department of)', :samples => '+594 594 123 456'
|
251
259
|
it_is_correct_for "French Polynesia (Territoire français d'outre-mer)", :samples => '+689 87 27 84 00'
|
252
|
-
|
260
|
+
it 'is correct for Gabon' do
|
261
|
+
Phony.plausible?('+241 1 627 739').should be_truthy
|
262
|
+
Phony.plausible?('+241 12 34 56 78').should be_truthy
|
263
|
+
end
|
264
|
+
# it_is_correct_for 'Gabonese Republic', :samples => [
|
265
|
+
# '+241 1 627 739',
|
266
|
+
# '+241 12 34 56 78',
|
267
|
+
# ]
|
253
268
|
it_is_correct_for 'Gambia', :samples => '+220 989 5148'
|
254
269
|
it_is_correct_for 'Germany', :samples => [
|
255
270
|
'+49 69 155 1',
|
@@ -317,10 +332,19 @@ describe 'plausibility' do
|
|
317
332
|
it_is_correct_for 'Macedonia', :samples => ['+389 2 123 4567',
|
318
333
|
'+389 7 124 3456',
|
319
334
|
'+389 7 234 5678']
|
320
|
-
it_is_correct_for 'Madagascar', :samples => ['+261 20
|
321
|
-
'+261
|
322
|
-
'+261
|
323
|
-
'+261
|
335
|
+
it_is_correct_for 'Madagascar', :samples => ['+261 20 23 456 78',
|
336
|
+
'+261 32 34 546 78',
|
337
|
+
'+261 33 34 546 78',
|
338
|
+
'+261 34 34 546 78',
|
339
|
+
'+261 38 34 546 78']
|
340
|
+
it 'is incorrect for Madagascar' do
|
341
|
+
Phony.plausible?('+261 20 012 345 678').should be_falsey
|
342
|
+
Phony.plausible?('+261 20 12 434 569').should be_falsey
|
343
|
+
Phony.plausible?('+261 51 23 4567 8').should be_falsey
|
344
|
+
Phony.plausible?('+261 34 345 46789').should be_falsey
|
345
|
+
Phony.plausible?('+261 34 345 467').should be_falsey
|
346
|
+
end
|
347
|
+
|
324
348
|
it_is_correct_for 'Malawi', :samples => ['+265 1725 123',
|
325
349
|
'+265 213 456 789',
|
326
350
|
'+265 9123 456',
|
@@ -392,6 +416,12 @@ describe 'plausibility' do
|
|
392
416
|
'+507 6 123 4567',
|
393
417
|
'+507 2 123 456']
|
394
418
|
it_is_correct_for 'Reunion / Mayotte (new)', :samples => '+262 295 276 964'
|
419
|
+
it_is_correct_for 'Rwanda', :samples => ['+250 72 1234567',
|
420
|
+
'+250 73 1234567',
|
421
|
+
'+250 78 1234567',
|
422
|
+
'+250 79 1234567',
|
423
|
+
'+250 25 1234567',
|
424
|
+
'+250 06 123456']
|
395
425
|
it_is_correct_for 'Saint Helena', :samples => '+290 5134'
|
396
426
|
it_is_correct_for 'Saint Pierre and Miquelon (Collectivité territoriale de la République française)', :samples => '+508 474 714'
|
397
427
|
it_is_correct_for 'Salvador (El)', :samples => [
|
@@ -420,8 +450,10 @@ describe 'plausibility' do
|
|
420
450
|
['+381 11 123 456', '+381 11 123 4567'],
|
421
451
|
'+381 72 123 456',
|
422
452
|
'+381 60 123',
|
423
|
-
'+381 60 123 4567',
|
453
|
+
['+381 60 123 4567', '+381 69 123 456'],
|
424
454
|
'+381 42 123 456',
|
455
|
+
'+381 677 123 456',
|
456
|
+
'+381 678 123 456',
|
425
457
|
'+381 9 123 4567',
|
426
458
|
'+381 60 123',
|
427
459
|
'+381 60 123 456 7890',
|
@@ -492,7 +524,10 @@ describe 'plausibility' do
|
|
492
524
|
it_is_correct_for 'Lybia', :samples => ['+218 205 123 45',
|
493
525
|
'+218 22 123 456',
|
494
526
|
'+218 21 1234 456',
|
495
|
-
'+218 91 1234 456'
|
527
|
+
'+218 91 1234 456',
|
528
|
+
'+218 92 1234 456',
|
529
|
+
'+218 94 1234 456',
|
530
|
+
'+218 95 1234 456']
|
496
531
|
it_is_correct_for 'Mongolia', :samples => ['+976 11 123 45',
|
497
532
|
['+976 121 12 34', '+976 121 12 345'],
|
498
533
|
'+976 70 123 456',
|
@@ -553,9 +588,12 @@ describe 'plausibility' do
|
|
553
588
|
'+967 58 1234']
|
554
589
|
it 'is correct for Zambia' do
|
555
590
|
Phony.plausible?('+260 211 123456').should be_truthy # Fixed
|
556
|
-
Phony.plausible?('+260
|
557
|
-
Phony.plausible?('+260
|
558
|
-
Phony.plausible?('+260
|
591
|
+
Phony.plausible?('+260 96 512 4567').should be_truthy # MTN Mobile
|
592
|
+
Phony.plausible?('+260 97 712 3456').should be_truthy # Airtel Mobile
|
593
|
+
Phony.plausible?('+260 95 512 4567').should be_truthy # Zamtel Mobile
|
594
|
+
Phony.plausible?('+260 96 512 456').should be_falsy # MTN Mobile (Too short)
|
595
|
+
Phony.plausible?('+260 97 812 345').should be_falsy # Airtel Mobile (Too short)
|
596
|
+
Phony.plausible?('+260 95 512 345').should be_falsy # Zamtel Mobile (Too short)
|
559
597
|
Phony.plausible?('+260 800 123 456').should be_truthy # Toll free
|
560
598
|
end
|
561
599
|
it_is_correct_for 'Zimbabwe', :samples => [['+263 2582 123 456', '+263 2582 123'],
|
@@ -570,6 +608,20 @@ describe 'plausibility' do
|
|
570
608
|
Phony.plausible?('+62 22 0000 0000').should be_truthy
|
571
609
|
Phony.plausible?('+62 22 000 000 000').should be_truthy
|
572
610
|
end
|
611
|
+
|
612
|
+
it 'is correct for Italy' do
|
613
|
+
Phony.plausible?('+39 0574 123').should be_falsy
|
614
|
+
Phony.plausible?('+39 0574 1234').should be_truthy
|
615
|
+
Phony.plausible?('+39 0574 12345').should be_falsy
|
616
|
+
|
617
|
+
Phony.plausible?('+39 085 541').should be_falsy
|
618
|
+
Phony.plausible?('+39 085 5410').should be_truthy
|
619
|
+
Phony.plausible?('+39 085 54105').should be_truthy
|
620
|
+
|
621
|
+
Phony.plausible?('+39 06 4991').should be_falsy
|
622
|
+
Phony.plausible?('+39 06 49911').should be_truthy
|
623
|
+
Phony.plausible?('+39 06 499112').should be_truthy
|
624
|
+
end
|
573
625
|
|
574
626
|
it 'is correct for Russia' do
|
575
627
|
Phony.plausible?('+7 3522 000 000').should be_truthy
|
@@ -110,6 +110,7 @@ describe 'country descriptions' do
|
|
110
110
|
it_splits '32466123456', ['32', '466', '12', '34', '56'] # mobile (Vectone)
|
111
111
|
it_splits '32467123456', ['32', '467', '12', '34', '56'] # mobile (Telenet)
|
112
112
|
it_splits '32468123456', ['32', '468', '12', '34', '56'] # mobile (Telenet)
|
113
|
+
it_splits '32469123456', ['32', '469', '12', '34', '56'] # mobile ()
|
113
114
|
it_splits '32475123456', ['32', '475', '12', '34', '56'] # mobile (Proximus)
|
114
115
|
it_splits '32485123456', ['32', '485', '12', '34', '56'] # mobile (Telenet)
|
115
116
|
it_splits '32495123456', ['32', '495', '12', '34', '56'] # mobile (Orange)
|
@@ -239,7 +240,7 @@ describe 'country descriptions' do
|
|
239
240
|
end
|
240
241
|
end
|
241
242
|
describe 'Colombia' do
|
242
|
-
it_splits '5711234567', ['57', '1', '123', '4567']
|
243
|
+
it_splits '5711234567', ['57', '1', '123', '4567'] # Outdated.
|
243
244
|
it_splits '573101234567', ['57', '310', '123', '4567'] # mobile
|
244
245
|
end
|
245
246
|
describe 'Croatia' do
|
@@ -459,8 +460,9 @@ describe 'country descriptions' do
|
|
459
460
|
it_splits '3934869528123',['39', '348', '695', '2812', '3'] # Mobile (8-digit subscriber no - new)
|
460
461
|
it_splits '393357210488', ['39', '335', '721', '0488'] # Mobile
|
461
462
|
it_splits '393248644272', ['39', '324', '864', '4272'] # Mobile
|
462
|
-
it_splits '
|
463
|
-
it_splits '
|
463
|
+
it_splits '390612341', ['39', '06', '12341'] # Roma 5 digit
|
464
|
+
it_splits '3906123412', ['39', '06', '1234', '12'] # Roma 6 digit
|
465
|
+
it_splits '39061234123', ['39', '06', '1234', '123'] # Roma 7 digit
|
464
466
|
it_splits '390612341234', ['39', '06', '1234', '1234'] # Roma 8 digit
|
465
467
|
it_splits '3902888388', ['39', '02', '8883', '88'] # Milano 6 digit
|
466
468
|
it_splits '39028883888', ['39', '02', '8883', '888'] # Milano 7 digit
|
@@ -469,6 +471,7 @@ describe 'country descriptions' do
|
|
469
471
|
it_splits '3903123391', ['39', '031', '23391'] # Como
|
470
472
|
it_splits '390909709511', ['39', '090', '9709511'] # Barcellona
|
471
473
|
it_splits '390471811353', ['39', '0471', '811', '353'] # Bolzano
|
474
|
+
it_splits '3905745730', ['39', '0574', '5730'] # Prato
|
472
475
|
end
|
473
476
|
describe 'Japan' do
|
474
477
|
it_splits '81312345678', %w(81 3 1234 5678) # Tokyo
|
@@ -484,6 +487,8 @@ describe 'country descriptions' do
|
|
484
487
|
it_splits '817012345678', %w(81 70 1234 5678) # PHS
|
485
488
|
it_splits '818012345678', %w(81 80 1234 5678) # Cellular
|
486
489
|
it_splits '819012345678', %w(81 90 1234 5678) # Cellular
|
490
|
+
it_splits '810570123456', %w(81 570 123 456) # Navi-dial
|
491
|
+
it_splits '810180123456', %w(81 180 123 456) # Tele-gong/Tele-dome
|
487
492
|
end
|
488
493
|
describe 'Kenya' do
|
489
494
|
it_splits '254201234567', ['254', '20', '1234567'] # Nairobi
|
@@ -677,6 +682,7 @@ describe 'country descriptions' do
|
|
677
682
|
it_splits '250781234567', ['250', '78', '1234567'] # mobile
|
678
683
|
it_splits '250721234567', ['250', '72', '1234567'] # mobile
|
679
684
|
it_splits '250731234567', ['250', '73', '1234567'] # mobile
|
685
|
+
it_splits '250791234567', ['250', '79', '1234567'] # mobile
|
680
686
|
it_splits '250251234567', ['250', '25', '1234567'] # fixed
|
681
687
|
it_splits '25006123456', ['250', '06', '123456'] # fixed
|
682
688
|
end
|
@@ -759,6 +765,7 @@ describe 'country descriptions' do
|
|
759
765
|
describe 'Switzerland' do
|
760
766
|
it_splits '41443643532', ['41', '44', '364', '35', '32'] # Zurich (usually)
|
761
767
|
it_splits '41800334455', ['41', '800', '334', '455'] # Service number
|
768
|
+
it_splits '41860443643532', ['41', '860', '44', '364', '35', '32'] # Voicemail access
|
762
769
|
it_splits '41900123456', ['41', '900', '123', '456'] # Business Number
|
763
770
|
it_splits '41901123456', ['41', '901', '123', '456'] # Business Number Entertainment
|
764
771
|
it_splits '41906123456', ['41', '906', '123', '456'] # Business Number Adult Entertainment
|
@@ -847,9 +854,9 @@ describe 'country descriptions' do
|
|
847
854
|
end
|
848
855
|
describe 'Zambia' do
|
849
856
|
it_splits '260211123456', ['260', '211', '123456'] # Fixed
|
850
|
-
it_splits '260955123456', ['260', '
|
851
|
-
it_splits '260967123456', ['260', '
|
852
|
-
it_splits '260978123456', ['260', '
|
857
|
+
it_splits '260955123456', ['260', '95', '512', '3456'] # Mobile
|
858
|
+
it_splits '260967123456', ['260', '96', '712', '3456'] # Mobile
|
859
|
+
it_splits '260978123456', ['260', '97', '812', '3456'] # Mobile
|
853
860
|
it_splits '260800123456', ['260', '800', '123', '456'] # Toll free
|
854
861
|
end
|
855
862
|
describe 'New Zealand' do
|
@@ -895,8 +902,8 @@ describe 'country descriptions' do
|
|
895
902
|
it_splits '50622345678', %w(506 2 234 5678)
|
896
903
|
end
|
897
904
|
describe "Côte d'Ivoire" do
|
898
|
-
it_splits '
|
899
|
-
it_splits '
|
905
|
+
it_splits '2250107335518', ['225', '01', '07', '33', '55', '18']
|
906
|
+
it_splits '2250237335518', ['225', '02', '37', '33', '55', '18']
|
900
907
|
end
|
901
908
|
describe 'Democratic Republic of Timor-Leste' do
|
902
909
|
it_splits '6701742945', ['670', false, '174', '2945']
|
@@ -959,6 +966,7 @@ describe 'country descriptions' do
|
|
959
966
|
end
|
960
967
|
describe 'Gabonese Republic' do
|
961
968
|
it_splits '2411834375', ['241', '1', '834', '375']
|
969
|
+
it_splits '24174012345', ['241', '74', '01', '23', '45']
|
962
970
|
end
|
963
971
|
describe 'Gambia' do
|
964
972
|
it_splits '2206683355', ['220', false, '668', '3355']
|
@@ -1046,11 +1054,14 @@ describe 'country descriptions' do
|
|
1046
1054
|
it_splits '21822123456', %w(218 22 123 456)
|
1047
1055
|
it_splits '218211234456', %w(218 21 1234 456)
|
1048
1056
|
it_splits '218911234456', %w(218 91 1234 456)
|
1057
|
+
it_splits '218941234456', %w(218 94 1234 456)
|
1058
|
+
it_splits '218951234456', %w(218 95 1234 456)
|
1049
1059
|
end
|
1050
1060
|
describe 'Madagascar' do
|
1051
|
-
it_splits '
|
1052
|
-
it_splits '
|
1053
|
-
it_splits '
|
1061
|
+
it_splits '261202254716', ['261', '20', *%w(22 547 16)]
|
1062
|
+
it_splits '261320254716', ['261', '32', *%w(02 547 16)]
|
1063
|
+
it_splits '261330254716', ['261', '33', *%w(02 547 16)]
|
1064
|
+
it_splits '261340254716', ['261', '34', *%w(02 547 16)]
|
1054
1065
|
end
|
1055
1066
|
describe 'Malawi' do
|
1056
1067
|
it_splits '2651725123', ['265', false, '1725', '123']
|
@@ -1163,6 +1174,17 @@ describe 'country descriptions' do
|
|
1163
1174
|
it_splits '2349087661234', %w(234 908 766 1234)
|
1164
1175
|
it_splits '2349097661234', %w(234 909 766 1234)
|
1165
1176
|
|
1177
|
+
it_splits '2349107661234', %w(234 910 766 1234)
|
1178
|
+
it_splits '2349117661234', %w(234 911 766 1234)
|
1179
|
+
it_splits '2349127661234', %w(234 912 766 1234)
|
1180
|
+
it_splits '2349137661234', %w(234 913 766 1234)
|
1181
|
+
it_splits '2349147661234', %w(234 914 766 1234)
|
1182
|
+
it_splits '2349157661234', %w(234 915 766 1234)
|
1183
|
+
it_splits '2349167661234', %w(234 916 766 1234)
|
1184
|
+
it_splits '2349177661234', %w(234 917 766 1234)
|
1185
|
+
it_splits '2349187661234', %w(234 918 766 1234)
|
1186
|
+
it_splits '2349197661234', %w(234 919 766 1234)
|
1187
|
+
|
1166
1188
|
it_splits '2348107661234', %w(234 810 766 1234)
|
1167
1189
|
it_splits '2348117661234', %w(234 811 766 1234)
|
1168
1190
|
it_splits '2348127661234', %w(234 812 766 1234)
|
@@ -1214,6 +1236,7 @@ describe 'country descriptions' do
|
|
1214
1236
|
describe 'Samoa (Independent State of)' do
|
1215
1237
|
it_splits '685800123', ['685', false, '800', '123']
|
1216
1238
|
it_splits '68561123', ['685', false, '61', '123']
|
1239
|
+
it_splits '6857112345', ['685', false, '711', '2345']
|
1217
1240
|
it_splits '6857212345', ['685', false, '721', '2345']
|
1218
1241
|
it_splits '685830123', ['685', false, '830', '123']
|
1219
1242
|
it_splits '685601234', ['685', false, '601', '234']
|
@@ -1302,6 +1325,7 @@ describe 'country descriptions' do
|
|
1302
1325
|
it_splits '88633123456', %w(886 3 312 3456)
|
1303
1326
|
it_splits '88637123456', %w(886 37 12 3456)
|
1304
1327
|
it_splits '88682712345', %w(886 82 71 2345)
|
1328
|
+
it_splits '886801123123', %w(886 801 123 123)
|
1305
1329
|
it_splits '88689712345', %w(886 89 71 2345)
|
1306
1330
|
it_splits '88682672345', %w(886 826 7 2345)
|
1307
1331
|
it_splits '88683672345', %w(886 836 7 2345)
|
@@ -1412,6 +1436,14 @@ describe 'country descriptions' do
|
|
1412
1436
|
it_splits number, ['263', prefix, '234', '5678']
|
1413
1437
|
end
|
1414
1438
|
end
|
1439
|
+
|
1440
|
+
describe 'Universal International Freephone' do
|
1441
|
+
it_splits '80012345678', ['800', false, '12345678']
|
1442
|
+
end
|
1443
|
+
|
1444
|
+
describe 'Shared-Cost Service' do
|
1445
|
+
it_splits '80812345678', ['808', false, '12345678']
|
1446
|
+
end
|
1415
1447
|
end
|
1416
1448
|
|
1417
1449
|
end
|
@@ -1,32 +1,51 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Phony::CountryCodes do
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
|
5
|
+
let(:countries) { Phony::CountryCodes.instance }
|
6
|
+
|
7
|
+
describe '#plausible?' do
|
8
|
+
it 'raises an error on a too long ccc' do
|
9
|
+
expect do
|
10
|
+
countries.plausible?('+1 868 7620266', ccc: '1868123')
|
11
|
+
end.to raise_error(ArgumentError, %Q{The provided ccc option is too long and includes more than a cc ('1') and ndc ('868'). It also includes '123'.})
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'ccc handling' do
|
16
|
+
it 'splits a ccc correctly' do
|
17
|
+
cc, ndc, *local = countries.split('1868')
|
18
|
+
cc.should eq('1')
|
19
|
+
ndc.should eq('868')
|
20
|
+
end
|
21
|
+
it 'splits a ccc correctly' do
|
22
|
+
cc, ndc, *local = countries.split('1868')
|
23
|
+
cc.should eq('1')
|
24
|
+
ndc.should eq('868')
|
25
|
+
end
|
7
26
|
end
|
8
27
|
|
9
28
|
describe '#[]' do
|
10
29
|
it 'returns a country' do
|
11
|
-
|
30
|
+
countries['41'].class.should eql Phony::Country
|
12
31
|
end
|
13
32
|
end
|
14
33
|
|
15
34
|
describe '#country_for' do
|
16
35
|
it 'returns a country' do
|
17
|
-
|
36
|
+
countries.send(:country_for, '41').class.should eql Phony::Country
|
18
37
|
end
|
19
38
|
end
|
20
39
|
|
21
40
|
describe '#countrify' do
|
22
41
|
it 'returns a country' do
|
23
|
-
|
42
|
+
countries.send(:countrify, '441231212', '41').should eql '41441231212'
|
24
43
|
end
|
25
44
|
end
|
26
45
|
describe '#countrify!' do
|
27
46
|
it 'in-place replaces the number' do
|
28
47
|
number = '441231212'
|
29
|
-
|
48
|
+
countries.send(:countrify!, number, '41').should eql number
|
30
49
|
|
31
50
|
number.should == '41441231212'
|
32
51
|
end
|
@@ -34,127 +53,127 @@ describe Phony::CountryCodes do
|
|
34
53
|
|
35
54
|
describe '#vanity?' do
|
36
55
|
it 'returns true if so' do
|
37
|
-
|
56
|
+
countries.vanity?('1800HELLOES').should eql true
|
38
57
|
end
|
39
58
|
it 'returns false if not' do
|
40
|
-
|
59
|
+
countries.vanity?('18001234567').should eql false
|
41
60
|
end
|
42
61
|
end
|
43
62
|
|
44
63
|
describe 'normalize' do
|
45
64
|
it 'normalizes correctly' do
|
46
|
-
|
65
|
+
countries.normalize('0041-44-364-35-32').should eql '41443643532'
|
47
66
|
end
|
48
67
|
it 'normalizes correctly with CC option' do
|
49
|
-
|
68
|
+
countries.normalize('044-364-35-32', cc: '41').should eql '41443643532'
|
50
69
|
end
|
51
70
|
|
52
71
|
context 'specific countries' do
|
53
72
|
it 'handles Congo correctly' do
|
54
|
-
|
55
|
-
|
73
|
+
countries.normalize('+242 0571 73992').should eql '242057173992'
|
74
|
+
countries.normalize('+242 2221 15932').should eql '242222115932'
|
56
75
|
end
|
57
76
|
end
|
58
77
|
end
|
59
78
|
|
60
79
|
describe 'formatted' do
|
61
80
|
it 'formats correctly' do
|
62
|
-
|
81
|
+
countries.formatted('41443643532', :format => :international, :spaces => :-).should eql '+41-44-364-35-32'
|
63
82
|
end
|
64
83
|
it 'formats correctly' do
|
65
|
-
|
84
|
+
countries.formatted('41443643532', :format => :international_relative, :spaces => :-).should eql '0041-44-364-35-32'
|
66
85
|
end
|
67
86
|
it 'formats correctly' do
|
68
|
-
|
87
|
+
countries.formatted('41443643532', :format => :national, :spaces => :-).should eql '044-364-35-32'
|
69
88
|
end
|
70
89
|
context 'specific' do
|
71
90
|
it 'formats Ireland correctly' do
|
72
|
-
|
91
|
+
countries.formatted("3533451234", :format => :national).should eql '0345 1234'
|
73
92
|
end
|
74
93
|
it 'formats Ireland correctly' do
|
75
|
-
|
94
|
+
countries.formatted("353411231234", :format => :national).should eql '041 123 1234'
|
76
95
|
end
|
77
96
|
it 'formats Spain correctly' do
|
78
|
-
|
97
|
+
countries.formatted("34123456789", :format => :national).should eql '123 456 789'
|
79
98
|
end
|
80
99
|
it 'formats Cambodia correctly' do
|
81
|
-
|
100
|
+
countries.formatted('85512239123', :format => :national).should eql '012 239 123'
|
82
101
|
end
|
83
102
|
it 'formats the US correctly' do
|
84
|
-
|
103
|
+
countries.formatted('18005551212', :format => :national, :spaces => :-).should eql '(800)-555-1212'
|
85
104
|
end
|
86
105
|
it 'formats the US correctly' do
|
87
|
-
|
106
|
+
countries.formatted('18005551212', :format => :national, :spaces => :-).should eql '(800)-555-1212'
|
88
107
|
end
|
89
108
|
end
|
90
109
|
context 'default' do
|
91
110
|
it "should format swiss numbers" do
|
92
|
-
|
111
|
+
countries.formatted('41443643532').should eql '+41 44 364 35 32'
|
93
112
|
end
|
94
113
|
it "should format swiss service numbers" do
|
95
|
-
|
114
|
+
countries.formatted('41800112233').should eql '+41 800 112 233'
|
96
115
|
end
|
97
116
|
it "should format austrian numbers" do
|
98
|
-
|
117
|
+
countries.formatted('43198110').should eql '+43 1 98110'
|
99
118
|
end
|
100
119
|
it "should format american numbers" do
|
101
|
-
|
120
|
+
countries.formatted('18705551122').should eql '+1 (870) 555-1122'
|
102
121
|
end
|
103
122
|
it "should format irish numbers" do
|
104
|
-
|
123
|
+
countries.formatted('35311234567').should eql '+353 1 123 4567'
|
105
124
|
end
|
106
125
|
end
|
107
126
|
describe "international" do
|
108
127
|
it "should format north american numbers" do
|
109
|
-
|
128
|
+
countries.formatted('18091231234', :format => :international).should eql '+1 (809) 123-1234'
|
110
129
|
end
|
111
130
|
it "should format austrian numbers" do
|
112
|
-
|
131
|
+
countries.formatted('43198110', :format => :international).should eql '+43 1 98110'
|
113
132
|
end
|
114
133
|
it "should format austrian numbers" do
|
115
|
-
|
134
|
+
countries.formatted('43198110', :format => :international_absolute).should eql '+43 1 98110'
|
116
135
|
end
|
117
136
|
it "should format french numbers" do
|
118
|
-
|
137
|
+
countries.formatted('33142278186', :format => :+).should eql '+33 1 42 27 81 86'
|
119
138
|
end
|
120
139
|
it "should format austrian numbers" do
|
121
|
-
|
140
|
+
countries.formatted('43198110', :format => :international_relative).should eql '0043 1 98110'
|
122
141
|
end
|
123
142
|
it 'should format liechtensteiner numbers' do
|
124
|
-
|
143
|
+
countries.formatted('4233841148', :format => :international_relative).should eql '00423 384 11 48'
|
125
144
|
end
|
126
145
|
it "should format irish numbers" do
|
127
|
-
|
146
|
+
countries.formatted('35311234567', :format => :international).should eql '+353 1 123 4567'
|
128
147
|
end
|
129
148
|
it "should format luxembourgian numbers" do
|
130
|
-
|
149
|
+
countries.formatted('352222809', :format => :international).should eql '+352 22 28 09'
|
131
150
|
end
|
132
151
|
it "should format luxembourgian 4-digit ndc numbers" do
|
133
|
-
|
152
|
+
countries.formatted('35226222809', :format => :international).should eql '+352 2622 28 09'
|
134
153
|
end
|
135
154
|
it "should format luxembourgian mobile numbers" do
|
136
|
-
|
155
|
+
countries.formatted('352621123456', :format => :international).should eql '+352 621 123 456'
|
137
156
|
end
|
138
157
|
it "should format luxembourgian city numbers" do
|
139
|
-
|
158
|
+
countries.formatted('3524123456', :format => :international).should eql '+352 41 23 45 6'
|
140
159
|
end
|
141
160
|
it "should format luxembourgian machine to machine numbers" do
|
142
|
-
|
161
|
+
countries.formatted('352602112345678', :format => :international).should eql '+352 6021 12 34 56 78'
|
143
162
|
end
|
144
163
|
it "should format luxembourgian numbers" do
|
145
|
-
|
164
|
+
countries.formatted('352370431', :format => :international).should eql '+352 37 04 31'
|
146
165
|
end
|
147
166
|
it "should format luxembourgian numbers" do
|
148
|
-
|
167
|
+
countries.formatted('35227855', :format => :international).should eql '+352 27 85 5'
|
149
168
|
end
|
150
169
|
it "should format nigerian lagosian numbers" do
|
151
|
-
|
170
|
+
countries.formatted('23414480000', :format => :international).should eql '+234 1 448 0000'
|
152
171
|
end
|
153
172
|
it "should format nigerian beninese numbers" do
|
154
|
-
|
173
|
+
countries.formatted('23452123456', :format => :international).should eql '+234 52 123 456'
|
155
174
|
end
|
156
175
|
it "should format nigerian mobile numbers" do
|
157
|
-
|
176
|
+
countries.formatted('2347061234567', :format => :international).should eql '+234 706 123 4567'
|
158
177
|
end
|
159
178
|
context 'with no spaces' do
|
160
179
|
it "should format north american numbers" do
|
@@ -43,6 +43,18 @@ describe Phony::Country do
|
|
43
43
|
Phony.normalize('+378903549').should == '3780549903549'
|
44
44
|
end
|
45
45
|
end
|
46
|
+
describe 'Japan' do
|
47
|
+
it 'normalizes correctly' do
|
48
|
+
Phony.normalize('+81-03-1234-5634').should == '81312345634'
|
49
|
+
Phony.normalize('03-1234-5634', cc: '81').should == '81312345634'
|
50
|
+
end
|
51
|
+
it 'formats correctly' do
|
52
|
+
Phony.format('81312345634').should == '+81-3-1234-5634'
|
53
|
+
end
|
54
|
+
it 'splits correctly' do
|
55
|
+
Phony.split('81312345634').should == %w(81 3 1234 5634)
|
56
|
+
end
|
57
|
+
end
|
46
58
|
end
|
47
59
|
|
48
60
|
context "without special cases (with switzerland)" do
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Phony::TrunkCode do
|
4
|
+
|
5
|
+
describe '#format' do
|
6
|
+
it 'is correct' do
|
7
|
+
code = described_class.new('0')
|
8
|
+
expect(code.format('%s %s')).to eq '0'
|
9
|
+
end
|
10
|
+
it 'is correct' do
|
11
|
+
code = described_class.new('0', format: true)
|
12
|
+
expect(code.format('%s %s')).to eq '0'
|
13
|
+
end
|
14
|
+
it 'is correct' do
|
15
|
+
code = described_class.new('0', format: false)
|
16
|
+
expect(code.format('%s %s')).to eq nil
|
17
|
+
end
|
18
|
+
it 'is correct' do
|
19
|
+
code = described_class.new('06')
|
20
|
+
expect(code.format('%s %s')).to eq '06'
|
21
|
+
end
|
22
|
+
it 'is correct' do
|
23
|
+
code = described_class.new('06', format: true)
|
24
|
+
expect(code.format('%s %s')).to eq '06'
|
25
|
+
end
|
26
|
+
it 'is correct' do
|
27
|
+
code = described_class.new('06', format: false)
|
28
|
+
expect(code.format('%s %s')).to eq nil
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '#normalize' do
|
33
|
+
it 'is correct' do
|
34
|
+
code = described_class.new('0')
|
35
|
+
expect(code.normalize('0123')).to eq '0123'
|
36
|
+
end
|
37
|
+
it 'is correct' do
|
38
|
+
code = described_class.new('0', normalize: true)
|
39
|
+
expect(code.normalize('0123')).to eq '0123'
|
40
|
+
end
|
41
|
+
it 'is correct' do
|
42
|
+
code = described_class.new('0', normalize: false)
|
43
|
+
expect(code.normalize('0123')).to eq '0123'
|
44
|
+
end
|
45
|
+
it 'is correct' do
|
46
|
+
code = described_class.new('06')
|
47
|
+
expect(code.normalize('06123')).to eq '06123'
|
48
|
+
end
|
49
|
+
it 'is correct' do
|
50
|
+
code = described_class.new('06', normalize: true)
|
51
|
+
expect(code.normalize('06123')).to eq '06123'
|
52
|
+
end
|
53
|
+
it 'is correct' do
|
54
|
+
code = described_class.new('06', normalize: false)
|
55
|
+
expect(code.normalize('0123')).to eq '0123'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe '#split' do
|
60
|
+
it 'is correct' do
|
61
|
+
code = described_class.new('0')
|
62
|
+
expect(code.split('0123')).to eq [code, '0123']
|
63
|
+
end
|
64
|
+
it 'is correct' do
|
65
|
+
code = described_class.new('0', split: true)
|
66
|
+
expect(code.split('0123')).to eq [code, '123']
|
67
|
+
end
|
68
|
+
it 'is correct' do
|
69
|
+
code = described_class.new('0', split: false)
|
70
|
+
expect(code.split('0123')).to eq [code, '0123']
|
71
|
+
end
|
72
|
+
it 'is correct' do
|
73
|
+
code = described_class.new('06')
|
74
|
+
expect(code.split('06123')).to eq [code, '06123']
|
75
|
+
end
|
76
|
+
it 'is correct' do
|
77
|
+
code = described_class.new('06', split: true)
|
78
|
+
expect(code.split('06123')).to eq [code, '123']
|
79
|
+
end
|
80
|
+
it 'is correct' do
|
81
|
+
code = described_class.new('06', split: false)
|
82
|
+
expect(code.split('06123')).to eq [code, '06123']
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|