phony 2.17.0 → 2.20.12
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 +4 -4
- data/README.textile +34 -6
- data/lib/phony/config.rb +91 -0
- data/lib/phony/countries/argentina.rb +355 -0
- data/lib/phony/countries/austria.rb +4 -2
- data/lib/phony/countries/bangladesh.rb +2 -0
- data/lib/phony/countries/belarus.rb +2 -0
- data/lib/phony/countries/brazil.rb +4 -2
- data/lib/phony/countries/cambodia.rb +3 -5
- data/lib/phony/countries/china.rb +7 -2
- data/lib/phony/countries/croatia.rb +2 -0
- data/lib/phony/countries/georgia.rb +2 -0
- data/lib/phony/countries/germany.rb +5 -2
- data/lib/phony/countries/guinea.rb +8 -5
- data/lib/phony/countries/india.rb +2 -0
- data/lib/phony/countries/indonesia.rb +2 -0
- data/lib/phony/countries/ireland.rb +27 -23
- data/lib/phony/countries/italy.rb +41 -18
- data/lib/phony/countries/japan.rb +60 -8
- data/lib/phony/countries/kyrgyzstan.rb +2 -0
- data/lib/phony/countries/latvia.rb +2 -0
- data/lib/phony/countries/libya.rb +3 -1
- data/lib/phony/countries/malaysia.rb +2 -0
- data/lib/phony/countries/moldova.rb +2 -0
- data/lib/phony/countries/montenegro.rb +2 -0
- data/lib/phony/countries/myanmar.rb +2 -0
- data/lib/phony/countries/namibia.rb +2 -0
- data/lib/phony/countries/nepal.rb +2 -0
- data/lib/phony/countries/netherlands.rb +2 -0
- data/lib/phony/countries/pakistan.rb +2 -0
- data/lib/phony/countries/paraguay.rb +2 -0
- data/lib/phony/countries/russia_kazakhstan_abkhasia_south_ossetia.rb +2 -0
- data/lib/phony/countries/saudi_arabia.rb +2 -0
- data/lib/phony/countries/serbia.rb +7 -1
- data/lib/phony/countries/somalia.rb +2 -0
- data/lib/phony/countries/south_korea.rb +7 -2
- data/lib/phony/countries/sweden.rb +2 -0
- data/lib/phony/countries/taiwan.rb +3 -0
- data/lib/phony/countries/tajikistan.rb +2 -0
- data/lib/phony/countries/turkmenistan.rb +2 -0
- data/lib/phony/countries/ukraine.rb +2 -0
- data/lib/phony/countries/united_kingdom.rb +5 -2
- data/lib/phony/countries/uruguay.rb +2 -0
- data/lib/phony/countries/vietnam.rb +7 -1
- data/lib/phony/countries/zimbabwe.rb +2 -0
- data/lib/phony/countries.rb +108 -65
- data/lib/phony/country.rb +11 -3
- data/lib/phony/country_codes.rb +16 -3
- data/lib/phony/dsl.rb +5 -3
- data/lib/phony/local_splitters/fixed.rb +2 -0
- data/lib/phony/national_code.rb +1 -1
- data/lib/phony/national_splitters/none.rb +1 -3
- data/lib/phony/trunk_code.rb +5 -5
- data/lib/phony.rb +62 -57
- data/spec/functional/config_spec.rb +44 -0
- data/spec/functional/plausibility_spec.rb +104 -19
- data/spec/lib/phony/countries_spec.rb +107 -35
- data/spec/lib/phony/country_codes_spec.rb +82 -58
- data/spec/lib/phony/country_spec.rb +29 -9
- data/spec/lib/phony/dsl_spec.rb +7 -3
- data/spec/lib/phony/local_splitters/regex_spec.rb +19 -15
- data/spec/lib/phony/national_code_spec.rb +15 -45
- data/spec/lib/phony/national_splitters/fixed_spec.rb +12 -16
- data/spec/lib/phony/national_splitters/none_spec.rb +3 -3
- data/spec/lib/phony/national_splitters/variable_spec.rb +9 -13
- data/spec/lib/phony/trunk_code_spec.rb +85 -0
- data/spec/lib/phony/vanity_spec.rb +4 -4
- metadata +23 -18
@@ -1,199 +1,223 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Phony::CountryCodes do
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
|
5
|
+
let(:countries) { Phony::CountryCodes.instance }
|
6
|
+
|
7
|
+
describe '#plausible?' do
|
8
|
+
it 'raises an error on a too long ccc' do
|
9
|
+
expect do
|
10
|
+
countries.plausible?('+1 868 7620266', ccc: '1868123')
|
11
|
+
end.to raise_error(ArgumentError, %Q{The provided ccc option is too long and includes more than a cc ('1') and ndc ('868'). It also includes '123'.})
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'ccc handling' do
|
16
|
+
it 'splits a ccc correctly' do
|
17
|
+
cc, ndc, *local = countries.split('1868')
|
18
|
+
|
19
|
+
expect(cc).to eq '1'
|
20
|
+
expect(ndc).to eq '868'
|
21
|
+
end
|
22
|
+
it 'splits a ccc correctly' do
|
23
|
+
cc, ndc, *local = countries.split('1868')
|
24
|
+
|
25
|
+
expect(cc).to eq '1'
|
26
|
+
expect(ndc).to eq '868'
|
27
|
+
end
|
7
28
|
end
|
8
29
|
|
9
30
|
describe '#[]' do
|
10
31
|
it 'returns a country' do
|
11
|
-
|
32
|
+
expect(countries['41'].class).to eq Phony::Country
|
12
33
|
end
|
13
34
|
end
|
14
35
|
|
15
36
|
describe '#country_for' do
|
16
37
|
it 'returns a country' do
|
17
|
-
|
38
|
+
expect(countries.send(:country_for, '41').class).to eq Phony::Country
|
18
39
|
end
|
19
40
|
end
|
20
41
|
|
21
42
|
describe '#countrify' do
|
22
43
|
it 'returns a country' do
|
23
|
-
|
44
|
+
expect(countries.send(:countrify, '441231212', '41')).to eq '41441231212'
|
24
45
|
end
|
25
46
|
end
|
26
47
|
describe '#countrify!' do
|
27
48
|
it 'in-place replaces the number' do
|
28
49
|
number = '441231212'
|
29
|
-
|
50
|
+
expect(countries.send(:countrify!, number, '41')).to eq number
|
30
51
|
|
31
|
-
number.
|
52
|
+
expect(number).to eq '41441231212'
|
32
53
|
end
|
33
54
|
end
|
34
55
|
|
35
56
|
describe '#vanity?' do
|
36
57
|
it 'returns true if so' do
|
37
|
-
|
58
|
+
expect(countries.vanity?('1800HELLOES')).to eq true
|
38
59
|
end
|
39
60
|
it 'returns false if not' do
|
40
|
-
|
61
|
+
expect(countries.vanity?('18001234567')).to eq false
|
41
62
|
end
|
42
63
|
end
|
43
64
|
|
44
65
|
describe 'normalize' do
|
45
66
|
it 'normalizes correctly' do
|
46
|
-
|
67
|
+
expect(countries.normalize('0041-44-364-35-32')).to eq '41443643532'
|
47
68
|
end
|
48
69
|
it 'normalizes correctly with CC option' do
|
49
|
-
|
70
|
+
expect(countries.normalize('044-364-35-32', cc: '41')).to eq '41443643532'
|
50
71
|
end
|
51
72
|
|
52
73
|
context 'specific countries' do
|
53
74
|
it 'handles Congo correctly' do
|
54
|
-
|
55
|
-
|
75
|
+
expect(countries.normalize('+242 0571 73992')).to eq '242057173992'
|
76
|
+
expect(countries.normalize('+242 2221 15932')).to eq '242222115932'
|
56
77
|
end
|
57
78
|
end
|
58
79
|
end
|
59
80
|
|
60
81
|
describe 'formatted' do
|
61
82
|
it 'formats correctly' do
|
62
|
-
|
83
|
+
expect(countries.formatted('41443643532', :format => :international, :spaces => :-)).to eq '+41-44-364-35-32'
|
63
84
|
end
|
64
85
|
it 'formats correctly' do
|
65
|
-
|
86
|
+
expect(countries.formatted('41443643532', :format => :international_relative, :spaces => :-)).to eq '0041-44-364-35-32'
|
66
87
|
end
|
67
88
|
it 'formats correctly' do
|
68
|
-
|
89
|
+
expect(countries.formatted('41443643532', :format => :national, :spaces => :-)).to eq '044-364-35-32'
|
69
90
|
end
|
70
91
|
context 'specific' do
|
71
92
|
it 'formats Ireland correctly' do
|
72
|
-
|
93
|
+
expect(countries.formatted("3533451234", :format => :national)).to eq '0345 1234'
|
73
94
|
end
|
74
95
|
it 'formats Ireland correctly' do
|
75
|
-
|
96
|
+
expect(countries.formatted("353411231234", :format => :national)).to eq '041 123 1234'
|
76
97
|
end
|
77
98
|
it 'formats Spain correctly' do
|
78
|
-
|
99
|
+
expect(countries.formatted("34123456789", :format => :national)).to eq '123 456 789'
|
79
100
|
end
|
80
101
|
it 'formats Cambodia correctly' do
|
81
|
-
|
102
|
+
expect(countries.formatted('85512239123', :format => :national)).to eq '012 239 123'
|
82
103
|
end
|
83
104
|
it 'formats the US correctly' do
|
84
|
-
|
105
|
+
expect(countries.formatted('18005551212', :format => :national, :spaces => :-)).to eq '(800)-555-1212'
|
85
106
|
end
|
86
107
|
it 'formats the US correctly' do
|
87
|
-
|
108
|
+
expect(countries.formatted('18005551212', :format => :national, :spaces => :-)).to eq '(800)-555-1212'
|
88
109
|
end
|
89
110
|
end
|
90
111
|
context 'default' do
|
91
112
|
it "should format swiss numbers" do
|
92
|
-
|
113
|
+
expect(countries.formatted('41443643532')).to eq '+41 44 364 35 32'
|
93
114
|
end
|
94
115
|
it "should format swiss service numbers" do
|
95
|
-
|
116
|
+
expect(countries.formatted('41800112233')).to eq '+41 800 112 233'
|
96
117
|
end
|
97
118
|
it "should format austrian numbers" do
|
98
|
-
|
119
|
+
expect(countries.formatted('43198110')).to eq '+43 1 98110'
|
99
120
|
end
|
100
121
|
it "should format american numbers" do
|
101
|
-
|
122
|
+
expect(countries.formatted('18705551122')).to eq '+1 (870) 555-1122'
|
102
123
|
end
|
103
124
|
it "should format irish numbers" do
|
104
|
-
|
125
|
+
expect(countries.formatted('35311234567')).to eq '+353 1 123 4567'
|
105
126
|
end
|
106
127
|
end
|
107
128
|
describe "international" do
|
108
129
|
it "should format north american numbers" do
|
109
|
-
|
130
|
+
expect(countries.formatted('18091231234', :format => :international)).to eq '+1 (809) 123-1234'
|
110
131
|
end
|
111
132
|
it "should format austrian numbers" do
|
112
|
-
|
133
|
+
expect(countries.formatted('43198110', :format => :international)).to eq '+43 1 98110'
|
113
134
|
end
|
114
135
|
it "should format austrian numbers" do
|
115
|
-
|
136
|
+
expect(countries.formatted('43198110', :format => :international_absolute)).to eq '+43 1 98110'
|
116
137
|
end
|
117
138
|
it "should format french numbers" do
|
118
|
-
|
139
|
+
expect(countries.formatted('33142278186', :format => :+)).to eq '+33 1 42 27 81 86'
|
119
140
|
end
|
120
141
|
it "should format austrian numbers" do
|
121
|
-
|
142
|
+
expect(countries.formatted('43198110', :format => :international_relative)).to eq '0043 1 98110'
|
122
143
|
end
|
123
144
|
it 'should format liechtensteiner numbers' do
|
124
|
-
|
145
|
+
expect(countries.formatted('4233841148', :format => :international_relative)).to eq '00423 384 11 48'
|
125
146
|
end
|
126
147
|
it "should format irish numbers" do
|
127
|
-
|
148
|
+
expect(countries.formatted('35311234567', :format => :international)).to eq '+353 1 123 4567'
|
128
149
|
end
|
129
150
|
it "should format luxembourgian numbers" do
|
130
|
-
|
151
|
+
expect(countries.formatted('352222809', :format => :international)).to eq '+352 22 28 09'
|
131
152
|
end
|
132
153
|
it "should format luxembourgian 4-digit ndc numbers" do
|
133
|
-
|
154
|
+
expect(countries.formatted('35226222809', :format => :international)).to eq '+352 2622 28 09'
|
134
155
|
end
|
135
156
|
it "should format luxembourgian mobile numbers" do
|
136
|
-
|
157
|
+
expect(countries.formatted('352621123456', :format => :international)).to eq '+352 621 123 456'
|
137
158
|
end
|
138
159
|
it "should format luxembourgian city numbers" do
|
139
|
-
|
160
|
+
expect(countries.formatted('3524123456', :format => :international)).to eq '+352 41 23 45 6'
|
140
161
|
end
|
141
162
|
it "should format luxembourgian machine to machine numbers" do
|
142
|
-
|
163
|
+
expect(countries.formatted('352602112345678', :format => :international)).to eq '+352 6021 12 34 56 78'
|
143
164
|
end
|
144
165
|
it "should format luxembourgian numbers" do
|
145
|
-
|
166
|
+
expect(countries.formatted('352370431', :format => :international)).to eq '+352 37 04 31'
|
146
167
|
end
|
147
168
|
it "should format luxembourgian numbers" do
|
148
|
-
|
169
|
+
expect(countries.formatted('35227855', :format => :international)).to eq '+352 27 85 5'
|
170
|
+
end
|
171
|
+
it "should format nigerian lagosian numbers" do
|
172
|
+
expect(countries.formatted('23414480000', :format => :international)).to eq '+234 1 448 0000'
|
149
173
|
end
|
150
|
-
it "should format nigerian numbers" do
|
151
|
-
|
174
|
+
it "should format nigerian beninese numbers" do
|
175
|
+
expect(countries.formatted('23452123456', :format => :international)).to eq '+234 52 123 456'
|
152
176
|
end
|
153
177
|
it "should format nigerian mobile numbers" do
|
154
|
-
|
178
|
+
expect(countries.formatted('2347061234567', :format => :international)).to eq '+234 706 123 4567'
|
155
179
|
end
|
156
180
|
context 'with no spaces' do
|
157
181
|
it "should format north american numbers" do
|
158
|
-
Phony.formatted('18091231234', :format => :international, :spaces => '').
|
182
|
+
expect(Phony.formatted('18091231234', :format => :international, :spaces => '')).to eq '+1(809)123-1234'
|
159
183
|
end
|
160
184
|
it "should format austrian numbers" do
|
161
|
-
Phony.formatted('43198110', :format => :international, :spaces => '').
|
185
|
+
expect(Phony.formatted('43198110', :format => :international, :spaces => '')).to eq '+43198110'
|
162
186
|
end
|
163
187
|
it "should format austrian numbers" do
|
164
|
-
Phony.formatted('43198110', :format => :international_absolute, :spaces => '').
|
188
|
+
expect(Phony.formatted('43198110', :format => :international_absolute, :spaces => '')).to eq '+43198110'
|
165
189
|
end
|
166
190
|
it "should format french numbers" do
|
167
|
-
Phony.formatted('33142278186', :format => :+, :spaces => '').
|
191
|
+
expect(Phony.formatted('33142278186', :format => :+, :spaces => '')).to eq '+33142278186'
|
168
192
|
end
|
169
193
|
it "should format austrian numbers" do
|
170
|
-
Phony.formatted('43198110', :format => :international_relative, :spaces => '').
|
194
|
+
expect(Phony.formatted('43198110', :format => :international_relative, :spaces => '')).to eq '0043198110'
|
171
195
|
end
|
172
196
|
it 'should format liechtensteiner numbers' do
|
173
|
-
Phony.formatted('4233841148', :format => :international_relative, :spaces => '').
|
197
|
+
expect(Phony.formatted('4233841148', :format => :international_relative, :spaces => '')).to eq '004233841148'
|
174
198
|
end
|
175
199
|
end
|
176
200
|
context 'with special spaces' do
|
177
201
|
it "should format swiss numbers" do
|
178
|
-
Phony.formatted('41443643532', :format => :international).
|
202
|
+
expect(Phony.formatted('41443643532', :format => :international)).to eq '+41 44 364 35 32'
|
179
203
|
end
|
180
204
|
it "should format north american numbers" do
|
181
|
-
Phony.formatted('18091231234', :format => :international, :spaces => :-).
|
205
|
+
expect(Phony.formatted('18091231234', :format => :international, :spaces => :-)).to eq '+1-(809)-123-1234'
|
182
206
|
end
|
183
207
|
it "should format austrian numbers" do
|
184
|
-
Phony.formatted('43198110', :format => :international, :spaces => :-).
|
208
|
+
expect(Phony.formatted('43198110', :format => :international, :spaces => :-)).to eq '+43-1-98110'
|
185
209
|
end
|
186
210
|
it "should format austrian numbers" do
|
187
|
-
Phony.formatted('43198110', :format => :international_absolute, :spaces => :-).
|
211
|
+
expect(Phony.formatted('43198110', :format => :international_absolute, :spaces => :-)).to eq '+43-1-98110'
|
188
212
|
end
|
189
213
|
it "should format french numbers" do
|
190
|
-
Phony.formatted('33142278186', :format => :+, :spaces => :-).
|
214
|
+
expect(Phony.formatted('33142278186', :format => :+, :spaces => :-)).to eq '+33-1-42-27-81-86'
|
191
215
|
end
|
192
216
|
it "should format austrian numbers" do
|
193
|
-
Phony.formatted('43198110', :format => :international_relative, :spaces => :-).
|
217
|
+
expect(Phony.formatted('43198110', :format => :international_relative, :spaces => :-)).to eq '0043-1-98110'
|
194
218
|
end
|
195
219
|
it 'should format liechtensteiner numbers' do
|
196
|
-
Phony.formatted('4233841148', :format => :international_relative, :spaces => :-).
|
220
|
+
expect(Phony.formatted('4233841148', :format => :international_relative, :spaces => :-)).to eq '00423-384-11-48'
|
197
221
|
end
|
198
222
|
|
199
223
|
end
|
@@ -12,18 +12,18 @@ describe Phony::Country do
|
|
12
12
|
end
|
13
13
|
describe '#clean' do
|
14
14
|
it 'cleans the number' do
|
15
|
-
country.clean('+41-44-123-12-12').
|
15
|
+
expect(country.clean('+41-44-123-12-12')).to eq '41441231212'
|
16
16
|
end
|
17
17
|
end
|
18
18
|
describe '#vanity_to_number' do
|
19
19
|
it 'turns the vanity number into a number' do
|
20
|
-
country.vanity_to_number('1-800-HELLO').
|
20
|
+
expect(country.vanity_to_number('1-800-HELLO')).to eq '1-800-43556'
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
context 'regression' do
|
26
|
-
describe '
|
26
|
+
describe 'Iceland' do
|
27
27
|
let(:country) do
|
28
28
|
national_splitter = Phony::NationalSplitters::None.instance_for
|
29
29
|
local_splitter = Phony::LocalSplitters::Fixed.instance_for [3, 4]
|
@@ -32,7 +32,27 @@ describe Phony::Country do
|
|
32
32
|
described_class.new national_code
|
33
33
|
end
|
34
34
|
it 'splits correctly' do
|
35
|
-
country.split('112').
|
35
|
+
expect(country.split('112')).to eq [nil, false, '112']
|
36
|
+
end
|
37
|
+
end
|
38
|
+
describe 'San Marino' do
|
39
|
+
it 'normalizes correctly' do
|
40
|
+
expect(Phony.normalize('+3780549903549')).to eq '3780549903549'
|
41
|
+
end
|
42
|
+
xit 'automatically adds the sole NC' do
|
43
|
+
expect(Phony.normalize('+378903549')).to eq '3780549903549'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
describe 'Japan' do
|
47
|
+
it 'normalizes correctly' do
|
48
|
+
expect(Phony.normalize('+81-03-1234-5634')).to eq '81312345634'
|
49
|
+
expect(Phony.normalize('03-1234-5634', cc: '81')).to eq '81312345634'
|
50
|
+
end
|
51
|
+
it 'formats correctly' do
|
52
|
+
expect(Phony.format('81312345634')).to eq '+81-3-1234-5634'
|
53
|
+
end
|
54
|
+
it 'splits correctly' do
|
55
|
+
expect(Phony.split('81312345634')).to eq %w(81 3 1234 5634)
|
36
56
|
end
|
37
57
|
end
|
38
58
|
end
|
@@ -48,12 +68,12 @@ describe Phony::Country do
|
|
48
68
|
|
49
69
|
describe "split" do
|
50
70
|
it "should handle ZH" do
|
51
|
-
country.split('443643532').
|
71
|
+
expect(country.split('443643532')).to eq [nil, '44', '364', '35', '32']
|
52
72
|
end
|
53
73
|
end
|
54
74
|
describe 'normalize' do
|
55
75
|
it "should handle ZH" do
|
56
|
-
country.normalize('0443643532').
|
76
|
+
expect(country.normalize('0443643532')).to eq '443643532'
|
57
77
|
end
|
58
78
|
end
|
59
79
|
end
|
@@ -73,12 +93,12 @@ describe Phony::Country do
|
|
73
93
|
|
74
94
|
describe "split" do
|
75
95
|
it "should handle ZH" do
|
76
|
-
country.split('443643532').
|
96
|
+
expect(country.split('443643532')).to eq [nil, '44', '364', '35', '32']
|
77
97
|
end
|
78
98
|
it "should handle 800" do
|
79
|
-
country.split('800333666').
|
99
|
+
expect(country.split('800333666')).to eq [nil, '800', '333', '666']
|
80
100
|
end
|
81
101
|
end
|
82
102
|
end
|
83
103
|
|
84
|
-
end
|
104
|
+
end
|
data/spec/lib/phony/dsl_spec.rb
CHANGED
@@ -7,17 +7,21 @@ describe Phony::DSL do
|
|
7
7
|
let(:dsl) { described_class.new }
|
8
8
|
|
9
9
|
it 'has a todo' do
|
10
|
+
result = nil
|
11
|
+
|
10
12
|
Phony.define do
|
11
|
-
todo.split("123456789012345")
|
13
|
+
result = todo.split("123456789012345")
|
12
14
|
end
|
15
|
+
|
16
|
+
expect(result).to eq [nil, false, '123456789012345']
|
13
17
|
end
|
14
18
|
|
15
19
|
describe 'match' do
|
16
20
|
it 'checks for ( in regex' do
|
17
21
|
expect { dsl.match(/123/) }.to raise_error("Regexp /123/ needs a group in it that defines which digits belong to the NDC.")
|
18
22
|
end
|
19
|
-
it '
|
20
|
-
dsl.match(/(123)/).
|
23
|
+
it 'should return a Phony::NationalSplitters::Regex' do
|
24
|
+
expect(dsl.match(/(123)/).class.name).to eq Phony::NationalSplitters::Regex.name
|
21
25
|
end
|
22
26
|
end
|
23
27
|
|
@@ -1,7 +1,14 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
+
main = self
|
4
|
+
|
3
5
|
describe Phony::LocalSplitters::Regex do
|
4
6
|
|
7
|
+
before do
|
8
|
+
load 'spec_helper_extensions.rb'
|
9
|
+
main.send :include, SpecHelperExtensions
|
10
|
+
end
|
11
|
+
|
5
12
|
describe 'instance_for' do
|
6
13
|
it 'does not cache' do
|
7
14
|
described_class.instance_for({}).should_not equal(described_class.instance_for({}))
|
@@ -9,40 +16,37 @@ describe Phony::LocalSplitters::Regex do
|
|
9
16
|
end
|
10
17
|
|
11
18
|
describe 'split' do
|
12
|
-
|
13
|
-
|
14
|
-
#
|
15
|
-
@splitter = described_class.instance_for(/^[489].*$/ => [3,2,3], :fallback => [2,2,2,2])
|
16
|
-
end
|
19
|
+
# Norway.
|
20
|
+
let(:splitter) { described_class.instance_for(/^[489].*$/ => [3,2,3], :fallback => [2,2,2,2]) }
|
17
21
|
it 'splits a number correctly' do
|
18
|
-
|
22
|
+
expect(splitter.split('21234567')).to eq ['21','23','45','67']
|
19
23
|
end
|
20
24
|
it 'splits a number correctly' do
|
21
|
-
|
25
|
+
expect(splitter.split('31234567')).to eq ['31','23','45','67']
|
22
26
|
end
|
23
27
|
it 'splits a number correctly' do
|
24
|
-
|
28
|
+
expect(splitter.split('41234567')).to eq ['412','34','567']
|
25
29
|
end
|
26
30
|
it 'splits a number correctly' do
|
27
|
-
|
31
|
+
expect(splitter.split('51234567')).to eq ['51','23','45','67']
|
28
32
|
end
|
29
33
|
it 'splits a number correctly' do
|
30
|
-
|
34
|
+
expect(splitter.split('61234567')).to eq ['61','23','45','67']
|
31
35
|
end
|
32
36
|
it 'splits a number correctly' do
|
33
|
-
|
37
|
+
expect(splitter.split('71234567')).to eq ['71','23','45','67']
|
34
38
|
end
|
35
39
|
it 'splits a number correctly' do
|
36
|
-
|
40
|
+
expect(splitter.split('81234567')).to eq ['812','34','567']
|
37
41
|
end
|
38
42
|
it 'splits a number correctly' do
|
39
|
-
|
43
|
+
expect(splitter.split('91234567')).to eq ['912','34','567']
|
40
44
|
end
|
41
45
|
it 'splits it fast' do
|
42
|
-
performance_of {
|
46
|
+
expect(performance_of { splitter.split('21234567') }).to be < 0.00005
|
43
47
|
end
|
44
48
|
it 'splits it fast' do
|
45
|
-
performance_of {
|
49
|
+
expect(performance_of { splitter.split('91234567') }).to be < 0.00004
|
46
50
|
end
|
47
51
|
end
|
48
52
|
|
@@ -5,87 +5,57 @@ describe Phony::NationalCode do
|
|
5
5
|
describe 'split' do
|
6
6
|
context 'regression' do
|
7
7
|
describe 'iceland' do
|
8
|
-
|
8
|
+
let(:national) do
|
9
9
|
national_splitter = Phony::NationalSplitters::None.instance_for
|
10
10
|
local_splitter = Phony::LocalSplitters::Fixed.instance_for [3, 4]
|
11
11
|
|
12
|
-
|
12
|
+
Phony::NationalCode.new national_splitter, local_splitter
|
13
13
|
end
|
14
14
|
it 'splits correctly' do
|
15
|
-
|
15
|
+
expect(national.split('112')).to eq [nil, false, '112']
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
19
19
|
context 'with fixed ndc (Swiss)' do
|
20
|
-
|
20
|
+
let(:national) do
|
21
21
|
national_splitter = Phony::NationalSplitters::Fixed.instance_for 2
|
22
22
|
local_splitter = Phony::LocalSplitters::Fixed.instance_for [3, 2, 2]
|
23
23
|
|
24
|
-
|
24
|
+
Phony::NationalCode.new national_splitter, local_splitter
|
25
25
|
end
|
26
26
|
it 'splits correctly' do
|
27
|
-
|
27
|
+
expect(national.split('443643532')).to eq [nil, '44', '364', '35', '32']
|
28
28
|
end
|
29
29
|
it 'splits correctly' do
|
30
|
-
|
30
|
+
expect(national.split('44364353')).to eq [nil, '44', '364', '35', '3']
|
31
31
|
end
|
32
32
|
it 'normalizes correctly' do
|
33
|
-
|
33
|
+
expect(national.normalize('044364353')).to eq '44364353'
|
34
34
|
end
|
35
35
|
it 'normalizes correctly' do
|
36
|
-
|
36
|
+
expect(national.normalize('44364353')).to eq '44364353'
|
37
37
|
end
|
38
38
|
end
|
39
39
|
context 'with fixed ndc (French)' do
|
40
|
-
|
40
|
+
let(:national) do
|
41
41
|
national_splitter = Phony::NationalSplitters::Fixed.instance_for 1
|
42
42
|
local_splitter = Phony::LocalSplitters::Fixed.instance_for [2, 2, 2, 2]
|
43
43
|
|
44
|
-
|
44
|
+
Phony::NationalCode.new national_splitter, local_splitter
|
45
45
|
end
|
46
46
|
it 'splits correctly' do
|
47
|
-
|
47
|
+
expect(national.split('142278186')).to eq [nil, '1', '42', '27', '81', '86']
|
48
48
|
end
|
49
49
|
it 'splits correctly' do
|
50
|
-
|
50
|
+
expect(national.split('14227818')).to eq [nil, '1', '42', '27', '81', '8']
|
51
51
|
end
|
52
52
|
it 'normalizes correctly' do
|
53
|
-
|
53
|
+
expect(national.normalize('0142278186')).to eq '142278186'
|
54
54
|
end
|
55
55
|
it 'normalizes correctly' do
|
56
|
-
|
56
|
+
expect(national.normalize('142278186')).to eq '142278186'
|
57
57
|
end
|
58
58
|
end
|
59
|
-
# context 'normalizing' do
|
60
|
-
# context 'false' do
|
61
|
-
# before(:each) do
|
62
|
-
# @national = Phony::NationalCode.new nil, nil, false
|
63
|
-
# end
|
64
|
-
# it 'normalizes an italian case correctly' do
|
65
|
-
# @national.normalize('0909709511').should == '0909709511'
|
66
|
-
# end
|
67
|
-
# end
|
68
|
-
# context 'true' do
|
69
|
-
# before(:each) do
|
70
|
-
# national_splitter = Phony::NationalSplitters::Fixed.instance_for 2
|
71
|
-
# local_splitter = Phony::LocalSplitters::Fixed.instance_for [3, 2, 2]
|
72
|
-
# @national = Phony::NationalCode.new national_splitter, local_splitter, true
|
73
|
-
# end
|
74
|
-
# it 'normalizes a swiss case correctly' do
|
75
|
-
# @national.normalize('044364353').should == '44364353'
|
76
|
-
# end
|
77
|
-
# end
|
78
|
-
# context 'nil (true)' do
|
79
|
-
# before(:each) do
|
80
|
-
# national_splitter = Phony::NationalSplitters::Fixed.instance_for 2
|
81
|
-
# local_splitter = Phony::LocalSplitters::Fixed.instance_for [3, 2, 2]
|
82
|
-
# @national = Phony::NationalCode.new national_splitter, local_splitter, nil
|
83
|
-
# end
|
84
|
-
# it 'normalizes a swiss case correctly' do
|
85
|
-
# @national.normalize('044364353').should == '44364353'
|
86
|
-
# end
|
87
|
-
# end
|
88
|
-
# end
|
89
59
|
end
|
90
60
|
|
91
61
|
end
|
@@ -4,45 +4,41 @@ describe Phony::NationalSplitters::Fixed do
|
|
4
4
|
|
5
5
|
describe 'instance_for' do
|
6
6
|
it 'caches' do
|
7
|
-
Phony::NationalSplitters::Fixed.instance_for(3).
|
7
|
+
expect(Phony::NationalSplitters::Fixed.instance_for(3)).to eq Phony::NationalSplitters::Fixed.instance_for(3)
|
8
8
|
end
|
9
9
|
it 'caches correctly' do
|
10
|
-
Phony::NationalSplitters::Fixed.instance_for(1).
|
10
|
+
expect(Phony::NationalSplitters::Fixed.instance_for(1)).to_not eq Phony::NationalSplitters::Fixed.instance_for(2)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
describe 'split' do
|
15
|
-
|
16
|
-
@splitter = Phony::NationalSplitters::Fixed.new 2
|
17
|
-
end
|
15
|
+
let(:splitter) { Phony::NationalSplitters::Fixed.new(2) }
|
18
16
|
it 'splits correctly' do
|
19
|
-
|
17
|
+
expect(splitter.split('443643532')).to eq [nil, '44', '3643532']
|
20
18
|
end
|
21
19
|
it 'splits correctly even when the number is too long' do
|
22
|
-
|
20
|
+
expect(splitter.split('44364353211')).to eq [nil, '44', '364353211']
|
23
21
|
end
|
24
22
|
it 'splits correctly even when the number is too short' do
|
25
|
-
|
23
|
+
expect(splitter.split('443')).to eq [nil, '44','3']
|
26
24
|
end
|
27
25
|
it 'has a length of 2' do
|
28
|
-
|
26
|
+
expect(splitter.length).to eq 2
|
29
27
|
end
|
30
28
|
end
|
31
29
|
describe 'split' do
|
32
|
-
|
33
|
-
@splitter = Phony::NationalSplitters::Fixed.new nil
|
34
|
-
end
|
30
|
+
let(:splitter) { Phony::NationalSplitters::Fixed.new(nil) }
|
35
31
|
it 'splits correctly' do
|
36
|
-
|
32
|
+
expect(splitter.split('443643532')).to eq [nil, '443643532']
|
37
33
|
end
|
38
34
|
it 'splits correctly even when the number is too long' do
|
39
|
-
|
35
|
+
expect(splitter.split('44364353211')).to eq [nil, '44364353211']
|
40
36
|
end
|
41
37
|
it 'splits correctly even when the number is too short' do
|
42
|
-
|
38
|
+
expect(splitter.split('443')).to eq [nil, '443']
|
43
39
|
end
|
44
40
|
it 'has a length of nil' do
|
45
|
-
|
41
|
+
expect(splitter.length).to eq nil
|
46
42
|
end
|
47
43
|
end
|
48
44
|
|