phony 2.19.3 → 2.19.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 54c6578da7427af232e98c6a999e1f53a3bf0098da9a3902d191db28c4d534d7
4
- data.tar.gz: 9dac986205602a15d9ccd6ba189dd7fe233664cbbfdc5b7f2cc6c6465648af5b
3
+ metadata.gz: d971b51de8e8d0581c884f90238d00bbdeeee7ca248ae3b93ce75e5b759114fd
4
+ data.tar.gz: d37f03c8ca22a2fcf76b046a38cfd6cc6334d79cd377bb221e1610352b331ee7
5
5
  SHA512:
6
- metadata.gz: 0d2f07e5acbe13ad9b8f5c1a034e9c18e73e0915415617a143afc9555b14071084a323016d4866064862cc78fda2b8cb914b5a80762543b15dfaa986e1cbdc23
7
- data.tar.gz: bc1397a96d18962582bc2a67628d622503cd972712cd27623ed5b93ec1f4157d7fbf8539dadd6bdeb92dd9d423f5c7a709dca051b4e8e49458f14e418ac452c8
6
+ metadata.gz: '028169288dfdcd908210a144add1c6d6eb082703602fd4eaa069c9ca952fe8e3e8c0c46764244af569cf90ba5fb535681369b700e3f273bebde591c534e544d3'
7
+ data.tar.gz: dc281117fa228352a099b3dc28e77d13c7d8145ef93f50ab721817e6b0a6024a32e4f4587c191529142ba987498b62d9a1bd3b9c4cfbf3ae72f2537b70e375ab
@@ -280,6 +280,7 @@ Phony.define do
280
280
  /^[^1]\d{6}$/ => [7]
281
281
  ) |
282
282
  one_of(*ndcs_4digit) >> matched_split(
283
+ /\A\d{4}\z/ => [4],
283
284
  /^1\d{5}$/ => [6],
284
285
  /^1\d{6}$/ => [7],
285
286
  /^[^1]\d{4}$/ => [5],
@@ -111,6 +111,6 @@ Phony.define do
111
111
  one_of(ndcs_with_5_subscriber_numbers) >> split(3,2) |
112
112
  one_of(ndcs_with_6_subscriber_numbers) >> split(3,3) |
113
113
  one_of(ndcs_with_7_subscriber_numbers) >> split(4,3) |
114
- one_of(%w(91 92)) >> split(4,3) | # mobile
114
+ one_of(%w(91 92 94 95)) >> split(4,3) | # mobile
115
115
  fixed(2) >> split(3,3)
116
116
  end
@@ -11,6 +11,7 @@ Phony.define do
11
11
  match(/\A(836)\d{5}\z/) >> split(1,4) | # 馬祖, start with 0836, plus 5 digits
12
12
  match(/\A(82)\d{6}\z/) >> split(2,4) | # 金門, start with 082, plus 6 digits
13
13
  match(/\A(89)\d{6}\z/) >> split(2,4) | # 臺東, start with 089, plus 6 digits
14
+ match(/\A(80\d)\d{6}\z/)>> split(3,4) | # Toll-free number
14
15
  match(/\A(8)\d{7}\z/) >> split(3,4) | # 屏東, start with 08, plus 7 digits
15
16
  match(/\A(49)\d{7}\z/) >> split(3,4) | # 南投, start with 049, plus 7 digits
16
17
  one_of(%w(4)) >> matched_split(
@@ -96,15 +96,16 @@ Phony.define do
96
96
  # Belgium.
97
97
  #
98
98
  # http://en.wikipedia.org/wiki/Telephone_numbers_in_Belgium
99
+ # https://www.bipt.be/operators/publication/national-numbering-plan
99
100
  #
100
101
  country '32', trunk('0') |
101
- match(/^(7[08])\d+$/) >> split(3,3) | # Premium and national rate Services
102
- match(/^(800|90\d)\d+$/) >> split(2,3) | # Toll free service and premium numbers
103
- match(/^(46[05678])\d{6}$/) >> split(2,2,2) | # Mobile (Lycamobile, Telenet, Join Experience, Proximus 0460)
104
- match(/^(4[789]\d)\d{6}$/) >> split(2,2,2) | # Mobile
105
- match(/^(45[56])\d{6}$/) >> split(2,2,2) | # Mobile Vikings and Voo
106
- one_of('2','3','4','9') >> split(3,2,2) | # Short NDCs
107
- fixed(2) >> split(2,2,2) # 2-digit NDCs
102
+ match(/^(7[08])\d+$/) >> split(3,3) | # Premium and national rate Services
103
+ match(/^(800|90\d)\d+$/) >> split(2,3) | # Toll free service and premium numbers
104
+ match(/^(46[056789])\d{6}$/) >> split(2,2,2) | # Mobile (Lycamobile, Telenet, Join Experience, Proximus 0460)
105
+ match(/^(4[789]\d)\d{6}$/) >> split(2,2,2) | # Mobile
106
+ match(/^(45[56])\d{6}$/) >> split(2,2,2) | # Mobile Vikings and Voo
107
+ one_of('2','3','4','9') >> split(3,2,2) | # Short NDCs
108
+ fixed(2) >> split(2,2,2) # 2-digit NDCs
108
109
 
109
110
  # France.
110
111
  #
@@ -154,6 +155,7 @@ Phony.define do
154
155
  #
155
156
  country '41',
156
157
  trunk('0', normalize: true) |
158
+ match(/^(860)\d+$/) >> split(2, 3, 2, 2) | # Voice Mail access
157
159
  match(/^(8(?:00|4[0248]))\d+$/) >> split(3,3) | # Freecall/Shared Cost
158
160
  match(/^(90[016])\d+$/) >> split(3,3) | # Business
159
161
  fixed(2) >> split(3,2,2)
@@ -485,27 +487,31 @@ Phony.define do
485
487
  # Zambia
486
488
  # http://www.wtng.info/wtng-260-zm.html
487
489
  # https://github.com/googlei18n/libphonenumber/
490
+ # https://en.wikipedia.org/wiki/Telephone_numbers_in_Zambia
488
491
  country '260',
489
- match(/^([79][5678]\d)/) >> split(6) | # Mobile
492
+ trunk('0') |
493
+ match(/^(76|77|95|96|97)/) >> split(3, 4) | # Mobile
490
494
  match(/^(800)/) >> split(3,3) | # Toll free
491
495
  match(/^(21[1-8])/) >> split(6) # Fixed
492
496
 
493
- # Madagascar http://www.wtng.info/wtng-261-mg.html
497
+ # Madagascar
498
+ # https://en.wikipedia.org/wiki/Telephone_numbers_in_Madagascar
494
499
  # http://www.itu.int/oth/T020200007F/en
495
500
  country '261',
496
- none >> matched_split(
497
- /\A200\d+\z/ => [2,3,3,3], # Telecom Malagasy (Telma)
498
- /\A20\d+\z/ => [2,3,4], # Telecom Malagasy (Telma)
499
- /\A23\d+\z/ => [2,3,4], # Digitel
500
- /\A30\d+\z/ => [2,3,4], # mobile Madamobil (CDMA2000)
501
- /\A31\d+\z/ => [2,3,4], # mobile Airtel Madagascar
502
- /\A32\d+\z/ => [2,3,4], # mobile Orange Madagascar
503
- /\A33\d+\z/ => [2,3,4], # mobile Airtel Madagascar
504
- /\A34\d+\z/ => [2,3,4], # mobile Telecom Malagasy (Telma)
505
- /\A5\d+\z/ => [3,3,3], # pager
506
- /\A22\d+\z/ => [3,3,3], # satellite GULFSAT Téléphonie
507
- /\A6\d+\z/ => [3,3,3] # satellite
508
- )
501
+ # none >> matched_split(
502
+ # /\A20\d+\z/ => [2,2,3,2], # Telecom Malagasy (Telma)
503
+ # /\A32\d+\z/ => [2,2,3,2], # mobile Orange Madagascar
504
+ # /\A33\d+\z/ => [2,2,3,2], # mobile Airtel Madagascar
505
+ # /\A34\d+\z/ => [2,2,3,2], # mobile Telecom Malagasy (Telma)
506
+ # /\A38\d+\z/ => [2,2,3,2], # mobile Telecom Malagasy (Telma)
507
+ # /\A39\d+\z => [2,2,3,2] # mobile Blueline
508
+ # ),
509
+ match(/\A(20)\d+\z/) >> split(2,3,2) | # fix Telecom Malagasy (Telma)
510
+ match(/\A(32)\d+\z/) >> split(2,3,2) | # mobile Orange Madagascar
511
+ match(/\A(33)\d+\z/) >> split(2,3,2) | # mobile Airtel Madagascar
512
+ match(/\A(34)\d+\z/) >> split(2,3,2) | # mobile Telecom Malagasy (Telma)
513
+ match(/\A(38)\d+\z/) >> split(2,3,2) | # mobile Telecom Malagasy (Telma)
514
+ match(/\A(39)\d+\z/) >> split(2,3,2) # mobile Blueline Madagascar
509
515
 
510
516
  country '262', # Reunion / Mayotte (new) http://www.wtng.info/wtng-262-fr.html
511
517
  trunk('0') |
@@ -971,7 +977,7 @@ Phony.define do
971
977
  /\A800\d+\z/ => [3,3], # freephone
972
978
  /\A830\d+\z/ => [3,3], # shared cost
973
979
  /\A60\d+\z/ => [3,3], # wireless geographic
974
- /\A(72|75|76|77)\d+\z/ => [3,4], # mobile
980
+ /\A(71|72|75|76|77)\d+\z/ => [3,4], # mobile
975
981
  /\A84\d+\z/ => [3,4], # wireless geographic
976
982
  /\A\d+\z/ => [2,3] # geographic
977
983
  )
@@ -992,7 +998,10 @@ Phony.define do
992
998
  country '698', todo # -
993
999
  country '699', todo # -
994
1000
 
995
- country '800', todo # International Freephone Service
1001
+ # International Freephone Service
1002
+ # https://www.itu.int/en/ITU-T/inr/unum/Pages/uifn.aspx
1003
+ country '800', none >> split(8)
1004
+
996
1005
  country '801', todo # -
997
1006
  country '802', todo # -
998
1007
  country '803', todo # -
@@ -1000,7 +1009,7 @@ Phony.define do
1000
1009
  country '805', todo # -
1001
1010
  country '806', todo # -
1002
1011
  country '807', todo # -
1003
- country '808', todo # International Shared Cost Service (ISCS)
1012
+ country '808', none >> split(12) # International Shared Cost Service (ISCS)
1004
1013
  country '809', todo # -
1005
1014
 
1006
1015
  country '830', todo # -
@@ -97,7 +97,7 @@ module Phony
97
97
 
98
98
  # False if it fails the basic check.
99
99
  #
100
- return false unless (4..16) === normalized.size
100
+ return false unless (4..16) === normalized.size # unless hints[:check_length] == false
101
101
 
102
102
  country, cc, rest = partial_split normalized
103
103
 
@@ -62,6 +62,8 @@ module Phony
62
62
  #
63
63
  #
64
64
  def plausible? rest, hints = {}
65
+ return true if hints[:check_length] == false
66
+
65
67
  @length === rest.inject(0) { |total, part| total + part.size }
66
68
  end
67
69
 
@@ -280,6 +280,7 @@ describe 'plausibility' do
280
280
  it_is_correct_for 'Guinea-Bissau', :samples => '+245 44 728 6998'
281
281
  it_is_correct_for 'Guyana', :samples => '+592 263 1234'
282
282
  it_is_correct_for 'Honduras (Republic of)', :samples => '+504 12 961 637'
283
+ it_is_correct_for 'Italy', :samples => ['+39 0574 1234']
283
284
  it_is_correct_for 'Iraq', :samples => ['+964 1 123 4567',
284
285
  '+964 21 113 456',
285
286
  '+964 71 1234 5678']
@@ -324,10 +325,19 @@ describe 'plausibility' do
324
325
  it_is_correct_for 'Macedonia', :samples => ['+389 2 123 4567',
325
326
  '+389 7 124 3456',
326
327
  '+389 7 234 5678']
327
- it_is_correct_for 'Madagascar', :samples => ['+261 20 012 345 678',
328
- '+261 20 124 3456',
329
- '+261 512 345 678',
330
- '+261 33 345 6789']
328
+ it_is_correct_for 'Madagascar', :samples => ['+261 20 23 456 78',
329
+ '+261 32 34 546 78',
330
+ '+261 33 34 546 78',
331
+ '+261 34 34 546 78',
332
+ '+261 38 34 546 78']
333
+ it 'is incorrect for Madagascar' do
334
+ Phony.plausible?('+261 20 012 345 678').should be_falsey
335
+ Phony.plausible?('+261 20 12 434 569').should be_falsey
336
+ Phony.plausible?('+261 51 23 4567 8').should be_falsey
337
+ Phony.plausible?('+261 34 345 46789').should be_falsey
338
+ Phony.plausible?('+261 34 345 467').should be_falsey
339
+ end
340
+
331
341
  it_is_correct_for 'Malawi', :samples => ['+265 1725 123',
332
342
  '+265 213 456 789',
333
343
  '+265 9123 456',
@@ -507,7 +517,10 @@ describe 'plausibility' do
507
517
  it_is_correct_for 'Lybia', :samples => ['+218 205 123 45',
508
518
  '+218 22 123 456',
509
519
  '+218 21 1234 456',
510
- '+218 91 1234 456']
520
+ '+218 91 1234 456',
521
+ '+218 92 1234 456',
522
+ '+218 94 1234 456',
523
+ '+218 95 1234 456']
511
524
  it_is_correct_for 'Mongolia', :samples => ['+976 11 123 45',
512
525
  ['+976 121 12 34', '+976 121 12 345'],
513
526
  '+976 70 123 456',
@@ -568,12 +581,12 @@ describe 'plausibility' do
568
581
  '+967 58 1234']
569
582
  it 'is correct for Zambia' do
570
583
  Phony.plausible?('+260 211 123456').should be_truthy # Fixed
571
- Phony.plausible?('+260 761 123456').should be_truthy # Mobile
572
- Phony.plausible?('+260 772 123456').should be_truthy # Mobile
573
- Phony.plausible?('+260 783 123456').should be_truthy # Mobile
574
- Phony.plausible?('+260 955 123456').should be_truthy # Mobile
575
- Phony.plausible?('+260 967 123456').should be_truthy # Mobile
576
- Phony.plausible?('+260 978 123456').should be_truthy # Mobile
584
+ Phony.plausible?('+260 96 512 4567').should be_truthy # MTN Mobile
585
+ Phony.plausible?('+260 97 712 3456').should be_truthy # Airtel Mobile
586
+ Phony.plausible?('+260 95 512 4567').should be_truthy # Zamtel Mobile
587
+ Phony.plausible?('+260 96 512 456').should be_falsy # MTN Mobile (Too short)
588
+ Phony.plausible?('+260 97 812 345').should be_falsy # Airtel Mobile (Too short)
589
+ Phony.plausible?('+260 95 512 345').should be_falsy # Zamtel Mobile (Too short)
577
590
  Phony.plausible?('+260 800 123 456').should be_truthy # Toll free
578
591
  end
579
592
  it_is_correct_for 'Zimbabwe', :samples => [['+263 2582 123 456', '+263 2582 123'],
@@ -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)
@@ -469,6 +470,7 @@ describe 'country descriptions' do
469
470
  it_splits '3903123391', ['39', '031', '23391'] # Como
470
471
  it_splits '390909709511', ['39', '090', '9709511'] # Barcellona
471
472
  it_splits '390471811353', ['39', '0471', '811', '353'] # Bolzano
473
+ it_splits '3905745730', ['39', '0574', '5730'] # Prato
472
474
  end
473
475
  describe 'Japan' do
474
476
  it_splits '81312345678', %w(81 3 1234 5678) # Tokyo
@@ -762,6 +764,7 @@ describe 'country descriptions' do
762
764
  describe 'Switzerland' do
763
765
  it_splits '41443643532', ['41', '44', '364', '35', '32'] # Zurich (usually)
764
766
  it_splits '41800334455', ['41', '800', '334', '455'] # Service number
767
+ it_splits '41860443643532', ['41', '860', '44', '364', '35', '32'] # Voicemail access
765
768
  it_splits '41900123456', ['41', '900', '123', '456'] # Business Number
766
769
  it_splits '41901123456', ['41', '901', '123', '456'] # Business Number Entertainment
767
770
  it_splits '41906123456', ['41', '906', '123', '456'] # Business Number Adult Entertainment
@@ -850,9 +853,9 @@ describe 'country descriptions' do
850
853
  end
851
854
  describe 'Zambia' do
852
855
  it_splits '260211123456', ['260', '211', '123456'] # Fixed
853
- it_splits '260955123456', ['260', '955', '123456'] # Mobile
854
- it_splits '260967123456', ['260', '967', '123456'] # Mobile
855
- it_splits '260978123456', ['260', '978', '123456'] # Mobile
856
+ it_splits '260955123456', ['260', '95', '512', '3456'] # Mobile
857
+ it_splits '260967123456', ['260', '96', '712', '3456'] # Mobile
858
+ it_splits '260978123456', ['260', '97', '812', '3456'] # Mobile
856
859
  it_splits '260800123456', ['260', '800', '123', '456'] # Toll free
857
860
  end
858
861
  describe 'New Zealand' do
@@ -1050,11 +1053,14 @@ describe 'country descriptions' do
1050
1053
  it_splits '21822123456', %w(218 22 123 456)
1051
1054
  it_splits '218211234456', %w(218 21 1234 456)
1052
1055
  it_splits '218911234456', %w(218 91 1234 456)
1056
+ it_splits '218941234456', %w(218 94 1234 456)
1057
+ it_splits '218951234456', %w(218 95 1234 456)
1053
1058
  end
1054
1059
  describe 'Madagascar' do
1055
- it_splits '26120012345678', ['261', false, '20', '012', '345', '678']
1056
- it_splits '261201243456', ['261', false, *%w(20 124 3456)]
1057
- it_splits '261512345678', ['261', false, *%w(512 345 678)]
1060
+ it_splits '261202254716', ['261', '20', *%w(22 547 16)]
1061
+ it_splits '261320254716', ['261', '32', *%w(02 547 16)]
1062
+ it_splits '261330254716', ['261', '33', *%w(02 547 16)]
1063
+ it_splits '261340254716', ['261', '34', *%w(02 547 16)]
1058
1064
  end
1059
1065
  describe 'Malawi' do
1060
1066
  it_splits '2651725123', ['265', false, '1725', '123']
@@ -1229,6 +1235,7 @@ describe 'country descriptions' do
1229
1235
  describe 'Samoa (Independent State of)' do
1230
1236
  it_splits '685800123', ['685', false, '800', '123']
1231
1237
  it_splits '68561123', ['685', false, '61', '123']
1238
+ it_splits '6857112345', ['685', false, '711', '2345']
1232
1239
  it_splits '6857212345', ['685', false, '721', '2345']
1233
1240
  it_splits '685830123', ['685', false, '830', '123']
1234
1241
  it_splits '685601234', ['685', false, '601', '234']
@@ -1317,6 +1324,7 @@ describe 'country descriptions' do
1317
1324
  it_splits '88633123456', %w(886 3 312 3456)
1318
1325
  it_splits '88637123456', %w(886 37 12 3456)
1319
1326
  it_splits '88682712345', %w(886 82 71 2345)
1327
+ it_splits '886801123123', %w(886 801 123 123)
1320
1328
  it_splits '88689712345', %w(886 89 71 2345)
1321
1329
  it_splits '88682672345', %w(886 826 7 2345)
1322
1330
  it_splits '88683672345', %w(886 836 7 2345)
@@ -1427,6 +1435,14 @@ describe 'country descriptions' do
1427
1435
  it_splits number, ['263', prefix, '234', '5678']
1428
1436
  end
1429
1437
  end
1438
+
1439
+ describe 'Universal International Freephone' do
1440
+ it_splits '80012345678', ['800', false, '12345678']
1441
+ end
1442
+
1443
+ describe 'Shared-Cost Service' do
1444
+ it_splits '80812345678', ['808', false, '12345678']
1445
+ end
1430
1446
  end
1431
1447
 
1432
1448
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phony
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.19.3
4
+ version: 2.19.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Hanke
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-08 00:00:00.000000000 Z
11
+ date: 2022-04-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: 'Fast international phone number (E164 standard) normalizing, splitting
14
14
  and formatting. Lots of formatting options: International (+.., 00..), national
@@ -115,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
115
  - !ruby/object:Gem::Version
116
116
  version: '0'
117
117
  requirements: []
118
- rubygems_version: 3.0.3
118
+ rubygems_version: 3.1.6
119
119
  signing_key:
120
120
  specification_version: 4
121
121
  summary: Fast international phone number (E164 standard) normalizing, splitting and