phony 2.16.4 → 2.20.8

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 (69) hide show
  1. checksums.yaml +5 -5
  2. data/README.textile +34 -6
  3. data/lib/phony/config.rb +91 -0
  4. data/lib/phony/countries/argentina.rb +355 -0
  5. data/lib/phony/countries/austria.rb +4 -2
  6. data/lib/phony/countries/bangladesh.rb +2 -0
  7. data/lib/phony/countries/belarus.rb +2 -0
  8. data/lib/phony/countries/brazil.rb +4 -2
  9. data/lib/phony/countries/cambodia.rb +3 -5
  10. data/lib/phony/countries/china.rb +7 -2
  11. data/lib/phony/countries/croatia.rb +2 -0
  12. data/lib/phony/countries/georgia.rb +2 -0
  13. data/lib/phony/countries/germany.rb +5 -2
  14. data/lib/phony/countries/guinea.rb +8 -5
  15. data/lib/phony/countries/india.rb +2 -0
  16. data/lib/phony/countries/indonesia.rb +2 -0
  17. data/lib/phony/countries/ireland.rb +27 -23
  18. data/lib/phony/countries/italy.rb +40 -18
  19. data/lib/phony/countries/japan.rb +61 -8
  20. data/lib/phony/countries/kyrgyzstan.rb +2 -0
  21. data/lib/phony/countries/latvia.rb +2 -0
  22. data/lib/phony/countries/libya.rb +3 -1
  23. data/lib/phony/countries/malaysia.rb +22 -2
  24. data/lib/phony/countries/moldova.rb +2 -0
  25. data/lib/phony/countries/montenegro.rb +2 -0
  26. data/lib/phony/countries/myanmar.rb +2 -0
  27. data/lib/phony/countries/namibia.rb +2 -0
  28. data/lib/phony/countries/nepal.rb +2 -0
  29. data/lib/phony/countries/netherlands.rb +2 -0
  30. data/lib/phony/countries/pakistan.rb +2 -0
  31. data/lib/phony/countries/paraguay.rb +2 -0
  32. data/lib/phony/countries/russia_kazakhstan_abkhasia_south_ossetia.rb +22 -13
  33. data/lib/phony/countries/saudi_arabia.rb +2 -0
  34. data/lib/phony/countries/serbia.rb +7 -1
  35. data/lib/phony/countries/somalia.rb +2 -0
  36. data/lib/phony/countries/south_korea.rb +7 -2
  37. data/lib/phony/countries/sweden.rb +2 -0
  38. data/lib/phony/countries/taiwan.rb +3 -0
  39. data/lib/phony/countries/tajikistan.rb +2 -0
  40. data/lib/phony/countries/turkmenistan.rb +2 -0
  41. data/lib/phony/countries/ukraine.rb +3 -0
  42. data/lib/phony/countries/united_kingdom.rb +5 -2
  43. data/lib/phony/countries/uruguay.rb +2 -0
  44. data/lib/phony/countries/vietnam.rb +93 -93
  45. data/lib/phony/countries/zimbabwe.rb +2 -0
  46. data/lib/phony/countries.rb +142 -64
  47. data/lib/phony/country.rb +15 -3
  48. data/lib/phony/country_codes.rb +16 -3
  49. data/lib/phony/dsl.rb +5 -3
  50. data/lib/phony/local_splitters/fixed.rb +2 -0
  51. data/lib/phony/national_code.rb +1 -1
  52. data/lib/phony/national_splitters/none.rb +1 -3
  53. data/lib/phony/trunk_code.rb +5 -5
  54. data/lib/phony.rb +62 -57
  55. data/spec/functional/config_spec.rb +44 -0
  56. data/spec/functional/plausibility_spec.rb +285 -18
  57. data/spec/lib/phony/countries_spec.rb +140 -39
  58. data/spec/lib/phony/country_codes_spec.rb +82 -58
  59. data/spec/lib/phony/country_spec.rb +29 -9
  60. data/spec/lib/phony/dsl_spec.rb +7 -3
  61. data/spec/lib/phony/local_splitters/regex_spec.rb +19 -15
  62. data/spec/lib/phony/national_code_spec.rb +15 -45
  63. data/spec/lib/phony/national_splitters/fixed_spec.rb +12 -16
  64. data/spec/lib/phony/national_splitters/none_spec.rb +3 -3
  65. data/spec/lib/phony/national_splitters/variable_spec.rb +9 -13
  66. data/spec/lib/phony/trunk_code_spec.rb +85 -0
  67. data/spec/lib/phony/vanity_spec.rb +4 -4
  68. data/spec/lib/phony_spec.rb +63 -67
  69. metadata +13 -8
data/lib/phony.rb CHANGED
@@ -1,70 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ # NOTE We use Kernel.load here, as it's possible to redefine Phony via Phony::Config.
4
+
1
5
  # Framework.
2
6
  #
3
- require File.expand_path '../phony/vanity', __FILE__
4
- require File.expand_path '../phony/local_splitters/fixed', __FILE__
5
- require File.expand_path '../phony/local_splitters/regex', __FILE__
6
- require File.expand_path '../phony/national_splitters/dsl', __FILE__
7
- require File.expand_path '../phony/national_splitters/fixed', __FILE__
8
- require File.expand_path '../phony/national_splitters/variable', __FILE__
9
- require File.expand_path '../phony/national_splitters/regex', __FILE__
10
- require File.expand_path '../phony/national_splitters/default', __FILE__
11
- require File.expand_path '../phony/national_splitters/none', __FILE__
12
- require File.expand_path '../phony/national_code', __FILE__
13
- require File.expand_path '../phony/country', __FILE__
14
- require File.expand_path '../phony/trunk_code', __FILE__
15
- require File.expand_path '../phony/country_codes', __FILE__
16
-
17
- require File.expand_path '../phony/dsl', __FILE__
7
+ load File.expand_path '../phony/config.rb', __FILE__
8
+ load File.expand_path '../phony/vanity.rb', __FILE__
9
+ load File.expand_path '../phony/local_splitters/fixed.rb', __FILE__
10
+ load File.expand_path '../phony/local_splitters/regex.rb', __FILE__
11
+ load File.expand_path '../phony/national_splitters/dsl.rb', __FILE__
12
+ load File.expand_path '../phony/national_splitters/fixed.rb', __FILE__
13
+ load File.expand_path '../phony/national_splitters/variable.rb', __FILE__
14
+ load File.expand_path '../phony/national_splitters/regex.rb', __FILE__
15
+ load File.expand_path '../phony/national_splitters/default.rb', __FILE__
16
+ load File.expand_path '../phony/national_splitters/none.rb', __FILE__
17
+ load File.expand_path '../phony/national_code.rb', __FILE__
18
+ load File.expand_path '../phony/country.rb', __FILE__
19
+ load File.expand_path '../phony/trunk_code.rb', __FILE__
20
+ load File.expand_path '../phony/country_codes.rb', __FILE__
21
+ load File.expand_path '../phony/dsl.rb', __FILE__
18
22
 
19
23
  # Countries.
20
24
  #
21
25
  # The ones that need more space to define.
22
26
  #
23
- require File.expand_path '../phony/countries/austria', __FILE__
24
- require File.expand_path '../phony/countries/bangladesh', __FILE__
25
- require File.expand_path '../phony/countries/belarus', __FILE__
26
- require File.expand_path '../phony/countries/brazil', __FILE__
27
- require File.expand_path '../phony/countries/cambodia', __FILE__
28
- require File.expand_path '../phony/countries/croatia', __FILE__
29
- require File.expand_path '../phony/countries/china', __FILE__
30
- require File.expand_path '../phony/countries/georgia', __FILE__
31
- require File.expand_path '../phony/countries/germany', __FILE__
32
- require File.expand_path '../phony/countries/guinea', __FILE__
33
- require File.expand_path '../phony/countries/india', __FILE__
34
- require File.expand_path '../phony/countries/indonesia', __FILE__
35
- require File.expand_path '../phony/countries/ireland', __FILE__
36
- require File.expand_path '../phony/countries/italy', __FILE__
37
- require File.expand_path '../phony/countries/japan', __FILE__
38
- require File.expand_path '../phony/countries/kyrgyzstan', __FILE__
39
- require File.expand_path '../phony/countries/latvia', __FILE__
40
- require File.expand_path '../phony/countries/libya', __FILE__
41
- require File.expand_path '../phony/countries/malaysia', __FILE__
42
- require File.expand_path '../phony/countries/moldova', __FILE__
43
- require File.expand_path '../phony/countries/montenegro', __FILE__
44
- require File.expand_path '../phony/countries/myanmar', __FILE__
45
- require File.expand_path '../phony/countries/namibia', __FILE__
46
- require File.expand_path '../phony/countries/nepal', __FILE__
47
- require File.expand_path '../phony/countries/netherlands', __FILE__
48
- require File.expand_path '../phony/countries/pakistan', __FILE__
49
- require File.expand_path '../phony/countries/paraguay', __FILE__
50
- require File.expand_path '../phony/countries/russia_kazakhstan_abkhasia_south_ossetia', __FILE__
51
- require File.expand_path '../phony/countries/saudi_arabia', __FILE__
52
- require File.expand_path '../phony/countries/serbia', __FILE__
53
- require File.expand_path '../phony/countries/somalia', __FILE__
54
- require File.expand_path '../phony/countries/south_korea', __FILE__
55
- require File.expand_path '../phony/countries/sweden', __FILE__
56
- require File.expand_path '../phony/countries/taiwan', __FILE__
57
- require File.expand_path '../phony/countries/tajikistan', __FILE__
58
- require File.expand_path '../phony/countries/turkmenistan', __FILE__
59
- require File.expand_path '../phony/countries/vietnam', __FILE__
60
- require File.expand_path '../phony/countries/ukraine', __FILE__
61
- require File.expand_path '../phony/countries/united_kingdom', __FILE__
62
- require File.expand_path '../phony/countries/uruguay', __FILE__
63
- require File.expand_path '../phony/countries/zimbabwe', __FILE__
27
+ load File.expand_path '../phony/countries/argentina.rb', __FILE__
28
+ load File.expand_path '../phony/countries/austria.rb', __FILE__
29
+ load File.expand_path '../phony/countries/bangladesh.rb', __FILE__
30
+ load File.expand_path '../phony/countries/belarus.rb', __FILE__
31
+ load File.expand_path '../phony/countries/brazil.rb', __FILE__
32
+ load File.expand_path '../phony/countries/cambodia.rb', __FILE__
33
+ load File.expand_path '../phony/countries/croatia.rb', __FILE__
34
+ load File.expand_path '../phony/countries/china.rb', __FILE__
35
+ load File.expand_path '../phony/countries/georgia.rb', __FILE__
36
+ load File.expand_path '../phony/countries/germany.rb', __FILE__
37
+ load File.expand_path '../phony/countries/guinea.rb', __FILE__
38
+ load File.expand_path '../phony/countries/india.rb', __FILE__
39
+ load File.expand_path '../phony/countries/indonesia.rb', __FILE__
40
+ load File.expand_path '../phony/countries/ireland.rb', __FILE__
41
+ load File.expand_path '../phony/countries/italy.rb', __FILE__
42
+ load File.expand_path '../phony/countries/japan.rb', __FILE__
43
+ load File.expand_path '../phony/countries/kyrgyzstan.rb', __FILE__
44
+ load File.expand_path '../phony/countries/latvia.rb', __FILE__
45
+ load File.expand_path '../phony/countries/libya.rb', __FILE__
46
+ load File.expand_path '../phony/countries/malaysia.rb', __FILE__
47
+ load File.expand_path '../phony/countries/moldova.rb', __FILE__
48
+ load File.expand_path '../phony/countries/montenegro.rb', __FILE__
49
+ load File.expand_path '../phony/countries/myanmar.rb', __FILE__
50
+ load File.expand_path '../phony/countries/namibia.rb', __FILE__
51
+ load File.expand_path '../phony/countries/nepal.rb', __FILE__
52
+ load File.expand_path '../phony/countries/netherlands.rb', __FILE__
53
+ load File.expand_path '../phony/countries/pakistan.rb', __FILE__
54
+ load File.expand_path '../phony/countries/paraguay.rb', __FILE__
55
+ load File.expand_path '../phony/countries/russia_kazakhstan_abkhasia_south_ossetia.rb', __FILE__
56
+ load File.expand_path '../phony/countries/saudi_arabia.rb', __FILE__
57
+ load File.expand_path '../phony/countries/serbia.rb', __FILE__
58
+ load File.expand_path '../phony/countries/somalia.rb', __FILE__
59
+ load File.expand_path '../phony/countries/south_korea.rb', __FILE__
60
+ load File.expand_path '../phony/countries/sweden.rb', __FILE__
61
+ load File.expand_path '../phony/countries/taiwan.rb', __FILE__
62
+ load File.expand_path '../phony/countries/tajikistan.rb', __FILE__
63
+ load File.expand_path '../phony/countries/turkmenistan.rb', __FILE__
64
+ load File.expand_path '../phony/countries/vietnam.rb', __FILE__
65
+ load File.expand_path '../phony/countries/ukraine.rb', __FILE__
66
+ load File.expand_path '../phony/countries/united_kingdom.rb', __FILE__
67
+ load File.expand_path '../phony/countries/uruguay.rb', __FILE__
68
+ load File.expand_path '../phony/countries/zimbabwe.rb', __FILE__
64
69
 
65
70
  # All other countries.
66
71
  #
67
- require File.expand_path '../phony/countries', __FILE__
72
+ load File.expand_path '../phony/countries.rb', __FILE__
68
73
 
69
74
  # Phony is the main module and is generally used to process
70
75
  # E164 phone numbers directly.
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+ #
3
+ describe 'Phony::Config' do
4
+ describe 'load' do
5
+ before do
6
+ # NOTE We redefine Phony as if it was not loaded for this set of tests.
7
+ Object.__send__(:remove_const, :Phony) if Object.constants.include?(:Phony)
8
+
9
+ load 'phony/config.rb'
10
+ end
11
+ after(:all) do
12
+ # After running this suite, we load all of Phony for the following tests.
13
+ load 'phony/config.rb'
14
+
15
+ Phony::Config.load
16
+ end
17
+
18
+ it 'does not fail when loading all' do
19
+ Phony::Config.load
20
+
21
+ expect(Phony.split('15551115511')).to eq ['1', '555', '111', '5511']
22
+ end
23
+ it 'raises when a CC is used that has not been loaded.' do
24
+ Phony::Config.load('41')
25
+
26
+ expect { Phony.split('15551115511') }.to raise_error(Phony::SplittingError)
27
+ end
28
+ it 'raises when a CC is used that has not been loaded.' do
29
+ Phony::Config.load(only: ['41'])
30
+
31
+ expect { Phony.split('15551115511') }.to raise_error(Phony::SplittingError)
32
+ end
33
+ it 'raises when a CC is used that has not been loaded.' do
34
+ Phony::Config.load(except: ['1'])
35
+
36
+ expect { Phony.split('15551115511') }.to raise_error(Phony::SplittingError)
37
+ end
38
+ it 'does not raise when a CC is used that has been loaded.' do
39
+ Phony::Config.load(except: ['41'])
40
+
41
+ expect(Phony.split('15551115511')).to eq ['1', '555', '111', '5511']
42
+ end
43
+ end
44
+ end
@@ -25,11 +25,11 @@ describe 'plausibility' do
25
25
  incorrect = [shortest.sub(/\d\s*\z/, '')] # , longest + '0']
26
26
 
27
27
  correct.each do |value|
28
- Phony.plausible?(value).should be_truthy,
28
+ expect(Phony.plausible?(value)).to be_truthy,
29
29
  "It should validate #{value}, but does not."
30
30
  end
31
31
  incorrect.each do |value|
32
- Phony.plausible?(value).should be_falsey,
32
+ expect(Phony.plausible?(value)).to be_falsey,
33
33
  "It should not validate #{value}, but does."
34
34
  end
35
35
  end
@@ -38,7 +38,7 @@ describe 'plausibility' do
38
38
  invalid = [*sample]
39
39
 
40
40
  invalid.each do |value|
41
- Phony.plausible?(value).should be_falsey,
41
+ expect(Phony.plausible?(value)).to be_falsey,
42
42
  "It should not validate #{value}, but does."
43
43
  end
44
44
  end
@@ -46,10 +46,155 @@ describe 'plausibility' do
46
46
  end
47
47
 
48
48
  context 'specific countries' do
49
- it_is_correct_for 'Austria', :samples => '+43 720 116987' # VoIP
49
+ it_is_correct_for 'Austria', :samples => ['+43 720 116987', # VoIP
50
+ '+43 463 12345'] # Klagenfurt
50
51
  it_is_correct_for 'Bosnia and Herzegovina', :samples => ['+387 66 666 666',
51
52
  '+387 37 123 456',
52
53
  '+387 33 222 111']
54
+ it 'is correct for Brasil' do
55
+ Phony.plausible?('+55 67 998280912').should be_truthy
56
+ Phony.plausible?('+55 67 98280912').should be_falsey
57
+ Phony.plausible?('+55 11 12345678').should be_falsey
58
+ Phony.plausible?('+55 11 123456789').should be_falsey
59
+ Phony.plausible?('+55 11 023456789').should be_falsey
60
+ Phony.plausible?('+55 11 22345678').should be_truthy
61
+ end
62
+ it 'is correct for Bulgaria' do
63
+ Phony.plausible?('+359 2 1234567').should be_truthy
64
+ Phony.plausible?('+359 30 12345').should be_truthy
65
+ Phony.plausible?('+359 30 123456').should be_truthy
66
+ Phony.plausible?('+359 31 12345').should be_truthy
67
+ Phony.plausible?('+359 31 123456').should be_truthy
68
+ Phony.plausible?('+359 32 123456').should be_truthy
69
+ Phony.plausible?('+359 33 12345').should be_truthy
70
+ Phony.plausible?('+359 33 123456').should be_truthy
71
+ Phony.plausible?('+359 34 123456').should be_truthy
72
+ Phony.plausible?('+359 35 123456').should be_truthy
73
+ Phony.plausible?('+359 36 12345').should be_truthy
74
+ Phony.plausible?('+359 36 123456').should be_truthy
75
+ Phony.plausible?('+359 37 12345').should be_truthy
76
+ Phony.plausible?('+359 37 123456').should be_truthy
77
+ Phony.plausible?('+359 38 123456').should be_truthy
78
+ Phony.plausible?('+359 39 12345').should be_truthy
79
+ Phony.plausible?('+359 39 123456').should be_truthy
80
+ Phony.plausible?('+359 41 12345').should be_truthy
81
+ Phony.plausible?('+359 41 123456').should be_truthy
82
+ Phony.plausible?('+359 42 123456').should be_truthy
83
+ Phony.plausible?('+359 430 12345').should be_truthy
84
+ Phony.plausible?('+359 431 12345').should be_truthy
85
+ Phony.plausible?('+359 432 12345').should be_truthy
86
+ Phony.plausible?('+359 433 12345').should be_truthy
87
+ Phony.plausible?('+359 434 12345').should be_truthy
88
+ Phony.plausible?('+359 435 12345').should be_truthy
89
+ Phony.plausible?('+359 436 12345').should be_truthy
90
+ Phony.plausible?('+359 437 12345').should be_truthy
91
+ Phony.plausible?('+359 438 12345').should be_truthy
92
+ Phony.plausible?('+359 439 12345').should be_truthy
93
+ Phony.plausible?('+359 44 123456').should be_truthy
94
+ Phony.plausible?('+359 45 12345').should be_truthy
95
+ Phony.plausible?('+359 45 123456').should be_truthy
96
+ Phony.plausible?('+359 46 123456').should be_truthy
97
+ Phony.plausible?('+359 47 12345').should be_truthy
98
+ Phony.plausible?('+359 47 123456').should be_truthy
99
+ Phony.plausible?('+359 47 12345').should be_truthy
100
+ Phony.plausible?('+359 47 123456').should be_truthy
101
+ Phony.plausible?('+359 51 12345').should be_truthy
102
+ Phony.plausible?('+359 51 123456').should be_truthy
103
+ Phony.plausible?('+359 52 123456').should be_truthy
104
+ Phony.plausible?('+359 53 12345').should be_truthy
105
+ Phony.plausible?('+359 53 123456').should be_truthy
106
+ Phony.plausible?('+359 54 123456').should be_truthy
107
+ Phony.plausible?('+359 55 12345').should be_truthy
108
+ Phony.plausible?('+359 55 123456').should be_truthy
109
+ Phony.plausible?('+359 56 123456').should be_truthy
110
+ Phony.plausible?('+359 57 12345').should be_truthy
111
+ Phony.plausible?('+359 57 123456').should be_truthy
112
+ Phony.plausible?('+359 58 123456').should be_truthy
113
+ Phony.plausible?('+359 59 12345').should be_truthy
114
+ Phony.plausible?('+359 59 123456').should be_truthy
115
+ Phony.plausible?('+359 60 12345').should be_truthy
116
+ Phony.plausible?('+359 60 123456').should be_truthy
117
+ Phony.plausible?('+359 61 12345').should be_truthy
118
+ Phony.plausible?('+359 61 123456').should be_truthy
119
+ Phony.plausible?('+359 62 123456').should be_truthy
120
+ Phony.plausible?('+359 63 12345').should be_truthy
121
+ Phony.plausible?('+359 63 123456').should be_truthy
122
+ Phony.plausible?('+359 64 123456').should be_truthy
123
+ Phony.plausible?('+359 65 12345').should be_truthy
124
+ Phony.plausible?('+359 65 123456').should be_truthy
125
+ Phony.plausible?('+359 66 12345').should be_truthy
126
+ Phony.plausible?('+359 66 123456').should be_truthy
127
+ Phony.plausible?('+359 68 123456').should be_truthy
128
+ Phony.plausible?('+359 69 12345').should be_truthy
129
+ Phony.plausible?('+359 69 123456').should be_truthy
130
+ Phony.plausible?('+359 700 12345').should be_truthy
131
+ Phony.plausible?('+359 701 1234').should be_truthy
132
+ Phony.plausible?('+359 701 12345').should be_truthy
133
+ Phony.plausible?('+359 71 12345').should be_truthy
134
+ Phony.plausible?('+359 71 123456').should be_truthy
135
+ Phony.plausible?('+359 72 12345').should be_truthy
136
+ Phony.plausible?('+359 72 123456').should be_truthy
137
+ Phony.plausible?('+359 73 123456').should be_truthy
138
+ Phony.plausible?('+359 74 12345').should be_truthy
139
+ Phony.plausible?('+359 74 123456').should be_truthy
140
+ Phony.plausible?('+359 75 12345').should be_truthy
141
+ Phony.plausible?('+359 75 123456').should be_truthy
142
+ Phony.plausible?('+359 76 123456').should be_truthy
143
+ Phony.plausible?('+359 77 12345').should be_truthy
144
+ Phony.plausible?('+359 77 123456').should be_truthy
145
+ Phony.plausible?('+359 78 123456').should be_truthy
146
+ Phony.plausible?('+359 79 123456').should be_truthy
147
+ Phony.plausible?('+359 800 12345').should be_truthy
148
+ Phony.plausible?('+359 81 12345').should be_truthy
149
+ Phony.plausible?('+359 81 123456').should be_truthy
150
+ Phony.plausible?('+359 82 123456').should be_truthy
151
+ Phony.plausible?('+359 82 123456').should be_truthy
152
+ Phony.plausible?('+359 84 123456').should be_truthy
153
+ Phony.plausible?('+359 86 123456').should be_truthy
154
+ Phony.plausible?('+359 87 1234567').should be_truthy
155
+ Phony.plausible?('+359 88 1234567').should be_truthy
156
+ Phony.plausible?('+359 89 1234567').should be_truthy
157
+ Phony.plausible?('+359 90 123456').should be_truthy
158
+ Phony.plausible?('+359 91 12345').should be_truthy
159
+ Phony.plausible?('+359 91 123456').should be_truthy
160
+ Phony.plausible?('+359 92 123456').should be_truthy
161
+ Phony.plausible?('+359 93 12345').should be_truthy
162
+ Phony.plausible?('+359 93 123456').should be_truthy
163
+ Phony.plausible?('+359 94 123456').should be_truthy
164
+ Phony.plausible?('+359 95 12345').should be_truthy
165
+ Phony.plausible?('+359 95 123456').should be_truthy
166
+ Phony.plausible?('+359 96 123456').should be_truthy
167
+ Phony.plausible?('+359 97 12345').should be_truthy
168
+ Phony.plausible?('+359 97 123456').should be_truthy
169
+ Phony.plausible?('+359 980 123456').should be_truthy
170
+ Phony.plausible?('+359 981 123456').should be_truthy
171
+ Phony.plausible?('+359 982 123456').should be_truthy
172
+ Phony.plausible?('+359 983 123456').should be_truthy
173
+ Phony.plausible?('+359 984 123456').should be_truthy
174
+ Phony.plausible?('+359 985 123456').should be_truthy
175
+ Phony.plausible?('+359 986 123456').should be_truthy
176
+ Phony.plausible?('+359 987 123456').should be_truthy
177
+ Phony.plausible?('+359 988 123456').should be_truthy
178
+ Phony.plausible?('+359 989 123456').should be_truthy
179
+ Phony.plausible?('+359 990 123456').should be_truthy
180
+ Phony.plausible?('+359 991 123456').should be_truthy
181
+ Phony.plausible?('+359 992 123456').should be_truthy
182
+ Phony.plausible?('+359 993 123456').should be_truthy
183
+ Phony.plausible?('+359 994 123456').should be_truthy
184
+ Phony.plausible?('+359 995 123456').should be_truthy
185
+ Phony.plausible?('+359 996 123456').should be_truthy
186
+ Phony.plausible?('+359 997 123456').should be_truthy
187
+ Phony.plausible?('+359 998 123456').should be_truthy
188
+ Phony.plausible?('+359 999 123456').should be_truthy
189
+ end
190
+ it_is_correct_for 'Colombia', :samples => ['+57 601 411 1899',
191
+ '+57 602 111 2222',
192
+ '+57 603 111 2222',
193
+ '+57 604 111 2222',
194
+ '+57 605 111 2222',
195
+ '+57 606 111 2222',
196
+ '+57 607 111 2222',
197
+ '+57 608 111 2222']
53
198
  it_is_correct_for 'Congo', :samples => '+242 1234 56789'
54
199
  it_is_correct_for 'Cook Islands', :samples => '+682 71928'
55
200
  it_is_correct_for 'Costa Rica', :samples => '+506 2 234 5678'
@@ -63,7 +208,7 @@ describe 'plausibility' do
63
208
  Phony.plausible?('+385 60 12 345').should be_truthy # Premium rate
64
209
  Phony.plausible?('+385 62 123 456').should be_truthy # Premium, personal and UAN
65
210
  end
66
- it_is_correct_for "Côte d'Ivoire", :samples => '+225 9358 8764'
211
+ it_is_correct_for "Côte d'Ivoire", :samples => '+225 01 9358 8764'
67
212
  it_is_correct_for 'Democratic Republic of Timor-Leste', :samples => ['+670 465 7886', '+670 7465 7886']
68
213
  it_is_correct_for 'Democratic Republic of the Congo', :samples => '+243 80 864 9794'
69
214
  it_is_correct_for 'Diego Garcia', :samples => '+246 123 7686'
@@ -120,10 +265,18 @@ describe 'plausibility' do
120
265
  end
121
266
  it_is_correct_for 'French Guiana (French Department of)', :samples => '+594 594 123 456'
122
267
  it_is_correct_for "French Polynesia (Territoire français d'outre-mer)", :samples => '+689 87 27 84 00'
123
- it_is_correct_for 'Gabonese Republic', :samples => '+241 1 627 739'
268
+ it 'is correct for Gabon' do
269
+ Phony.plausible?('+241 1 627 739').should be_truthy
270
+ Phony.plausible?('+241 12 34 56 78').should be_truthy
271
+ end
272
+ # it_is_correct_for 'Gabonese Republic', :samples => [
273
+ # '+241 1 627 739',
274
+ # '+241 12 34 56 78',
275
+ # ]
124
276
  it_is_correct_for 'Gambia', :samples => '+220 989 5148'
125
277
  it_is_correct_for 'Germany', :samples => [
126
- '+49 157 753 6870'
278
+ '+49 69 155 1',
279
+ '+49 1577 536 8701'
127
280
  ]
128
281
  it_is_correct_for 'Georgia', :samples => ['+995 220 123 45',
129
282
  '+995 32 123 4567',
@@ -148,7 +301,7 @@ describe 'plausibility' do
148
301
  '+964 71 1234 5678']
149
302
 
150
303
 
151
- it_is_correct_for 'Kiribati (Republic of)', :samples => '+686 31993'
304
+ it_is_correct_for 'Kiribati (Republic of)', :samples => '+686 34814527'
152
305
  it_is_correct_for "Democratic People's Republic of Korea", :samples => ['+850 2 123 45',
153
306
  '+850 2 123 456 789',
154
307
  '+850 2 381 2356',
@@ -187,10 +340,19 @@ describe 'plausibility' do
187
340
  it_is_correct_for 'Macedonia', :samples => ['+389 2 123 4567',
188
341
  '+389 7 124 3456',
189
342
  '+389 7 234 5678']
190
- it_is_correct_for 'Madagascar', :samples => ['+261 20 012 345 678',
191
- '+261 20 124 3456',
192
- '+261 512 345 678',
193
- '+261 33 345 6789']
343
+ it_is_correct_for 'Madagascar', :samples => ['+261 20 23 456 78',
344
+ '+261 32 34 546 78',
345
+ '+261 33 34 546 78',
346
+ '+261 34 34 546 78',
347
+ '+261 38 34 546 78']
348
+ it 'is incorrect for Madagascar' do
349
+ Phony.plausible?('+261 20 012 345 678').should be_falsey
350
+ Phony.plausible?('+261 20 12 434 569').should be_falsey
351
+ Phony.plausible?('+261 51 23 4567 8').should be_falsey
352
+ Phony.plausible?('+261 34 345 46789').should be_falsey
353
+ Phony.plausible?('+261 34 345 467').should be_falsey
354
+ end
355
+
194
356
  it_is_correct_for 'Malawi', :samples => ['+265 1725 123',
195
357
  '+265 213 456 789',
196
358
  '+265 9123 456',
@@ -201,7 +363,8 @@ describe 'plausibility' do
201
363
  it_is_correct_for 'Marshall Islands (Republic of the)', :samples => '+692 372 7183'
202
364
  it_is_correct_for 'Martinique (French Department of)', :samples => '+596 596 123 456'
203
365
  it_is_correct_for 'Mauritania', :samples => '+222 1234 5678'
204
- it_is_correct_for 'Mauritius', :samples => '+230 5695 2277'
366
+ it_is_correct_for 'Mauritius', :samples => ['+230 5 695 2277',
367
+ '+230 260 0070']
205
368
  it_is_correct_for 'Micronesia (Federated States of)', :samples => '+691 766 7914'
206
369
  it_is_correct_for 'Moldova', :samples => ['+373 800 123 45',
207
370
  '+373 22 123 345',
@@ -225,14 +388,49 @@ describe 'plausibility' do
225
388
  end
226
389
  it_is_correct_for 'Nicaragua', :samples => '+505 12 345 678'
227
390
  it_is_correct_for 'Niger', :samples => '+227 1234 5678'
391
+ it_is_correct_for 'Nigeria', :samples => ['+234 807 059 1111',
392
+ '+234 811 234 5678',
393
+ '+234 64 830 00',
394
+ '+234 1 280 444',
395
+ '+234 85 123 456']
228
396
  it_is_correct_for 'Niue', :samples => '+683 3791'
229
397
  it_is_correct_for 'Oman', :samples => ['+968 24 423 123',
230
398
  '+968 25 423 123']
231
399
  it_is_correct_for 'Palau (Republic of)', :samples => '+680 483 7871'
400
+
401
+ it_is_correct_for 'Papua New Guinea', :samples => ['+675 180 1234',
402
+ '+675 170 12',
403
+ '+675 189 1',
404
+ '+675 184 1234 5678',
405
+ '+675 185 1234',
406
+ '+675 275 1234',
407
+ '+675 278 12',
408
+ '+675 115 1234 5678',
409
+ '+675 28 123 45',
410
+ '+675 16 123 12',
411
+ '+675 711 23 456',
412
+ '+675 731 23 456',
413
+ '+675 741 23 456',
414
+ '+675 770 12 345',
415
+ '+675 771 12 345',
416
+ '+675 772 12 345',
417
+ '+675 773 01 234',
418
+ '+675 774 12 345',
419
+ '+675 775 12 345',
420
+ '+675 80 123 456',
421
+ '+675 90 123 456',
422
+ '+675 3 123 456']
423
+
232
424
  it_is_correct_for 'Panama (Republic of)', :samples => ['+507 800 1234',
233
425
  '+507 6 123 4567',
234
426
  '+507 2 123 456']
235
427
  it_is_correct_for 'Reunion / Mayotte (new)', :samples => '+262 295 276 964'
428
+ it_is_correct_for 'Rwanda', :samples => ['+250 72 1234567',
429
+ '+250 73 1234567',
430
+ '+250 78 1234567',
431
+ '+250 79 1234567',
432
+ '+250 25 1234567',
433
+ '+250 06 123456']
236
434
  it_is_correct_for 'Saint Helena', :samples => '+290 5134'
237
435
  it_is_correct_for 'Saint Pierre and Miquelon (Collectivité territoriale de la République française)', :samples => '+508 474 714'
238
436
  it_is_correct_for 'Salvador (El)', :samples => [
@@ -261,8 +459,10 @@ describe 'plausibility' do
261
459
  ['+381 11 123 456', '+381 11 123 4567'],
262
460
  '+381 72 123 456',
263
461
  '+381 60 123',
264
- '+381 60 123 4567',
462
+ ['+381 60 123 4567', '+381 69 123 456'],
265
463
  '+381 42 123 456',
464
+ '+381 677 123 456',
465
+ '+381 678 123 456',
266
466
  '+381 9 123 4567',
267
467
  '+381 60 123',
268
468
  '+381 60 123 456 7890',
@@ -333,7 +533,10 @@ describe 'plausibility' do
333
533
  it_is_correct_for 'Lybia', :samples => ['+218 205 123 45',
334
534
  '+218 22 123 456',
335
535
  '+218 21 1234 456',
336
- '+218 91 1234 456']
536
+ '+218 91 1234 456',
537
+ '+218 92 1234 456',
538
+ '+218 94 1234 456',
539
+ '+218 95 1234 456']
337
540
  it_is_correct_for 'Mongolia', :samples => ['+976 11 123 45',
338
541
  ['+976 121 12 34', '+976 121 12 345'],
339
542
  '+976 70 123 456',
@@ -367,6 +570,7 @@ describe 'plausibility' do
367
570
  ]
368
571
  it_is_correct_for 'United Arab Emirates', :samples => ['+971 800 12',
369
572
  '+971 800 12 345 6789',
573
+ '+971 800 12 345 67',
370
574
  '+971 2 123 4567',
371
575
  '+971 50 641 2345',
372
576
  '+971 600 641 234',
@@ -384,15 +588,21 @@ describe 'plausibility' do
384
588
  '+598 93 123 456',
385
589
  '+598 908 123 45',
386
590
  '+598 805 123 45']
591
+ it_is_correct_for 'Vietnam', :samples => ['+84 24 41234567',
592
+ '+84 28 41234567',
593
+ '+84 23 61234567']
387
594
  it_is_correct_for 'Yemen', :samples => [['+967 1 234 567', '+967 1 234 5678'],
388
595
  '+967 7 234 567',
389
596
  '+967 77 123 4567',
390
597
  '+967 58 1234']
391
598
  it 'is correct for Zambia' do
392
599
  Phony.plausible?('+260 211 123456').should be_truthy # Fixed
393
- Phony.plausible?('+260 955 123456').should be_truthy # Mobile
394
- Phony.plausible?('+260 967 123456').should be_truthy # Mobile
395
- Phony.plausible?('+260 978 123456').should be_truthy # Mobile
600
+ Phony.plausible?('+260 96 512 4567').should be_truthy # MTN Mobile
601
+ Phony.plausible?('+260 97 712 3456').should be_truthy # Airtel Mobile
602
+ Phony.plausible?('+260 95 512 4567').should be_truthy # Zamtel Mobile
603
+ Phony.plausible?('+260 96 512 456').should be_falsy # MTN Mobile (Too short)
604
+ Phony.plausible?('+260 97 812 345').should be_falsy # Airtel Mobile (Too short)
605
+ Phony.plausible?('+260 95 512 345').should be_falsy # Zamtel Mobile (Too short)
396
606
  Phony.plausible?('+260 800 123 456').should be_truthy # Toll free
397
607
  end
398
608
  it_is_correct_for 'Zimbabwe', :samples => [['+263 2582 123 456', '+263 2582 123'],
@@ -407,10 +617,67 @@ describe 'plausibility' do
407
617
  Phony.plausible?('+62 22 0000 0000').should be_truthy
408
618
  Phony.plausible?('+62 22 000 000 000').should be_truthy
409
619
  end
620
+
621
+ it 'is correct for Italy' do
622
+ Phony.plausible?('+39 0574 123').should be_falsy
623
+ Phony.plausible?('+39 0574 1234').should be_truthy
624
+ Phony.plausible?('+39 0574 12345').should be_falsy
625
+
626
+ Phony.plausible?('+39 085 541').should be_falsy
627
+ Phony.plausible?('+39 085 5410').should be_truthy
628
+ Phony.plausible?('+39 085 54105').should be_truthy
629
+
630
+ Phony.plausible?('+39 06 4991').should be_falsy
631
+ Phony.plausible?('+39 06 49911').should be_truthy
632
+ Phony.plausible?('+39 06 499112').should be_truthy
633
+
634
+ Phony.plausible?('+39 800 081631').should be_truthy
635
+ Phony.plausible?('+39 800 0816311').should be_falsy
636
+
637
+ Phony.plausible?('+39 803 08163').should be_falsy
638
+ Phony.plausible?('+39 803 081').should be_truthy
639
+ end
410
640
 
411
641
  it 'is correct for Russia' do
412
642
  Phony.plausible?('+7 3522 000 000').should be_truthy
413
643
  end
644
+
645
+ it 'is correct for Peru' do
646
+ Phony.plausible?('+51 1 123 1234').should be_truthy # Lima
647
+ Phony.plausible?('+51 9 1234 1234').should be_truthy # mobile
648
+ Phony.plausible?('+51 84 123 123').should be_truthy # Cuzco, best effort
649
+ end
650
+
651
+ it 'is correct for Kosovo' do
652
+ Phony.plausible?('+383 29 000 000').should be_truthy # Landline
653
+ Phony.plausible?('+383 44 000 000').should be_truthy # Mobile
654
+ end
655
+
656
+ it 'is correct for Bulgaria' do
657
+ Phony.plausible?('+359 2 123 123').should be_truthy # Landline Sofia
658
+ Phony.plausible?('+359 2 123 1234').should be_truthy # Landline Sofia
659
+ Phony.plausible?('+359 30 123 12').should be_truthy # Landline
660
+ Phony.plausible?('+359 30 123 123').should be_truthy # Landline
661
+ Phony.plausible?('+359 89 123 1234').should be_truthy # Mobile
662
+ end
663
+
664
+ it 'is correct for Malaysia' do
665
+ Phony.plausible?('+60 5 123 1234').should be_truthy # Non Selangor Landline
666
+ Phony.plausible?('+60 3 1234 1234').should be_truthy # Selangor Landline
667
+ Phony.plausible?('+60 88 123 123').should be_truthy # Landline Sabah – Kota Kinabalu and Kudat
668
+ end
669
+
670
+ it 'is correct for Japan' do
671
+ Phony.plausible?('+81 90 1234 1234').should be_truthy
672
+ Phony.plausible?('+81 120 123 123').should be_truthy
673
+ Phony.plausible?('+81 800 123 1234').should be_truthy
674
+ end
675
+
676
+ it 'is correct for Philippine' do
677
+ Phony.plausible?('+63 2 89889999').should be_truthy
678
+ Phony.plausible?('+63 976 1234567').should be_truthy # mobile phone with area code 9
679
+ Phony.plausible?('+63 876 1234567').should be_truthy # mobile phone with area code 8
680
+ end
414
681
  end
415
682
  end
416
683
  end