phony 2.18.15 → 2.20.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|