phony 1.9.0 → 2.19.14

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 (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