phony 2.15.0 → 2.20.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +5 -5
  2. data/README.textile +35 -7
  3. data/lib/phony/config.rb +91 -0
  4. data/lib/phony/countries/argentina.rb +355 -0
  5. data/lib/phony/countries/austria.rb +34 -24
  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 +6 -4
  9. data/lib/phony/countries/cambodia.rb +6 -4
  10. data/lib/phony/countries/china.rb +7 -2
  11. data/lib/phony/countries/croatia.rb +13 -16
  12. data/lib/phony/countries/georgia.rb +6 -4
  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 +8 -3
  17. data/lib/phony/countries/ireland.rb +27 -23
  18. data/lib/phony/countries/italy.rb +30 -17
  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 +5 -1
  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 +24 -14
  33. data/lib/phony/countries/saudi_arabia.rb +40 -0
  34. data/lib/phony/countries/serbia.rb +10 -4
  35. data/lib/phony/countries/somalia.rb +5 -1
  36. data/lib/phony/countries/south_korea.rb +16 -9
  37. data/lib/phony/countries/sweden.rb +53 -38
  38. data/lib/phony/countries/taiwan.rb +22 -46
  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 +5 -2
  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 +94 -92
  45. data/lib/phony/countries/zimbabwe.rb +2 -0
  46. data/lib/phony/countries.rb +210 -98
  47. data/lib/phony/country.rb +15 -3
  48. data/lib/phony/country_codes.rb +17 -4
  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 -4
  54. data/lib/phony/vanity.rb +1 -1
  55. data/lib/phony.rb +94 -59
  56. data/spec/functional/config_spec.rb +44 -0
  57. data/spec/functional/plausibility_spec.rb +373 -35
  58. data/spec/lib/phony/countries_spec.rb +295 -63
  59. data/spec/lib/phony/country_codes_spec.rb +106 -33
  60. data/spec/lib/phony/country_spec.rb +54 -15
  61. data/spec/lib/phony/dsl_spec.rb +2 -2
  62. data/spec/lib/phony/local_splitters/regex_spec.rb +12 -5
  63. data/spec/lib/phony/national_splitters/default_spec.rb +1 -1
  64. data/spec/lib/phony/trunk_code_spec.rb +85 -0
  65. data/spec/lib/phony/vanity_spec.rb +30 -0
  66. data/spec/lib/phony_spec.rb +70 -0
  67. metadata +27 -17
@@ -1,106 +1,179 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Phony::CountryCodes do
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
+ cc.should eq('1')
19
+ ndc.should eq('868')
20
+ end
21
+ it 'splits a ccc correctly' do
22
+ cc, ndc, *local = countries.split('1868')
23
+ cc.should eq('1')
24
+ ndc.should eq('868')
25
+ end
26
+ end
27
+
28
+ describe '#[]' do
29
+ it 'returns a country' do
30
+ countries['41'].class.should eql Phony::Country
31
+ end
32
+ end
33
+
34
+ describe '#country_for' do
35
+ it 'returns a country' do
36
+ countries.send(:country_for, '41').class.should eql Phony::Country
37
+ end
38
+ end
39
+
40
+ describe '#countrify' do
41
+ it 'returns a country' do
42
+ countries.send(:countrify, '441231212', '41').should eql '41441231212'
43
+ end
44
+ end
45
+ describe '#countrify!' do
46
+ it 'in-place replaces the number' do
47
+ number = '441231212'
48
+ countries.send(:countrify!, number, '41').should eql number
49
+
50
+ number.should == '41441231212'
51
+ end
52
+ end
53
+
54
+ describe '#vanity?' do
55
+ it 'returns true if so' do
56
+ countries.vanity?('1800HELLOES').should eql true
57
+ end
58
+ it 'returns false if not' do
59
+ countries.vanity?('18001234567').should eql false
60
+ end
61
+ end
4
62
 
5
- before(:all) do
6
- @countries = Phony::CountryCodes.instance
63
+ describe 'normalize' do
64
+ it 'normalizes correctly' do
65
+ countries.normalize('0041-44-364-35-32').should eql '41443643532'
66
+ end
67
+ it 'normalizes correctly with CC option' do
68
+ countries.normalize('044-364-35-32', cc: '41').should eql '41443643532'
69
+ end
70
+
71
+ context 'specific countries' do
72
+ it 'handles Congo correctly' do
73
+ countries.normalize('+242 0571 73992').should eql '242057173992'
74
+ countries.normalize('+242 2221 15932').should eql '242222115932'
75
+ end
76
+ end
7
77
  end
8
78
 
9
79
  describe 'formatted' do
10
80
  it 'formats correctly' do
11
- @countries.formatted('41443643532', :format => :international, :spaces => :-).should eql '+41-44-364-35-32'
81
+ countries.formatted('41443643532', :format => :international, :spaces => :-).should eql '+41-44-364-35-32'
12
82
  end
13
83
  it 'formats correctly' do
14
- @countries.formatted('41443643532', :format => :international_relative, :spaces => :-).should eql '0041-44-364-35-32'
84
+ countries.formatted('41443643532', :format => :international_relative, :spaces => :-).should eql '0041-44-364-35-32'
15
85
  end
16
86
  it 'formats correctly' do
17
- @countries.formatted('41443643532', :format => :national, :spaces => :-).should eql '044-364-35-32'
87
+ countries.formatted('41443643532', :format => :national, :spaces => :-).should eql '044-364-35-32'
18
88
  end
19
89
  context 'specific' do
20
90
  it 'formats Ireland correctly' do
21
- @countries.formatted("3533451234", :format => :national).should eql '0345 1234'
91
+ countries.formatted("3533451234", :format => :national).should eql '0345 1234'
22
92
  end
23
93
  it 'formats Ireland correctly' do
24
- @countries.formatted("353411231234", :format => :national).should eql '041 123 1234'
94
+ countries.formatted("353411231234", :format => :national).should eql '041 123 1234'
25
95
  end
26
96
  it 'formats Spain correctly' do
27
- @countries.formatted("34123456789", :format => :national).should eql '123 456 789'
97
+ countries.formatted("34123456789", :format => :national).should eql '123 456 789'
28
98
  end
29
99
  it 'formats Cambodia correctly' do
30
- @countries.formatted('85512239123', :format => :national).should eql '012 239 123'
100
+ countries.formatted('85512239123', :format => :national).should eql '012 239 123'
31
101
  end
32
102
  it 'formats the US correctly' do
33
- @countries.formatted('18005551212', :format => :national, :spaces => :-).should eql '(800)-555-1212'
103
+ countries.formatted('18005551212', :format => :national, :spaces => :-).should eql '(800)-555-1212'
34
104
  end
35
105
  it 'formats the US correctly' do
36
- @countries.formatted('18005551212', :format => :national, :spaces => :-).should eql '(800)-555-1212'
106
+ countries.formatted('18005551212', :format => :national, :spaces => :-).should eql '(800)-555-1212'
37
107
  end
38
108
  end
39
109
  context 'default' do
40
110
  it "should format swiss numbers" do
41
- @countries.formatted('41443643532').should eql '+41 44 364 35 32'
111
+ countries.formatted('41443643532').should eql '+41 44 364 35 32'
42
112
  end
43
113
  it "should format swiss service numbers" do
44
- @countries.formatted('41800112233').should eql '+41 800 112 233'
114
+ countries.formatted('41800112233').should eql '+41 800 112 233'
45
115
  end
46
116
  it "should format austrian numbers" do
47
- @countries.formatted('43198110').should eql '+43 1 98110'
117
+ countries.formatted('43198110').should eql '+43 1 98110'
48
118
  end
49
119
  it "should format american numbers" do
50
- @countries.formatted('18705551122').should eql '+1 (870) 555-1122'
120
+ countries.formatted('18705551122').should eql '+1 (870) 555-1122'
51
121
  end
52
122
  it "should format irish numbers" do
53
- @countries.formatted('35311234567').should eql '+353 1 123 4567'
123
+ countries.formatted('35311234567').should eql '+353 1 123 4567'
54
124
  end
55
125
  end
56
126
  describe "international" do
57
127
  it "should format north american numbers" do
58
- @countries.formatted('18091231234', :format => :international).should eql '+1 (809) 123-1234'
128
+ countries.formatted('18091231234', :format => :international).should eql '+1 (809) 123-1234'
59
129
  end
60
130
  it "should format austrian numbers" do
61
- @countries.formatted('43198110', :format => :international).should eql '+43 1 98110'
131
+ countries.formatted('43198110', :format => :international).should eql '+43 1 98110'
62
132
  end
63
133
  it "should format austrian numbers" do
64
- @countries.formatted('43198110', :format => :international_absolute).should eql '+43 1 98110'
134
+ countries.formatted('43198110', :format => :international_absolute).should eql '+43 1 98110'
65
135
  end
66
136
  it "should format french numbers" do
67
- @countries.formatted('33142278186', :format => :+).should eql '+33 1 42 27 81 86'
137
+ countries.formatted('33142278186', :format => :+).should eql '+33 1 42 27 81 86'
68
138
  end
69
139
  it "should format austrian numbers" do
70
- @countries.formatted('43198110', :format => :international_relative).should eql '0043 1 98110'
140
+ countries.formatted('43198110', :format => :international_relative).should eql '0043 1 98110'
71
141
  end
72
142
  it 'should format liechtensteiner numbers' do
73
- @countries.formatted('4233841148', :format => :international_relative).should eql '00423 384 11 48'
143
+ countries.formatted('4233841148', :format => :international_relative).should eql '00423 384 11 48'
74
144
  end
75
145
  it "should format irish numbers" do
76
- @countries.formatted('35311234567', :format => :international).should eql '+353 1 123 4567'
146
+ countries.formatted('35311234567', :format => :international).should eql '+353 1 123 4567'
77
147
  end
78
148
  it "should format luxembourgian numbers" do
79
- @countries.formatted('352222809', :format => :international).should eql '+352 22 28 09'
149
+ countries.formatted('352222809', :format => :international).should eql '+352 22 28 09'
80
150
  end
81
151
  it "should format luxembourgian 4-digit ndc numbers" do
82
- @countries.formatted('35226222809', :format => :international).should eql '+352 26 22 28 09'
152
+ countries.formatted('35226222809', :format => :international).should eql '+352 2622 28 09'
83
153
  end
84
154
  it "should format luxembourgian mobile numbers" do
85
- @countries.formatted('352621123456', :format => :international).should eql '+352 621 123 456'
155
+ countries.formatted('352621123456', :format => :international).should eql '+352 621 123 456'
86
156
  end
87
157
  it "should format luxembourgian city numbers" do
88
- @countries.formatted('3524123456', :format => :international).should eql '+352 4 12 34 56'
158
+ countries.formatted('3524123456', :format => :international).should eql '+352 41 23 45 6'
89
159
  end
90
160
  it "should format luxembourgian machine to machine numbers" do
91
- @countries.formatted('352602112345678', :format => :international).should eql '+352 6021 12 34 56 78'
161
+ countries.formatted('352602112345678', :format => :international).should eql '+352 6021 12 34 56 78'
92
162
  end
93
163
  it "should format luxembourgian numbers" do
94
- @countries.formatted('352370431', :format => :international).should eql '+352 37 04 31'
164
+ countries.formatted('352370431', :format => :international).should eql '+352 37 04 31'
95
165
  end
96
166
  it "should format luxembourgian numbers" do
97
- @countries.formatted('35227855', :format => :international).should eql '+352 27 85 5'
167
+ countries.formatted('35227855', :format => :international).should eql '+352 27 85 5'
168
+ end
169
+ it "should format nigerian lagosian numbers" do
170
+ countries.formatted('23414480000', :format => :international).should eql '+234 1 448 0000'
98
171
  end
99
- it "should format nigerian numbers" do
100
- @countries.formatted('23414480000', :format => :international).should eql '+234 1 448 0000'
172
+ it "should format nigerian beninese numbers" do
173
+ countries.formatted('23452123456', :format => :international).should eql '+234 52 123 456'
101
174
  end
102
175
  it "should format nigerian mobile numbers" do
103
- @countries.formatted('2347061234567', :format => :international).should eql '+234 706 123 4567'
176
+ countries.formatted('2347061234567', :format => :international).should eql '+234 706 123 4567'
104
177
  end
105
178
  context 'with no spaces' do
106
179
  it "should format north american numbers" do
@@ -2,45 +2,84 @@ require 'spec_helper'
2
2
 
3
3
  describe Phony::Country do
4
4
 
5
+ describe 'general' do
6
+ let(:country) do
7
+ national_splitter = Phony::NationalSplitters::Variable.new 4, ['44']
8
+ local_splitter = Phony::LocalSplitters::Fixed.instance_for [3, 2, 2]
9
+ national_code = Phony::NationalCode.new national_splitter, local_splitter
10
+
11
+ Phony::Country.new national_code
12
+ end
13
+ describe '#clean' do
14
+ it 'cleans the number' do
15
+ country.clean('+41-44-123-12-12').should eql '41441231212'
16
+ end
17
+ end
18
+ describe '#vanity_to_number' do
19
+ it 'turns the vanity number into a number' do
20
+ country.vanity_to_number('1-800-HELLO').should eql '1-800-43556'
21
+ end
22
+ end
23
+ end
24
+
5
25
  context 'regression' do
6
- describe 'iceland' do
7
- before(:each) do
26
+ describe 'Iceland' do
27
+ let(:country) do
8
28
  national_splitter = Phony::NationalSplitters::None.instance_for
9
29
  local_splitter = Phony::LocalSplitters::Fixed.instance_for [3, 4]
10
30
 
11
31
  national_code = Phony::NationalCode.new national_splitter, local_splitter
12
- @iceland = described_class.new national_code
32
+ described_class.new national_code
33
+ end
34
+ it 'splits correctly' do
35
+ country.split('112').should == [nil, false, '112']
36
+ end
37
+ end
38
+ describe 'San Marino' do
39
+ it 'normalizes correctly' do
40
+ Phony.normalize('+3780549903549').should == '3780549903549'
41
+ end
42
+ xit 'automatically adds the sole NC' do
43
+ Phony.normalize('+378903549').should == '3780549903549'
44
+ end
45
+ end
46
+ describe 'Japan' do
47
+ it 'normalizes correctly' do
48
+ Phony.normalize('+81-03-1234-5634').should == '81312345634'
49
+ Phony.normalize('03-1234-5634', cc: '81').should == '81312345634'
50
+ end
51
+ it 'formats correctly' do
52
+ Phony.format('81312345634').should == '+81-3-1234-5634'
13
53
  end
14
54
  it 'splits correctly' do
15
- @iceland.split('112').should == [nil, false, '112']
55
+ Phony.split('81312345634').should == %w(81 3 1234 5634)
16
56
  end
17
57
  end
18
58
  end
19
59
 
20
- context "without special cases" do
21
- before(:each) do
60
+ context "without special cases (with switzerland)" do
61
+ let(:country) do
22
62
  national_splitter = Phony::NationalSplitters::Variable.new 4, ['44']
23
63
  local_splitter = Phony::LocalSplitters::Fixed.instance_for [3, 2, 2]
24
64
  national_code = Phony::NationalCode.new national_splitter, local_splitter
25
65
 
26
- @switzerland = Phony::Country.new national_code
27
- @switzerland.with '41' # TODO Remove this kludge.
66
+ Phony::Country.new national_code
28
67
  end
29
68
 
30
69
  describe "split" do
31
70
  it "should handle ZH" do
32
- @switzerland.split('443643532').should == [nil, '44', '364', '35', '32']
71
+ country.split('443643532').should == [nil, '44', '364', '35', '32']
33
72
  end
34
73
  end
35
74
  describe 'normalize' do
36
75
  it "should handle ZH" do
37
- @switzerland.normalize('0443643532').should == '443643532'
76
+ country.normalize('0443643532').should == '443643532'
38
77
  end
39
78
  end
40
79
  end
41
80
 
42
81
  context "without special cases" do
43
- before(:each) do
82
+ let(:country) do
44
83
  special_national_splitter = Phony::NationalSplitters::Variable.new nil, ['800']
45
84
  special_local_splitter = Phony::LocalSplitters::Fixed.instance_for [3, 3]
46
85
  special_code = Phony::NationalCode.new special_national_splitter, special_local_splitter
@@ -49,17 +88,17 @@ describe Phony::Country do
49
88
  local_splitter = Phony::LocalSplitters::Fixed.instance_for [3, 2, 2]
50
89
  national_code = Phony::NationalCode.new national_splitter, local_splitter
51
90
 
52
- @switzerland = Phony::Country.new special_code, national_code
91
+ Phony::Country.new special_code, national_code
53
92
  end
54
93
 
55
94
  describe "split" do
56
95
  it "should handle ZH" do
57
- @switzerland.split('443643532').should == [nil, '44', '364', '35', '32']
96
+ country.split('443643532').should == [nil, '44', '364', '35', '32']
58
97
  end
59
98
  it "should handle 800" do
60
- @switzerland.split('800333666').should == [nil, '800', '333', '666']
99
+ country.split('800333666').should == [nil, '800', '333', '666']
61
100
  end
62
101
  end
63
102
  end
64
103
 
65
- end
104
+ end
@@ -16,8 +16,8 @@ describe Phony::DSL do
16
16
  it 'checks for ( in regex' do
17
17
  expect { dsl.match(/123/) }.to raise_error("Regexp /123/ needs a group in it that defines which digits belong to the NDC.")
18
18
  end
19
- it 'checks for ( in regex' do
20
- dsl.match(/(123)/).should be_kind_of(Phony::NationalSplitters::Regex)
19
+ it 'should return a Phony::NationalSplitters::Regex' do
20
+ dsl.match(/(123)/).class.name.should == Phony::NationalSplitters::Regex.name
21
21
  end
22
22
  end
23
23
 
@@ -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({}))
@@ -53,35 +60,35 @@ describe Phony::LocalSplitters::Regex do
53
60
  context 'Local splitter without mappings' do
54
61
  let(:local_splitter) { described_class.instance_for({})}
55
62
  it 'returns false' do
56
- result.should be_false
63
+ result.should be_falsey
57
64
  end
58
65
  end
59
66
 
60
67
  context 'Mapping does not exist for a number' do
61
68
  let(:local_splitter) { described_class.instance_for(/\A5/ => [1,2,3])}
62
69
  it 'returns false' do
63
- result.should be_false
70
+ result.should be_falsey
64
71
  end
65
72
  end
66
73
 
67
74
  context "Mapping exists, but the length is greater" do
68
75
  let(:local_splitter) { described_class.instance_for(/\A123/ => [2,2])}
69
76
  it 'returns false' do
70
- result.should be_false
77
+ result.should be_falsey
71
78
  end
72
79
  end
73
80
 
74
81
  context "Mapping exists, but the length is less" do
75
82
  let(:local_splitter) { described_class.instance_for(/\A123/ => [2,2,3])}
76
83
  it 'returns false' do
77
- result.should be_false
84
+ result.should be_falsey
78
85
  end
79
86
  end
80
87
 
81
88
  context 'Mapping exists and the length is equal' do
82
89
  let(:local_splitter) { described_class.instance_for(/\A123/ => [2,2,2])}
83
90
  it 'returns true' do
84
- result.should be_true
91
+ result.should be_truthy
85
92
  end
86
93
  end
87
94
 
@@ -19,7 +19,7 @@ describe Phony::NationalSplitters::Default do
19
19
 
20
20
  describe 'plausible?' do
21
21
  it 'is always plausible' do
22
- splitter.plausible?(:anything, :anything).should be_true
22
+ splitter.plausible?(:anything, :anything).should be_truthy
23
23
  end
24
24
  end
25
25
 
@@ -0,0 +1,85 @@
1
+ require 'spec_helper'
2
+
3
+ describe Phony::TrunkCode do
4
+
5
+ describe '#format' do
6
+ it 'is correct' do
7
+ code = described_class.new('0')
8
+ expect(code.format('%s %s')).to eq '0'
9
+ end
10
+ it 'is correct' do
11
+ code = described_class.new('0', format: true)
12
+ expect(code.format('%s %s')).to eq '0'
13
+ end
14
+ it 'is correct' do
15
+ code = described_class.new('0', format: false)
16
+ expect(code.format('%s %s')).to eq nil
17
+ end
18
+ it 'is correct' do
19
+ code = described_class.new('06')
20
+ expect(code.format('%s %s')).to eq '06'
21
+ end
22
+ it 'is correct' do
23
+ code = described_class.new('06', format: true)
24
+ expect(code.format('%s %s')).to eq '06'
25
+ end
26
+ it 'is correct' do
27
+ code = described_class.new('06', format: false)
28
+ expect(code.format('%s %s')).to eq nil
29
+ end
30
+ end
31
+
32
+ describe '#normalize' do
33
+ it 'is correct' do
34
+ code = described_class.new('0')
35
+ expect(code.normalize('0123')).to eq '0123'
36
+ end
37
+ it 'is correct' do
38
+ code = described_class.new('0', normalize: true)
39
+ expect(code.normalize('0123')).to eq '0123'
40
+ end
41
+ it 'is correct' do
42
+ code = described_class.new('0', normalize: false)
43
+ expect(code.normalize('0123')).to eq '0123'
44
+ end
45
+ it 'is correct' do
46
+ code = described_class.new('06')
47
+ expect(code.normalize('06123')).to eq '06123'
48
+ end
49
+ it 'is correct' do
50
+ code = described_class.new('06', normalize: true)
51
+ expect(code.normalize('06123')).to eq '06123'
52
+ end
53
+ it 'is correct' do
54
+ code = described_class.new('06', normalize: false)
55
+ expect(code.normalize('0123')).to eq '0123'
56
+ end
57
+ end
58
+
59
+ describe '#split' do
60
+ it 'is correct' do
61
+ code = described_class.new('0')
62
+ expect(code.split('0123')).to eq [code, '0123']
63
+ end
64
+ it 'is correct' do
65
+ code = described_class.new('0', split: true)
66
+ expect(code.split('0123')).to eq [code, '123']
67
+ end
68
+ it 'is correct' do
69
+ code = described_class.new('0', split: false)
70
+ expect(code.split('0123')).to eq [code, '0123']
71
+ end
72
+ it 'is correct' do
73
+ code = described_class.new('06')
74
+ expect(code.split('06123')).to eq [code, '06123']
75
+ end
76
+ it 'is correct' do
77
+ code = described_class.new('06', split: true)
78
+ expect(code.split('06123')).to eq [code, '123']
79
+ end
80
+ it 'is correct' do
81
+ code = described_class.new('06', split: false)
82
+ expect(code.split('06123')).to eq [code, '06123']
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,30 @@
1
+ # encoding: utf-8
2
+ #
3
+ require 'spec_helper'
4
+
5
+ describe Phony::Vanity do
6
+
7
+ let(:vanity) { described_class }
8
+
9
+ describe '.replace' do
10
+ it 'replaces letters with digits' do
11
+ vanity.replace('1-800-HELLO').should == '1-800-43556'
12
+ end
13
+ end
14
+
15
+ describe '.vanity?' do
16
+ it 'returns true on a vanity number' do
17
+ vanity.vanity?('800HELLOES').should == true
18
+ end
19
+ it 'returns false on a non-vanity number' do
20
+ vanity.vanity?('8004355637').should == false
21
+ end
22
+ end
23
+
24
+ describe '.normalized' do
25
+ it 'normalizes the vanity number' do
26
+ vanity.normalized('1-800-HELLO').should == '1800HELLO'
27
+ end
28
+ end
29
+
30
+ end
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+
3
+ describe Phony::NormalizationError do
4
+ it 'is correctly raised on normalize' do
5
+ expect do
6
+ Phony.normalize('000')
7
+ end.to raise_error(Phony::NormalizationError)
8
+ end
9
+ it 'is correctly raised on normalize' do
10
+ expect do
11
+ Phony.normalize('000')
12
+ end.to raise_error(%Q{Phony could not normalize the given number. Is it a phone number?})
13
+ end
14
+ it 'is correctly raised on normalize!' do
15
+ expect do
16
+ Phony.normalize!('000')
17
+ end.to raise_error(Phony::NormalizationError)
18
+ end
19
+ it 'is correctly raised on normalize!' do
20
+ expect do
21
+ Phony.normalize!('000')
22
+ end.to raise_error(%Q{Phony could not normalize the given number. Is it a phone number?})
23
+ end
24
+ end
25
+
26
+ describe Phony::SplittingError do
27
+ it 'is correctly raised on split' do
28
+ expect do
29
+ Phony.split('000')
30
+ end.to raise_error(Phony::SplittingError)
31
+ end
32
+ it 'is correctly raised on split' do
33
+ expect do
34
+ Phony.split('000')
35
+ end.to raise_error(%Q{Phony could not split the given number. Is "000" a phone number?})
36
+ end
37
+ it 'is correctly raised on split!' do
38
+ expect do
39
+ Phony.split!('000')
40
+ end.to raise_error(Phony::SplittingError)
41
+ end
42
+ it 'is correctly raised on split!' do
43
+ expect do
44
+ Phony.split!('000')
45
+ end.to raise_error(%Q{Phony could not split the given number. Is it a phone number?})
46
+ end
47
+ end
48
+
49
+ describe Phony::FormattingError do
50
+ it 'is correctly raised on format' do
51
+ expect do
52
+ Phony.format('000')
53
+ end.to raise_error(Phony::FormattingError)
54
+ end
55
+ it 'is correctly raised on format' do
56
+ expect do
57
+ Phony.format('000')
58
+ end.to raise_error(%Q{Phony could not format the given number. Is it a phone number?})
59
+ end
60
+ it 'is correctly raised on format!' do
61
+ expect do
62
+ Phony.format!('000')
63
+ end.to raise_error(Phony::FormattingError)
64
+ end
65
+ it 'is correctly raised on format!' do
66
+ expect do
67
+ Phony.format!('000')
68
+ end.to raise_error(%Q{Phony could not format the given number. Is it a phone number?})
69
+ end
70
+ end