phony 1.9.0 → 2.19.14

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