phony 1.9.0 → 2.19.14

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.
Files changed (82) hide show
  1. checksums.yaml +7 -0
  2. data/README.textile +64 -112
  3. data/lib/phony/config.rb +91 -0
  4. data/lib/phony/countries/argentina.rb +355 -0
  5. data/lib/phony/countries/austria.rb +56 -22
  6. data/lib/phony/countries/bangladesh.rb +57 -0
  7. data/lib/phony/countries/belarus.rb +133 -0
  8. data/lib/phony/countries/brazil.rb +101 -95
  9. data/lib/phony/countries/cambodia.rb +131 -0
  10. data/lib/phony/countries/china.rb +13 -6
  11. data/lib/phony/countries/croatia.rb +23 -0
  12. data/lib/phony/countries/georgia.rb +94 -0
  13. data/lib/phony/countries/germany.rb +66 -42
  14. data/lib/phony/countries/guinea.rb +46 -0
  15. data/lib/phony/countries/india.rb +50 -0
  16. data/lib/phony/countries/indonesia.rb +55 -0
  17. data/lib/phony/countries/ireland.rb +35 -28
  18. data/lib/phony/countries/italy.rb +272 -166
  19. data/lib/phony/countries/japan.rb +468 -0
  20. data/lib/phony/countries/kyrgyzstan.rb +120 -0
  21. data/lib/phony/countries/latvia.rb +43 -0
  22. data/lib/phony/countries/libya.rb +116 -0
  23. data/lib/phony/countries/malaysia.rb +31 -7
  24. data/lib/phony/countries/moldova.rb +53 -0
  25. data/lib/phony/countries/montenegro.rb +30 -0
  26. data/lib/phony/countries/myanmar.rb +55 -0
  27. data/lib/phony/countries/namibia.rb +37 -0
  28. data/lib/phony/countries/nepal.rb +73 -0
  29. data/lib/phony/countries/netherlands.rb +17 -5
  30. data/lib/phony/countries/pakistan.rb +121 -0
  31. data/lib/phony/countries/paraguay.rb +147 -0
  32. data/lib/phony/countries/{russia_kazakhstan_abhasia_south_osetia.rb → russia_kazakhstan_abkhasia_south_ossetia.rb} +35 -24
  33. data/lib/phony/countries/saudi_arabia.rb +40 -0
  34. data/lib/phony/countries/serbia.rb +47 -0
  35. data/lib/phony/countries/somalia.rb +26 -0
  36. data/lib/phony/countries/south_korea.rb +19 -10
  37. data/lib/phony/countries/sweden.rb +58 -38
  38. data/lib/phony/countries/taiwan.rb +28 -0
  39. data/lib/phony/countries/tajikistan.rb +79 -0
  40. data/lib/phony/countries/turkmenistan.rb +76 -0
  41. data/lib/phony/countries/ukraine.rb +630 -0
  42. data/lib/phony/countries/united_kingdom.rb +639 -44
  43. data/lib/phony/countries/uruguay.rb +53 -0
  44. data/lib/phony/countries/vietnam.rb +133 -0
  45. data/lib/phony/countries/zimbabwe.rb +39 -0
  46. data/lib/phony/countries.rb +901 -301
  47. data/lib/phony/country.rb +177 -20
  48. data/lib/phony/country_codes.rb +119 -101
  49. data/lib/phony/dsl.rb +113 -68
  50. data/lib/phony/local_splitters/fixed.rb +25 -1
  51. data/lib/phony/local_splitters/regex.rb +16 -2
  52. data/lib/phony/national_code.rb +7 -7
  53. data/lib/phony/national_splitters/default.rb +35 -3
  54. data/lib/phony/national_splitters/dsl.rb +12 -7
  55. data/lib/phony/national_splitters/fixed.rb +7 -1
  56. data/lib/phony/national_splitters/none.rb +7 -3
  57. data/lib/phony/national_splitters/regex.rb +6 -0
  58. data/lib/phony/national_splitters/variable.rb +13 -9
  59. data/lib/phony/trunk_code.rb +57 -0
  60. data/lib/phony/vanity.rb +3 -3
  61. data/lib/phony.rb +239 -55
  62. data/spec/functional/config_spec.rb +44 -0
  63. data/spec/functional/plausibility_spec.rb +656 -0
  64. data/spec/lib/phony/countries_spec.rb +1207 -119
  65. data/spec/lib/phony/country_codes_spec.rb +99 -81
  66. data/spec/lib/phony/country_spec.rb +54 -14
  67. data/spec/lib/phony/dsl_spec.rb +2 -2
  68. data/spec/lib/phony/local_splitters/fixed_spec.rb +4 -4
  69. data/spec/lib/phony/local_splitters/regex_spec.rb +50 -2
  70. data/spec/lib/phony/national_code_spec.rb +34 -34
  71. data/spec/lib/phony/national_splitters/default_spec.rb +34 -0
  72. data/spec/lib/phony/national_splitters/fixed_spec.rb +12 -6
  73. data/spec/lib/phony/national_splitters/none_spec.rb +13 -3
  74. data/spec/lib/phony/national_splitters/regex_spec.rb +1 -1
  75. data/spec/lib/phony/national_splitters/variable_spec.rb +11 -5
  76. data/spec/lib/phony/trunk_code_spec.rb +85 -0
  77. data/spec/lib/phony/vanity_spec.rb +15 -19
  78. data/spec/lib/phony_spec.rb +59 -277
  79. metadata +67 -34
  80. data/lib/phony/validator.rb +0 -26
  81. data/lib/phony/validators.rb +0 -88
  82. data/spec/lib/phony/validations_spec.rb +0 -109
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Uruguay (Eastern Republic of)
4
+ # https://www.numberingplans.com/?page=dialling&sub=areacodes
5
+ # https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=UY
6
+
7
+ ndcs_with_7_subscriber_numbers = %w(2 4)
8
+
9
+ ndcs_with_6_subscriber_numbers = %w(
10
+ 21
11
+ 22
12
+ 23
13
+ 24
14
+ 25
15
+ 26
16
+ 27
17
+ 29
18
+ 42
19
+ )
20
+
21
+ ndcs_with_5_subscriber_numbers = %w(
22
+ 433
23
+ 434
24
+ 436
25
+ 437
26
+ 438
27
+ 443
28
+ 444
29
+ 445
30
+ 447
31
+ 452
32
+ 453
33
+ 455
34
+ 462
35
+ 463
36
+ 464
37
+ 472
38
+ 473
39
+ )
40
+
41
+
42
+ Phony.define do
43
+ country '598',
44
+ one_of('800') >> split(3,2) | # freephone
45
+ one_of('805') >> split(3,2) | # shared cost
46
+ one_of(%w(900 901 902 903 904 905 906 907 908)) >> split(3,2) | # premium rate
47
+ one_of('909') >> split(3,2) | # ISP
48
+ one_of(ndcs_with_5_subscriber_numbers) >> split(3,2) |
49
+ one_of(ndcs_with_6_subscriber_numbers) >> split(3,3) |
50
+ one_of(%w(93 94 95 96 97 98 99)) >> split(3,3) | # mobile
51
+ one_of(ndcs_with_7_subscriber_numbers) >> split(3,4) |
52
+ fixed(2) >> split(3,3)
53
+ end
@@ -0,0 +1,133 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Vietnamese phone numbers.
4
+ #
5
+ # http://en.wikipedia.org/wiki/Telephone_numbers_in_Vietnam
6
+ # http://www.wtng.info/wtng-84-vn.html
7
+ #
8
+ # Landline numbers are composed of 1 to 3 digit area code + 5 to 8 digits
9
+ # Mobile numbers are composed of 0 (trunk) + 2 to 3 digit carrier code + 5 to 8 digits
10
+ #
11
+
12
+ ndcs_with_7_subscriber_digits = [
13
+ '203', # Quảng Ninh Province
14
+ '204', # Bắc Giang (From 15 April 2017)
15
+ '205', # Lạng Sơn Province
16
+ '206', # Cao Bằng Province
17
+ '207', # Tuyên Quang Province
18
+ '208', # Thái Nguyên Provine
19
+ '209', # Bắc Kạn Province
20
+ '210', # Phú Thọ Province
21
+ '211', # Vĩnh Phúc Province
22
+ '212', # Sơn La Province
23
+ '213', # Lai Châu
24
+ '214', # Lào Cai Province
25
+ '215', # Điện Biên Province
26
+ '216', # Yên Bái Province
27
+ '218', # Hòa Bình Province
28
+ '219', # Hà Giang Province
29
+ '220', # Hải Dương Province
30
+ '221', # Hưng Yên Province
31
+ '222', # Bắc Ninh Province
32
+ '225', # Hải Phòng Province
33
+ '226', # Hà Nam Province
34
+ '227', # Thái Bình Province
35
+ '228', # Nam Định Province
36
+ '229', # Ninh Bình Province
37
+ '232', # Quảng Bình Province
38
+ '233', # Quảng Trị Province
39
+ '234', # Thừa Thiên Huế Province
40
+ '235', # Quảng Nam Province
41
+ '236', # Đà Nẵng Province
42
+ '237', # Thanh Hóa Province
43
+ '238', # Nghệ An Province
44
+ '239', # Hà Tĩnh Province
45
+ '251', # Đồng Nai Province
46
+ '252', # Bình Thuận Province
47
+ '254', # Bà Rịa Vũng Tàu Province
48
+ '255', # Quảng Ngãi Province
49
+ '256', # Bình Định Province
50
+ '257', # Phú Yên Province
51
+ '258', # Khánh Hòa Province
52
+ '259', # Ninh Thuận Province
53
+ '260', # Kon Tum Province
54
+ '261', # Đăk Nông Province
55
+ '262', # Đăk Lăk Province
56
+ '263', # Lâm Đồng Province
57
+ '269', # Gia Lai Province
58
+ '270', # Vĩnh Long Province
59
+ '271', # Bình Phước Province
60
+ '272', # Long An Province
61
+ '273', # Tiền Giang Province
62
+ '274', # Bình Dương Province
63
+ '275', # Bến Tre Province
64
+ '276', # Tây Ninh Province
65
+ '277', # Đồng Tháp Province
66
+ '290', # Cà Mau Province
67
+ '291', # Bạc Liêu Province
68
+ '292', # Cần Thơ Province
69
+ '293', # Hậu Giang Province
70
+ '294', # Trà Vinh Province
71
+ '296', # An Giang Province
72
+ '297', # Kiên Giang Province
73
+ '299', # Sóc Trăng Province
74
+ ]
75
+
76
+ ndcs_with_8_subscriber_digits = [
77
+ '4', # Hà Nội Province
78
+ '24', # Hà Nội Province
79
+ '28', # Hồ Chí Minh Province
80
+ '8', # Hồ Chí Minh Province
81
+ ]
82
+
83
+ mobile = [
84
+ '32', # Viettel Mobile
85
+ '33', # Viettel Mobile
86
+ '34', # Viettel Mobile
87
+ '35', # Viettel Mobile
88
+ '36', # Viettel Mobile
89
+ '37', # Viettel Mobile
90
+ '38', # Viettel Mobile
91
+ '39', # Viettel Mobile
92
+ '52', # Vietnammobile
93
+ '56', # Vietnamobile
94
+ '58', # Vietnamobile (previously known as HT Mobile)
95
+ '59', # GTel (traded as Beeline)
96
+ '70', # MobiFone
97
+ '76', # MobiFone
98
+ '77', # MobiFone
99
+ '78', # MobiFone
100
+ '79', # MobiFone
101
+ '81', # Vinaphone
102
+ '82', # Vinaphone
103
+ '83', # Vinaphone
104
+ '84', # Vinaphone
105
+ '85', # Vinaphone
106
+ '86', # Viettel
107
+ '87', # Itelecom
108
+ '88', # Vinaphone
109
+ '89', # MobiFone,
110
+ '90', # MobiFone
111
+ '91', # Vinaphone
112
+ '92', # Vietnamobile (previously known as HT Mobile)
113
+ '93', # MobiFone
114
+ '94', # Vinaphone
115
+ '96', # previously EVN Telecom, now Viettel Mobile
116
+ '97', # Viettel Mobile
117
+ '98', # Viettel Mobile
118
+ '99', # Gmobile (traded as Beeline)
119
+ ]
120
+
121
+ mobile_with_trunk = (mobile).map{ |num| "0#{num}" }
122
+
123
+ Phony.define do
124
+ country '84',
125
+ trunk('0') |
126
+ one_of(mobile) >> split(4..8)|
127
+ one_of(ndcs_with_7_subscriber_digits) >> split(3,4) |
128
+ one_of(ndcs_with_8_subscriber_digits) >> split(4,4) |
129
+ one_of(mobile_with_trunk) >> split(5..8)|
130
+ # Govt reserved
131
+ fixed(80) >> split(5) |
132
+ fixed(69) >> split(1,5)
133
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Zimbabwe, https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=ZW
4
+ # http://www.itu.int/dms_pub/itu-t/oth/02/02/T02020000E90002PDFE.pdf
5
+
6
+ Phony.define do
7
+ country '263',
8
+ trunk('0', normalize: true) |
9
+ one_of(%w(2582 2583 5483)) >>
10
+ matched_split(/\A\d{6}\z/ => [3,3],
11
+ /\A\d+\z/ => [3] ) | # geographic [XXXX] XXX(XXX)
12
+ one_of(%w(147 204 205 222 227 228 238 248 2582 2583 271 272 274 276 281 283
13
+ 284 286 287 288 289 298 308 317 371 375 376 379 383 387 389 517 518
14
+ 557 558 628 637 667 668 687 688 698 848)) >>
15
+ matched_split(/\A\d{6}\z/ => [3,3],
16
+ /\A\d+\z/ => [3] ) | # geographic [XXX] XXX(XXX)
17
+ one_of(%w(270)) >>
18
+ matched_split(/\A\d{6}\z/ => [3,3],
19
+ /\A\d+\z/ => [3,2] ) | # geographic [XXX] XXXXX(X)
20
+ one_of(%w(273 275 277 278 279 282 285)) >>
21
+ matched_split(/\A\d{6}\z/ => [3,3],
22
+ /\A\d+\z/ => [2,2] ) | # geographic [XXX] XXXX(XX)
23
+ one_of(%w(13 14 15 16 17 18 19 21 24 26 29 30 31 32 34 35 36 50 55 57 58 59 60
24
+ 63 64 65 66 69)) >>
25
+ matched_split(/\A\d{6}\z/ => [3,3],
26
+ /\A\d+\z/ => [3] ) | # geographic [XX] XXX(XXX)
27
+ one_of(%w(20)) >>
28
+ matched_split(/\A\d{6}\z/ => [3,3],
29
+ /\A\d+\z/ => [3,2] ) | # geographic [XXX] XXXXX(X)
30
+ one_of(%w(25 33 39 51 52 53 54 56 61 62 67 68 )) >>
31
+ matched_split(/\A\d{6}\z/ => [3,3],
32
+ /\A\d+\z/ => [2,2] ) | # geographic [XXX] XXXX(XX)
33
+ one_of(%w(86)) >> split(4,4) | # VoIP telephony
34
+ one_of(%w(71 73 77 78)) >> split(3,4) | # mobile
35
+ one_of(%w(4 9)) >>
36
+ matched_split(/\A\d{6}\z/ => [4,4],
37
+ /\A\d+\z/ => [3,2] ) | # geographic [X] XXXXX(XXX)
38
+ fixed(2) >> split(3,3)
39
+ end