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
@@ -16,13 +16,16 @@ describe Phony::NationalSplitters::Fixed do
16
16
  @splitter = Phony::NationalSplitters::Fixed.new 2
17
17
  end
18
18
  it 'splits correctly' do
19
- @splitter.split('443643532').should == ['0', '44', '3643532']
19
+ @splitter.split('443643532').should == [nil, '44', '3643532']
20
20
  end
21
21
  it 'splits correctly even when the number is too long' do
22
- @splitter.split('44364353211').should == ['0', '44', '364353211']
22
+ @splitter.split('44364353211').should == [nil, '44', '364353211']
23
23
  end
24
24
  it 'splits correctly even when the number is too short' do
25
- @splitter.split('443').should == ['0', '44','3']
25
+ @splitter.split('443').should == [nil, '44','3']
26
+ end
27
+ it 'has a length of 2' do
28
+ @splitter.length.should == 2
26
29
  end
27
30
  end
28
31
  describe 'split' do
@@ -30,13 +33,16 @@ describe Phony::NationalSplitters::Fixed do
30
33
  @splitter = Phony::NationalSplitters::Fixed.new nil
31
34
  end
32
35
  it 'splits correctly' do
33
- @splitter.split('443643532').should == ['0', '443643532']
36
+ @splitter.split('443643532').should == [nil, '443643532']
34
37
  end
35
38
  it 'splits correctly even when the number is too long' do
36
- @splitter.split('44364353211').should == ['0', '44364353211']
39
+ @splitter.split('44364353211').should == [nil, '44364353211']
37
40
  end
38
41
  it 'splits correctly even when the number is too short' do
39
- @splitter.split('443').should == ['0', '443']
42
+ @splitter.split('443').should == [nil, '443']
43
+ end
44
+ it 'has a length of nil' do
45
+ @splitter.length.should == nil
40
46
  end
41
47
  end
42
48
 
@@ -8,11 +8,21 @@ describe Phony::NationalSplitters::None do
8
8
  end
9
9
  end
10
10
 
11
- describe 'split' do
11
+ context 'with instance' do
12
12
  let(:splitter) { described_class.instance_for }
13
- it 'splits correctly into ndc and rest' do
14
- splitter.split('123456789').should == [nil, false, '123456789']
13
+
14
+ describe 'split' do
15
+ it 'splits correctly into ndc and rest' do
16
+ splitter.split('123456789').should == [nil, false, '123456789']
17
+ end
18
+ end
19
+
20
+ describe 'length' do
21
+ it 'is always 0' do
22
+ splitter.length.should be_zero
23
+ end
15
24
  end
25
+
16
26
  end
17
27
 
18
28
  end
@@ -15,7 +15,7 @@ describe Phony::NationalSplitters::Regex do
15
15
  context 'with on_fail 2' do
16
16
  let(:splitter) { described_class.instance_for(/^(123)\d+$/, 2) }
17
17
  it 'uses the on_fail_take' do
18
- splitter.split('23456789').should == ['0', '23', '456789']
18
+ splitter.split('23456789').should == [nil, '23', '456789']
19
19
  end
20
20
  end
21
21
  end
@@ -8,16 +8,19 @@ describe Phony::NationalSplitters::Variable do
8
8
  @splitter = Phony::NationalSplitters::Variable.new 4, ['1', '316', '67', '68', '669', '711']
9
9
  end
10
10
  it "handles Vienna" do
11
- @splitter.split('198110').should == ['0', '1', '98110']
11
+ @splitter.split('198110').should == [nil, '1', '98110']
12
12
  end
13
13
  it "handles some mobile services" do
14
- @splitter.split('66914093902').should == ['0', '669', '14093902']
14
+ @splitter.split('66914093902').should == [nil, '669', '14093902']
15
15
  end
16
16
  it "handles Graz" do
17
- @splitter.split('3161234567891').should == ['0', '316', '1234567891']
17
+ @splitter.split('3161234567891').should == [nil, '316', '1234567891']
18
18
  end
19
19
  it "handles Rohrau" do
20
- @splitter.split('2164123456789').should == ['0', '2164', '123456789']
20
+ @splitter.split('2164123456789').should == [nil, '2164', '123456789']
21
+ end
22
+ it 'has an NDC length of 3' do
23
+ @splitter.length.should == (1..3)
21
24
  end
22
25
  end
23
26
  context 'special handling for using the variable size splitter for Swiss service numbers' do
@@ -25,7 +28,10 @@ describe Phony::NationalSplitters::Variable do
25
28
  @splitter = Phony::NationalSplitters::Variable.new 2, ['800']
26
29
  end
27
30
  it "should handle swiss service numbers" do
28
- @splitter.split('800223344').should == ['0', '800', '223344']
31
+ @splitter.split('800223344').should == [nil, '800', '223344']
32
+ end
33
+ it 'has an NDC length of 3' do
34
+ @splitter.length.should == (3..3)
29
35
  end
30
36
  end
31
37
  end
@@ -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
@@ -4,31 +4,27 @@ require 'spec_helper'
4
4
 
5
5
  describe Phony::Vanity do
6
6
 
7
- describe "vanity?" do
8
- it 'recognizes a vanity number' do
9
- Phony::Vanity.vanity?('800HELLOWORLD').should == true
10
- end
11
- it 'recognizes a non vanity number' do
12
- Phony::Vanity.vanity?('444443322').should == false
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'
13
12
  end
14
13
  end
15
14
 
16
- describe "replace" do
17
- it 'replaces all characters' do
18
- Phony::Vanity.replace('0123456789abcdefghijklmnopqrstuvwxyz').should == '012345678922233344455566677778889999'
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
19
21
  end
20
22
  end
21
23
 
22
- describe 'mapping' do
23
- it 'caches' do
24
- Phony::Vanity.mapping.should equal(Phony::Vanity.mapping)
25
- end
26
- it 'returns the right thing' do
27
- Phony::Vanity.mapping.should == [
28
- 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.freeze,
29
- '2223334445556667777888999922233344455566677778889999'.freeze
30
- ]
24
+ describe '.normalized' do
25
+ it 'normalizes the vanity number' do
26
+ vanity.normalized('1-800-HELLO').should == '1800HELLO'
31
27
  end
32
28
  end
33
-
29
+
34
30
  end
@@ -1,288 +1,70 @@
1
- # encoding: utf-8
2
- #
3
1
  require 'spec_helper'
4
2
 
5
- describe Phony do
6
-
7
- describe 'nil cases' do
8
- it "should raise on normalize nil" do
9
- expect {
10
- Phony.normalize(nil)
11
- }.to raise_error(ArgumentError, "Phone number cannot be nil. Use e.g. number && Phony.normalize(number).")
12
- end
13
- it "should raise on format nil" do
14
- expect {
15
- Phony.format(nil)
16
- }.to raise_error(ArgumentError, "Phone number cannot be nil. Use e.g. number && Phony.format(number).")
17
- end
18
- it "should raise on split nil" do
19
- expect {
20
- Phony.split(nil)
21
- }.to raise_error(ArgumentError, "Phone number cannot be nil. Use e.g. number && Phony.split(number).")
22
- end
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)
23
8
  end
24
-
25
- describe "normalize" do
26
- describe "some examples" do
27
- it "should normalize a too short number" do
28
- Phony.normalize('+972').should == '972'
29
- end
30
- it "should normalize an already normalized number" do
31
- Phony.normalize('41443643533').should == '41443643533'
32
- end
33
- it "should normalize a format number" do
34
- Phony.normalize('+41 44 364 35 33').should == '41443643533'
35
- end
36
- it "should normalize a 00 number" do
37
- Phony.normalize('0041 44 364 35 33').should == '41443643533'
38
- end
39
- it "should normalize a service number" do
40
- Phony.normalize('+41 800 11 22 33').should == '41800112233'
41
- end
42
- it "should remove characters from the number" do
43
- Phony.normalize('John: +41 44 364 35 33').should == '41443643533'
44
- end
45
- it "should normalize one of these crazy american numbers" do
46
- Phony.normalize('1 (703) 451-5115').should == '17034515115'
47
- end
48
- it "should normalize another one of these crazy american numbers" do
49
- Phony.normalize('1-888-407-4747').should == '18884074747'
50
- end
51
- it "should normalize a number with colons" do
52
- Phony.normalize('1.906.387.1698').should == '19063871698'
53
- end
54
- it "should normalize a number with optional ndc" do
55
- Phony.normalize('+41 (044) 364 35 33').should == '41443643533'
56
- end
57
- it "should normalize a number with erroneous zero inside" do
58
- Phony.normalize('+410443643533').should == '41443643533'
59
- end
60
- it "should not normalize a number with a correct zero inside" do
61
- Phony.normalize('+390909709511').should == '390909709511'
62
- end
63
- 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?})
64
13
  end
65
-
66
- describe 'formatted' do
67
- it 'is an alias of format' do
68
- Phony.formatted('41443643532').should == '+41 44 364 35 32'
69
- end
14
+ it 'is correctly raised on normalize!' do
15
+ expect do
16
+ Phony.normalize!('000')
17
+ end.to raise_error(Phony::NormalizationError)
70
18
  end
71
-
72
- describe "format" do
73
- describe "default" do
74
- it "should format swiss numbers" do
75
- Phony.format('41443643532').should == '+41 44 364 35 32'
76
- end
77
- # TODO
78
- #
79
- it "should format swiss service numbers" do
80
- Phony.format('41800112233').should == '+41 800 112 233'
81
- end
82
- it "should format austrian numbers" do
83
- Phony.format('43198110').should == '+43 1 98110'
84
- end
85
- it "should format american numbers" do
86
- Phony.format('18705551122').should == '+1 870 555 1122'
87
- end
88
- end
89
- describe "international" do
90
- it "should format north american numbers" do
91
- Phony.format('18091231234', :format => :international).should == '+1 809 123 1234'
92
- end
93
- it "should format austrian numbers" do
94
- Phony.format('43198110', :format => :international).should == '+43 1 98110'
95
- end
96
- it "should format austrian numbers" do
97
- Phony.format('43198110', :format => :international_absolute).should == '+43 1 98110'
98
- end
99
- it "should format french numbers" do
100
- Phony.format('33142278186', :format => :+).should == '+33 1 42 27 81 86'
101
- end
102
- it "should format austrian numbers" do
103
- Phony.format('43198110', :format => :international_relative).should == '0043 1 98110'
104
- end
105
- it 'should format liechtensteiner numbers' do
106
- Phony.format('4233841148', :format => :international_relative).should == '00423 384 11 48'
107
- end
108
- context 'with no spaces' do
109
- it "should format north american numbers" do
110
- Phony.format('18091231234', :format => :international, :spaces => '').should == '+18091231234'
111
- end
112
- it "should format austrian numbers" do
113
- Phony.format('43198110', :format => :international, :spaces => '').should == '+43198110'
114
- end
115
- it "should format austrian numbers" do
116
- Phony.format('43198110', :format => :international_absolute, :spaces => '').should == '+43198110'
117
- end
118
- it "should format french numbers" do
119
- Phony.format('33142278186', :format => :+, :spaces => '').should == '+33142278186'
120
- end
121
- it "should format austrian numbers" do
122
- Phony.format('43198110', :format => :international_relative, :spaces => '').should == '0043198110'
123
- end
124
- it 'should format liechtensteiner numbers' do
125
- Phony.format('4233841148', :format => :international_relative, :spaces => '').should == '004233841148'
126
- end
127
- end
128
- context 'with special spaces' do
129
- it "should format swiss numbers" do
130
- Phony.format('41443643532', :format => :international).should == '+41 44 364 35 32'
131
- end
132
- it "should format north american numbers" do
133
- Phony.format('18091231234', :format => :international, :spaces => :-).should == '+1-809-123-1234'
134
- end
135
- it "should format austrian numbers" do
136
- Phony.format('43198110', :format => :international, :spaces => :-).should == '+43-1-98110'
137
- end
138
- it "should format austrian numbers" do
139
- Phony.format('43198110', :format => :international_absolute, :spaces => :-).should == '+43-1-98110'
140
- end
141
- it "should format french numbers" do
142
- Phony.format('33142278186', :format => :+, :spaces => :-).should == '+33-1-42-27-81-86'
143
- end
144
- it "should format austrian numbers" do
145
- Phony.format('43198110', :format => :international_relative, :spaces => :-).should == '0043-1-98110'
146
- end
147
- it 'should format liechtensteiner numbers' do
148
- Phony.format('4233841148', :format => :international_relative, :spaces => :-).should == '00423-384-11-48'
149
- end
150
- end
151
- describe '"unsupported" countries' do
152
- it 'should format as a single block' do
153
- Phony.format('88032155605220').should == '+880 32155605220'
154
- end
155
- it 'should format as a single block, regardless of format' do
156
- Phony.format('8801819372205', :format => :international).should == '+880 1819372205'
157
- end
158
- it 'should format as a single block, respecting custom spaces' do
159
- Phony.format('8801819372205', :spaces => :-).should == '+880-1819372205'
160
- end
161
- it 'should format as a single block, even without spaces' do
162
- Phony.format('8801819372205', :spaces => '').should == '+8801819372205'
163
- end
164
- end
165
- end
166
- describe "national" do
167
- it "should format swiss numbers" do
168
- Phony.format('41443643532', :format => :national).should == '044 364 35 32'
169
- end
170
- # TODO
171
- #
172
- it "should format swiss service numbers" do
173
- Phony.format('41800112233', :format => :national).should == '0800 112 233'
174
- end
175
- it "should format austrian numbers" do
176
- Phony.format('43198110', :format => :national).should == '01 98110'
177
- end
178
- it "should format US numbers without a leading zero" do
179
- Phony.format('14159224711', :format => :national).should == '415 922 4711'
180
- end
181
- end
182
- describe "local" do
183
- it "should format swiss numbers" do
184
- Phony.format('41443643532', :format => :local).should == '364 35 32'
185
- end
186
- it "should format german numbers" do
187
- Phony.format('493038625454', :format => :local).should == '386 25454'
188
- end
189
- 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?})
190
23
  end
24
+ end
191
25
 
192
- context 'minimal cases' do
193
- context 'normalizing' do
194
- it 'handles completely crazy "numbers"' do
195
- Phony.normalize('Hello, I am Cora, the 41th parrot, and 044 is my 364 times 35 funky number. 32.').should == '41443643532'
196
- end
197
- end
198
- context 'splitting' do
199
- it 'handles completely missing numbers well enough' do
200
- Phony.split('4144').should == ['41', '44', '']
201
- end
202
- it 'handles a missing number part' do
203
- Phony.split('4144364').should == ['41', '44', '364']
204
- end
205
- it 'handles a missing number part' do
206
- Phony.split('414436435').should == ['41', '44', '364', '35']
207
- end
208
- end
209
- context 'formatting' do
210
- it 'handles completely missing numbers well enough' do
211
- Phony.format('4144').should == '+41 44 '
212
- end
213
- it 'handles a missing number part' do
214
- Phony.format('4144364').should == '+41 44 364'
215
- end
216
- it 'handles a missing number part' do
217
- Phony.format('414436435').should == '+41 44 364 35'
218
- end
219
- end
220
- context '"unsupported" countries' do
221
- it 'handles formatting' do
222
- Phony.format('88032155605220').should == '+880 32155605220'
223
- end
224
- it 'handles normalizing' do
225
- Phony.normalize('+880-321 5560 5220').should == '88032155605220'
226
- end
227
- end
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)
228
31
  end
229
-
230
- context "speed" do
231
- before(:each) do
232
- @phone_numbers = [
233
- '41443643532',
234
- '18091231234',
235
- '43198110',
236
- '33142278186',
237
- '4233841148'
238
- ]
239
- end
240
- describe 'split' do
241
- it 'is fast' do
242
- number = @phone_numbers.first
243
- performance_of { Phony.split(number) }.should < 0.00005
244
- end
245
- it 'is fast' do
246
- performance_of { @phone_numbers.each { |number| Phony.split(number) } }.should < 0.00015
247
- end
248
- end
249
- describe 'normalize' do
250
- it 'is fast' do
251
- number = @phone_numbers.first
252
- performance_of { Phony.normalize(number) }.should < 0.0001
253
- end
254
- it 'is fast' do
255
- performance_of { @phone_numbers.each { |number| Phony.normalize(number) } }.should < 0.00016
256
- end
257
- end
258
- describe 'format' do
259
- it 'is fast' do
260
- number = @phone_numbers.first
261
- performance_of { Phony.format(number) }.should < 0.000075
262
- end
263
- it 'is fast' do
264
- performance_of { @phone_numbers.each { |number| Phony.format(number) } }.should < 0.00016
265
- end
266
- 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?})
267
36
  end
268
-
269
- describe 'vanity' do
270
- describe 'vanity_number?' do
271
- it {Phony.vanity?('41800 WEGGLI').should be_true}
272
- it {Phony.vanity?('41800WEGGLI').should be_true}
273
- it {Phony.vanity?('41848 SUCCESSMATCH').should be_true}
274
- it {Phony.vanity?('4180 NO NO NO').should be_false}
275
- it {Phony.vanity?('41900 KURZ').should be_false}
276
- it {Phony.vanity?('41 44 364 35 32').should be_false}
277
- end
278
-
279
- describe 'vanity_to_number' do
280
- it {Phony.vanity_to_number('41800WEGGLI').should == '41800934454'}
281
- it {Phony.vanity_to_number('41800weggli').should == '41800934454'}
282
- # it {Phony.vanity_to_number('41800SUCCESSMATCH').should == '41800782237'} # Cut off according to the swiss norms.
283
- it {Phony.vanity_to_number('41800SUCCESSMATCH').should == '41800782237762824'} # Allow for call-through numbers (>= 1.6.0)
284
- it {Phony.vanity_to_number('4180BLA').should == '4180252'} # Does not check for validity of number.
285
- 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?})
286
46
  end
287
-
288
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