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,355 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Argentinian numbers are all ten digits long.
4
+ # Information taken from:
5
+ # https://www.enacom.gob.ar/multimedia/normativas/1997/Resolucion%2046_97.pdf
6
+ # http://www.wtng.info/wtng-54-ar.html
7
+ # https://en.wikipedia.org/wiki/Telephone_numbers_in_Argentina
8
+ # Area codes collected from https://www.enacom.gob.ar/indicativos-interurbanos_p366 (06/27/19)
9
+
10
+
11
+ # Landline
12
+ area_codes_2digits = [
13
+ '11',
14
+ ]
15
+
16
+ area_codes_3digits = [
17
+ '220',
18
+ '221',
19
+ '223',
20
+ '230',
21
+ '236',
22
+ '237',
23
+ '249',
24
+ '260',
25
+ '261',
26
+ '263',
27
+ '264',
28
+ '266',
29
+ '280',
30
+ '291',
31
+ '294',
32
+ '297',
33
+ '298',
34
+ '299',
35
+ '336',
36
+ '341',
37
+ '342',
38
+ '343',
39
+ '345',
40
+ '348',
41
+ '351',
42
+ '353',
43
+ '358',
44
+ '362',
45
+ '364',
46
+ '370',
47
+ '376',
48
+ '379',
49
+ '380',
50
+ '381',
51
+ '383',
52
+ '385',
53
+ '387',
54
+ '388',
55
+ ]
56
+
57
+ area_codes_4digits = [
58
+ '2202',
59
+ '2221',
60
+ '2223',
61
+ '2224',
62
+ '2225',
63
+ '2226',
64
+ '2227',
65
+ '2229',
66
+ '2241',
67
+ '2242',
68
+ '2243',
69
+ '2244',
70
+ '2245',
71
+ '2246',
72
+ '2252',
73
+ '2254',
74
+ '2255',
75
+ '2257',
76
+ '2261',
77
+ '2262',
78
+ '2264',
79
+ '2265',
80
+ '2266',
81
+ '2267',
82
+ '2268',
83
+ '2271',
84
+ '2272',
85
+ '2273',
86
+ '2274',
87
+ '2281',
88
+ '2283',
89
+ '2284',
90
+ '2285',
91
+ '2286',
92
+ '2291',
93
+ '2292',
94
+ '2296',
95
+ '2297',
96
+ '2302',
97
+ '2314',
98
+ '2316',
99
+ '2317',
100
+ '2320',
101
+ '2323',
102
+ '2324',
103
+ '2325',
104
+ '2326',
105
+ '2331',
106
+ '2333',
107
+ '2334',
108
+ '2335',
109
+ '2336',
110
+ '2337',
111
+ '2338',
112
+ '2342',
113
+ '2343',
114
+ '2344',
115
+ '2345',
116
+ '2346',
117
+ '2352',
118
+ '2353',
119
+ '2354',
120
+ '2355',
121
+ '2356',
122
+ '2357',
123
+ '2358',
124
+ '2392',
125
+ '2393',
126
+ '2394',
127
+ '2395',
128
+ '2396',
129
+ '2473',
130
+ '2474',
131
+ '2475',
132
+ '2477',
133
+ '2478',
134
+ '2622',
135
+ '2624',
136
+ '2625',
137
+ '2626',
138
+ '2646',
139
+ '2647',
140
+ '2648',
141
+ '2651',
142
+ '2655',
143
+ '2656',
144
+ '2657',
145
+ '2658',
146
+ '2901',
147
+ '2902',
148
+ '2903',
149
+ '2920',
150
+ '2921',
151
+ '2922',
152
+ '2923',
153
+ '2924',
154
+ '2925',
155
+ '2926',
156
+ '2927',
157
+ '2928',
158
+ '2929',
159
+ '2931',
160
+ '2932',
161
+ '2933',
162
+ '2934',
163
+ '2935',
164
+ '2936',
165
+ '2940',
166
+ '2942',
167
+ '2945',
168
+ '2946',
169
+ '2948',
170
+ '2952',
171
+ '2953',
172
+ '2954',
173
+ '2962',
174
+ '2963',
175
+ '2964',
176
+ '2966',
177
+ '2972',
178
+ '2982',
179
+ '2983',
180
+ '3327',
181
+ '3329',
182
+ '3382',
183
+ '3385',
184
+ '3387',
185
+ '3388',
186
+ '3400',
187
+ '3401',
188
+ '3402',
189
+ '3404',
190
+ '3405',
191
+ '3406',
192
+ '3407',
193
+ '3408',
194
+ '3409',
195
+ '3435',
196
+ '3436',
197
+ '3437',
198
+ '3438',
199
+ '3442',
200
+ '3444',
201
+ '3445',
202
+ '3446',
203
+ '3447',
204
+ '3454',
205
+ '3455',
206
+ '3456',
207
+ '3458',
208
+ '3460',
209
+ '3462',
210
+ '3463',
211
+ '3464',
212
+ '3465',
213
+ '3466',
214
+ '3467',
215
+ '3468',
216
+ '3469',
217
+ '3471',
218
+ '3472',
219
+ '3476',
220
+ '3482',
221
+ '3483',
222
+ '3487',
223
+ '3489',
224
+ '3491',
225
+ '3492',
226
+ '3493',
227
+ '3496',
228
+ '3497',
229
+ '3498',
230
+ '3521',
231
+ '3522',
232
+ '3524',
233
+ '3525',
234
+ '3532',
235
+ '3533',
236
+ '3537',
237
+ '3541',
238
+ '3542',
239
+ '3543',
240
+ '3544',
241
+ '3546',
242
+ '3547',
243
+ '3548',
244
+ '3549',
245
+ '3562',
246
+ '3563',
247
+ '3564',
248
+ '3571',
249
+ '3572',
250
+ '3573',
251
+ '3574',
252
+ '3575',
253
+ '3576',
254
+ '3582',
255
+ '3583',
256
+ '3584',
257
+ '3585',
258
+ '3711',
259
+ '3715',
260
+ '3716',
261
+ '3718',
262
+ '3721',
263
+ '3725',
264
+ '3731',
265
+ '3734',
266
+ '3735',
267
+ '3741',
268
+ '3743',
269
+ '3751',
270
+ '3754',
271
+ '3755',
272
+ '3756',
273
+ '3757',
274
+ '3758',
275
+ '3772',
276
+ '3773',
277
+ '3774',
278
+ '3775',
279
+ '3777',
280
+ '3781',
281
+ '3782',
282
+ '3786',
283
+ '3821',
284
+ '3825',
285
+ '3826',
286
+ '3827',
287
+ '3832',
288
+ '3835',
289
+ '3837',
290
+ '3838',
291
+ '3841',
292
+ '3843',
293
+ '3844',
294
+ '3845',
295
+ '3846',
296
+ '3854',
297
+ '3855',
298
+ '3856',
299
+ '3857',
300
+ '3858',
301
+ '3861',
302
+ '3862',
303
+ '3863',
304
+ '3865',
305
+ '3867',
306
+ '3868',
307
+ '3869',
308
+ '3873',
309
+ '3876',
310
+ '3877',
311
+ '3878',
312
+ '3885',
313
+ '3886',
314
+ '3887',
315
+ '3888',
316
+ '3891',
317
+ '3892',
318
+ '3894',
319
+ ]
320
+
321
+ # Mobile
322
+ # Mobile phone numbers in Argentina are assigned the same geographic area codes as fixed lines,
323
+ # according to the subscriber's choice or residence, and can be 6, 7 or 8 digits long, just as
324
+ # landline numbers are. The difference with landline numbers is that a prefix 15, never used for
325
+ # landlines, must be dialed.
326
+
327
+
328
+
329
+ # International: +54 + 9 + area code + subscriber number (without '15' prefix)
330
+ # Domestic: area code + 15 + subscriber number
331
+ # Mobile numbers in Argentina may be listed as 15-xxxxxxx. However, the leading '15'
332
+ # is a domestic prefix which must be omitted when calling these from outside Argentina,
333
+ # with the xxxxxxx being the actual subscriber number portion.
334
+
335
+ # Non-geographic numbers 0ppp-nnn-nnnn
336
+ special_numbers = [
337
+ '800', # toll-free telephone numbers
338
+ '810', # calls from any area chargeable at local rate
339
+ '822', # toll-free numbers used for calling card access
340
+ '600', # premium-rate telephone numbers
341
+ '609', # premium, fixed-rate gaming numbers
342
+ '610', # dial-up Internet access numbers, usually cheaper than a local call, less frequently used as dial-up Internet access decreased
343
+ '605', # premium-rate telephone numbers for charity donations
344
+ ]
345
+
346
+ Phony.define do
347
+ country '54', trunk('0') |
348
+ one_of(area_codes_4digits) >> split(2, 4) | # landline
349
+ one_of(area_codes_3digits) >> split(3, 4) | # landline
350
+ one_of(area_codes_2digits) >> split(4, 4) | # landline
351
+ one_of(area_codes_2digits.map{|x| "9#{x}" }) >> split(4, 4) | # mobile
352
+ one_of(area_codes_3digits.map{|x| "9#{x}" }) >> split(3, 4) | # mobile
353
+ one_of(area_codes_4digits.map{|x| "9#{x}" }) >> split(2, 4) | # mobile
354
+ one_of(special_numbers) >> split(3, 4)
355
+ end
@@ -1,30 +1,36 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Austria uses a variable-length ndc code, thus we use a separate file to not let all_other.rb explode.
2
4
  #
3
5
  ndcs = [
4
- '1', # Vienna
5
- '57', # -
6
- '59', # -
6
+ # '1', # Vienna
7
7
  '89', # Routing Number
8
8
  '316', # Graz
9
- '501', # -
10
- '502', # -
11
- '503', # -
12
- '504', # -
13
- '505', # -
14
- '506', # -
15
- '507', # -
16
- '508', # -
17
- '509', # -
9
+ '463', # Klagenfurt
18
10
  '512', # Innsbruck
19
- '517', # -
20
11
  '662', # Salzburg
21
- '720', #
22
12
  '732' # Linz
23
13
  ]
24
14
 
15
+ corporate_2digit = [
16
+ '57',
17
+ '59'
18
+ ]
19
+
20
+ corporate = [
21
+ '501',
22
+ '502',
23
+ '503',
24
+ '504',
25
+ '505',
26
+ '506',
27
+ '507',
28
+ '508',
29
+ '509',
30
+ '517'
31
+ ]
32
+
25
33
  mobile = [
26
- '67',
27
- '68',
28
34
  '644',
29
35
  '650',
30
36
  '651',
@@ -35,15 +41,30 @@ mobile = [
35
41
  '659',
36
42
  '660',
37
43
  '661',
38
- '663',
39
44
  '664',
40
45
  '665',
41
46
  '666',
42
47
  '667',
43
48
  '668',
44
- '669'
49
+ '669',
50
+ '670',
51
+ '676',
52
+ '677',
53
+ '678',
54
+ '680',
55
+ '681',
56
+ '688',
57
+ '690',
58
+ '699',
45
59
  ]
46
60
 
61
+ mobile_2digit = [
62
+ '67',
63
+ '68',
64
+ '69',
65
+ ]
66
+
67
+
47
68
  service = [
48
69
  '710',
49
70
  '711',
@@ -51,7 +72,6 @@ service = [
51
72
  '730',
52
73
  '740',
53
74
  '780',
54
- '800',
55
75
  '802',
56
76
  '804',
57
77
  '810',
@@ -65,7 +85,21 @@ service = [
65
85
  '939'
66
86
  ]
67
87
 
88
+ # https://www.rtr.at/en/tk/E129/Austrian_Numbering_Plan_2011-03-30.pdf
89
+ #
90
+ # TODO Add more details.
91
+ #
68
92
  Phony.define do
69
- country '43', one_of(service + mobile + ndcs) >> split(10) |
70
- fixed(4) >> split(10)
71
- end
93
+ country '43', trunk('0') |
94
+ one_of('1') >> split(3..12) | # Vienna
95
+ one_of(service) >> split(9..9) |
96
+ one_of('720') >> split(6..10) | # VoIP number length is 9..13
97
+ one_of('800') >> split(6..10) | # Free number length is 9..13
98
+ one_of(corporate_2digit) >> split(3..11) | # Corporate number length is 5..13
99
+ one_of(corporate) >> split(2..10) | # Corporate number length is 5..13
100
+ one_of(ndcs) >> split(5..10) |
101
+ one_of('663') >> split(6..8) | # 6..8 digit mobile.
102
+ one_of(mobile) >> split(4,3..9) |
103
+ one_of(mobile_2digit) >> split(7..7) | # Separate as mobile contains 676 - 67 violates the prefix rule.
104
+ fixed(4) >> split(3..9) # Number length is 7..13.
105
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Bangladesh (People's Republic of)
4
+ # https://www.numberingplans.com
5
+
6
+ ndcs_with_3_subscriber_numbers = %w(
7
+ 3035 3036 3224 3424 3427 3529 3823 4027 4222 4225 4425 4525 4623 4653 4658
8
+ 5222 5323 5327 5526 6257 7022 7622 8023 8032 8332 8424 8528 8626 9423 9424
9
+ )
10
+
11
+ ndcs_with_4_subscriber_numbers = %w(
12
+ 3020 3022 3023 3024 3025 3026 3027 3028 3029 3032 3033 3034 3035 3036 3221 3222 3223 3225
13
+ 3322 3323 3324 3325 3326 3422 3824 4020 4029 4222 4223 4224 4225 4226 4227 4228
14
+ 4320 4322 4323 4324 4325 4326 4327 4328 4329 4523 4653 4654 4655 4657 4624 4626 4627
15
+ 4953 6024 6622 6655 7323 7324 7325 7327 7328 7522 7523 7524 7525 7526 7527 7528 7529
16
+ 8020 8022 8023 8024 8025 8026 8027 8028 8029 8032 8033 8424 8425 8426 8427 8522 8523 8524 8525 8526 8527
17
+ )
18
+
19
+ ndcs_with_5_subscriber_numbers = {
20
+ 2 => %w(51 71 81 91),
21
+ 3 => %w(321 331 341 351 361 371 381 441 448 421 451 461 471 481 491 468
22
+ 488 498 521 531 541 551 561 571 581 591 628 601 631 641 651 661 668
23
+ 691 731 741 751 761 771 781 791 831 841 851 861 871 921 931 941 951 981),
24
+ 4 => %w(3023 3024 3028 3223 3225 3324 3422 3425 3822
25
+ 4033 4226 4227 4322 4323 4326 4327 4328 4422 4423 4424 4426 4455 4624 4625 4626 4655 4656 4657 4823 4854 4922 4924 4925 4953
26
+ 5020 5023 5024 5028 5029 5224 5225 5227 5323 5325 5326 5329 5424 5426 5526 5653 5724 5826
27
+ 6023 6024 6222 6224 6225 6253 6254 6255 6323 6324 6327 6328 6423 6424 6524 6527 6623 6624 6652 6653 6654 6655
28
+ 6722 6723 6724 6725 6822 6823 6824 6825 6922 6923 6924 6925 6926
29
+ 7225 7227 7228 7229 7324 7326 7327 7329 7425 7426 7522 7525 7526 7528 7529 7724 7823 7825 7923
30
+ 8020 8022 8026 8029 8220 8222 8223 8224 8225 8226 8227 8229 8232 8325 8327 8328 8425 8426 8427 8522 8523 8524
31
+ 8622 8623 8624 8625 8626 8723 8725 8727
32
+ 9020 9022 9024 9025 9027 9028 9032 9033 9222 9223 9225 9226 9227 9228 9229 9232 9233 9424 9426 9428 9524 9525 9528 9529 9824 9827)
33
+ }
34
+
35
+ ndcs_with_6_subscriber_numbers = {2 => %w(31 41), 3 => %w(721 821)}
36
+
37
+ ndcs_with_7_subscriber_numbers = {1 => %w(2), 3 => %w(431)}
38
+
39
+ Phony.define do
40
+ country '880',
41
+ # some ndc have several subscriber number length.
42
+ match(/\A(#{ndcs_with_3_subscriber_numbers.join('|')})\d{3}\z/) >> split(3) |
43
+ match(/\A(#{ndcs_with_4_subscriber_numbers.join('|')})\d{4}\z/) >> split(4) |
44
+ match(/\A(#{ndcs_with_5_subscriber_numbers[4].join('|')})\d{5}\z/) >> split(5) |
45
+ #
46
+ one_of(ndcs_with_3_subscriber_numbers) >> split(3) |
47
+ one_of(ndcs_with_4_subscriber_numbers) >> split(4) |
48
+ one_of(ndcs_with_5_subscriber_numbers[2]) >> split(5) |
49
+ one_of(ndcs_with_5_subscriber_numbers[3]) >> split(5) |
50
+ one_of(ndcs_with_5_subscriber_numbers[4]) >> split(5) |
51
+ one_of(ndcs_with_6_subscriber_numbers[2]) >> split(6) |
52
+ one_of(ndcs_with_6_subscriber_numbers[3]) >> split(6) |
53
+ one_of(ndcs_with_7_subscriber_numbers[1]) >> split(7) |
54
+ one_of(ndcs_with_7_subscriber_numbers[3]) >> split(7) |
55
+ # match(/\A(1[15-9])\d{8}\z/) >> split(8) # mobile
56
+ fixed(2) >> split(8) # mobile
57
+ end
@@ -0,0 +1,133 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Belarus
4
+ # http://www.eng.beltelecom.by/en/subscribers/phone-codes
5
+ # https://www.numberingplans.com
6
+
7
+ ndcs_with_5_subscriber_digits = %w(
8
+ 1511
9
+ 1512
10
+ 1513
11
+ 1514
12
+ 1515
13
+ 1562
14
+ 1563
15
+ 1564
16
+ 1591
17
+ 1592
18
+ 1593
19
+ 1594
20
+ 1595
21
+ 1596
22
+ 1597
23
+ 1631
24
+ 1632
25
+ 1633
26
+ 1641
27
+ 1642
28
+ 1643
29
+ 1644
30
+ 1645
31
+ 1646
32
+ 1647
33
+ 1651
34
+ 1652
35
+ 1655
36
+ 1713
37
+ 1714
38
+ 1715
39
+ 1716
40
+ 1717
41
+ 1718
42
+ 1719
43
+ 1770
44
+ 1771
45
+ 1772
46
+ 1774
47
+ 1775
48
+ 1776
49
+ 1792
50
+ 1793
51
+ 1794
52
+ 1795
53
+ 1796
54
+ 1797
55
+ 2130
56
+ 2131
57
+ 2132
58
+ 2133
59
+ 2135
60
+ 2136
61
+ 2137
62
+ 2138
63
+ 2139
64
+ 2151
65
+ 2152
66
+ 2153
67
+ 2154
68
+ 2155
69
+ 2156
70
+ 2157
71
+ 2158
72
+ 2159
73
+ 2230
74
+ 2231
75
+ 2232
76
+ 2233
77
+ 2234
78
+ 2235
79
+ 2236
80
+ 2237
81
+ 2238
82
+ 2239
83
+ 2240
84
+ 2241
85
+ 2242
86
+ 2243
87
+ 2244
88
+ 2245
89
+ 2246
90
+ 2247
91
+ 2248
92
+ 2330
93
+ 2332
94
+ 2333
95
+ 2334
96
+ 2336
97
+ 2337
98
+ 2339
99
+ 2340
100
+ 2342
101
+ 2344
102
+ 2345
103
+ 2346
104
+ 2347
105
+ 2350
106
+ 2353
107
+ 2354
108
+ 2355
109
+ 2356
110
+ 2357
111
+ )
112
+
113
+ ndcs_with_6_subscriber_digits = %w(152 154 162 163 165 174 176 177 212 214 216 222 225 232 236 602)
114
+
115
+ ndcs_with_7_subscriber_digits = %w(17 25 29 33 44)
116
+
117
+ Phony.define do
118
+ country '375',
119
+ trunk('80?') |
120
+ one_of(ndcs_with_5_subscriber_digits) >> split(5) |
121
+ one_of(ndcs_with_6_subscriber_digits) >> split(6) |
122
+ one_of(ndcs_with_7_subscriber_digits) >> split(7) |
123
+ # not available from abroad
124
+ one_of(%w(600)) >> split(3) |
125
+ one_of(%w(606 777 801 803 805 810 902)) >> split(7) |
126
+ one_of(%w(820)) >> split(8) |
127
+ # Non-geographic number - Home country direct service
128
+ # Assigned to Beltelecom - not available from abroad
129
+ match(/\A(800)\d{3}\z/) >> split(3) |
130
+ match(/\A(800)\d{4}\z/) >> split(4) |
131
+ match(/\A(800)\d{7}\z/) >> split(7)
132
+ end
133
+