phony 1.2.6 → 1.2.7

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.
@@ -4,6 +4,7 @@
4
4
  #
5
5
  Phony::Countries::Italy = Phony::Country.configured :local_format => [3, 4],
6
6
  :local_special_format => [3, 3],
7
+ :normalize => false,
7
8
  :ndc_fallback_length => 3,
8
9
  :ndc_mapping => {
9
10
  :landline => [
data/lib/phony/country.rb CHANGED
@@ -17,6 +17,20 @@ module Phony
17
17
  [ndc, *rest]
18
18
  end
19
19
 
20
+ # Removes 0s from partially normalized numbers
21
+ # such as 410443643533.
22
+ #
23
+ # Example:
24
+ # 410443643533 -> 41443643533
25
+ #
26
+ # In some cases it doesn't, like Italy.
27
+ #
28
+ def normalize national_number
29
+ normalized = @special_code.normalize national_number if @special_code
30
+ normalized = @national_code.normalize national_number unless normalized && !normalized.empty?
31
+ normalized
32
+ end
33
+
20
34
  # Is this national number a vanity number?
21
35
  #
22
36
  def vanity? national_number
@@ -50,17 +64,18 @@ module Phony
50
64
  # If that is not the case, I will expand the framework.
51
65
  #
52
66
  def self.configured options = {}
67
+ normalize = options[:normalize]
53
68
  ndc_fallback_length = options[:ndc_fallback_length]
54
69
  ndc_mapping = options[:ndc_mapping] || raise("No ndc_mapping given!")
55
70
 
56
71
  national_splitter = Phony::NationalSplitters::Variable.new ndc_fallback_length, ndc_mapping
57
72
  local_splitter = Phony::LocalSplitter.instance_for options[:local_format] || [3, 2, 2]
58
- national_code = Phony::NationalCode.new national_splitter, local_splitter
73
+ national_code = Phony::NationalCode.new national_splitter, local_splitter, normalize
59
74
 
60
75
  if ndc_mapping[:service]
61
76
  service_national_splitter = Phony::NationalSplitters::Variable.new nil, :service => ndc_mapping[:service]
62
77
  service_local_splitter = Phony::LocalSplitter.instance_for options[:service_local_format] || [3, 6]
63
- service_code = Phony::NationalCode.new service_national_splitter, service_local_splitter
78
+ service_code = Phony::NationalCode.new service_national_splitter, service_local_splitter, normalize
64
79
  end
65
80
 
66
81
  new national_code, service_code
@@ -78,20 +93,21 @@ module Phony
78
93
  # :service_ndcs => ['800']
79
94
  #
80
95
  def self.fixed options = {}
96
+ normalize = options[:normalize]
81
97
  ndc_length = options[:ndc_length]
82
98
  service_ndcs = options[:service_ndcs]
83
99
  local_format = options[:local_format]
84
100
 
85
101
  national_splitter = Phony::NationalSplitters::Fixed.new ndc_length
86
102
  local_splitter = Phony::LocalSplitter.instance_for local_format || [3, 2, 2]
87
- national_code = Phony::NationalCode.new national_splitter, local_splitter
103
+ national_code = Phony::NationalCode.new national_splitter, local_splitter, normalize
88
104
 
89
105
  service_code = nil
90
106
  if service_ndcs
91
107
  service_local_format = options[:service_local_format] || local_format
92
108
  service_national_splitter = Phony::NationalSplitters::Variable.new nil, :service => service_ndcs
93
109
  service_local_splitter = Phony::LocalSplitter.instance_for service_local_format || [3, 3]
94
- service_code = Phony::NationalCode.new service_national_splitter, service_local_splitter
110
+ service_code = Phony::NationalCode.new service_national_splitter, service_local_splitter, normalize
95
111
  end
96
112
 
97
113
  new national_code, service_code
@@ -8,7 +8,8 @@ module Phony
8
8
  # Remove non-digit chars.
9
9
  #
10
10
  number.gsub! /\D*/, ''
11
- remove_relative_zeros! number
11
+ national_handler, cc, rest = split_cc number
12
+ '%s%s' % [cc, national_handler.normalize(rest)]
12
13
  end
13
14
 
14
15
  # Splits this number into cc, ndc and locally split number parts.
@@ -79,17 +80,6 @@ module Phony
79
80
  # This line is never reached as CCs are in prefix code.
80
81
  end
81
82
 
82
- # Removes 0s from partially normalized numbers
83
- # such as 410443643533.
84
- #
85
- # Example:
86
- # 410443643533 -> 41443643533
87
- #
88
- def remove_relative_zeros! phone_number
89
- _, cc, rest = split_cc phone_number
90
- '%s%s' % [cc, rest].collect! { |code| code.gsub(/^0+/, '') }
91
- end
92
-
93
83
  # Cached mapping of all countries.
94
84
  #
95
85
  def mapping
@@ -8,9 +8,10 @@ module Phony
8
8
 
9
9
  #
10
10
  #
11
- def initialize national_splitter, local_splitter
11
+ def initialize national_splitter, local_splitter, normalize = nil
12
12
  @national_splitter = national_splitter
13
13
  @local_splitter = local_splitter
14
+ @normalize = !(normalize == false) # if nil, true (default), if false, false, if true, true.
14
15
  end
15
16
 
16
17
  # Split gets a number without country code and splits it into
@@ -22,6 +23,15 @@ module Phony
22
23
  [ndc, *@local_splitter.split(rest)]
23
24
  end
24
25
 
26
+ # Split gets a number withou country code and removes a relative zero.
27
+ #
28
+ # Note: Some cases, like Italy, don't remove the relative zero.
29
+ #
30
+ def normalize national_number
31
+ return national_number unless @normalize
32
+ national_number.gsub(/^0+/, '')
33
+ end
34
+
25
35
  end
26
36
 
27
37
  end
@@ -12,12 +12,6 @@ describe Phony::CountryCodes do
12
12
  end
13
13
  end
14
14
 
15
- describe 'remove_relative_zeros' do
16
- it "should remove an ndc zero from an almost normalized number and return it" do
17
- @countries.remove_relative_zeros!('410443643533').should == '41443643533'
18
- end
19
- end
20
-
21
15
  describe 'formatted' do
22
16
  it 'formats correctly' do
23
17
  @countries.formatted('41443643532', :format => :international, :spaces => :-).should == '+41-44-364-35-32'
@@ -63,6 +63,11 @@ describe Phony::Country do
63
63
  @switzerland.split('443643532').should == ['44', '364', '35', '32']
64
64
  end
65
65
  end
66
+ describe 'normalize' do
67
+ it "should handle ZH" do
68
+ @switzerland.normalize('0443643532').should == '443643532'
69
+ end
70
+ end
66
71
  end
67
72
 
68
73
  context "without special cases" do
@@ -16,6 +16,12 @@ describe Phony::NationalCode do
16
16
  it 'splits correctly' do
17
17
  @national.split('44364353').should == ['44', '364', '35', '3']
18
18
  end
19
+ it 'normalizes correctly' do
20
+ @national.normalize('044364353').should == '44364353'
21
+ end
22
+ it 'normalizes correctly' do
23
+ @national.normalize('44364353').should == '44364353'
24
+ end
19
25
  end
20
26
  context 'with fixed ndc (French)' do
21
27
  before(:each) do
@@ -30,6 +36,42 @@ describe Phony::NationalCode do
30
36
  it 'splits correctly' do
31
37
  @national.split('14227818').should == ['1', '42', '27', '81', '8']
32
38
  end
39
+ it 'normalizes correctly' do
40
+ @national.normalize('0142278186').should == '142278186'
41
+ end
42
+ it 'normalizes correctly' do
43
+ @national.normalize('142278186').should == '142278186'
44
+ end
45
+ end
46
+ context 'normalizing' do
47
+ context 'false' do
48
+ before(:each) do
49
+ @national = Phony::NationalCode.new nil, nil, false
50
+ end
51
+ it 'normalizes an italian case correctly' do
52
+ @national.normalize('0909709511').should == '0909709511'
53
+ end
54
+ end
55
+ context 'true' do
56
+ before(:each) do
57
+ national_splitter = Phony::NationalSplitters::Fixed.instance_for 2
58
+ local_splitter = Phony::LocalSplitter.instance_for [3, 2, 2]
59
+ @national = Phony::NationalCode.new national_splitter, local_splitter, true
60
+ end
61
+ it 'normalizes a swiss case correctly' do
62
+ @national.normalize('044364353').should == '44364353'
63
+ end
64
+ end
65
+ context 'nil (true)' do
66
+ before(:each) do
67
+ national_splitter = Phony::NationalSplitters::Fixed.instance_for 2
68
+ local_splitter = Phony::LocalSplitter.instance_for [3, 2, 2]
69
+ @national = Phony::NationalCode.new national_splitter, local_splitter, nil
70
+ end
71
+ it 'normalizes a swiss case correctly' do
72
+ @national.normalize('044364353').should == '44364353'
73
+ end
74
+ end
33
75
  end
34
76
  end
35
77
 
@@ -155,6 +155,9 @@ describe Phony do
155
155
  it "should normalize a number with erroneous zero inside" do
156
156
  Phony.normalize('+410443643533').should == '41443643533'
157
157
  end
158
+ it "should not normalize a number with a correct zero inside" do
159
+ Phony.normalize('+390909709511').should == '390909709511'
160
+ end
158
161
  end
159
162
  end
160
163
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 2
8
- - 6
9
- version: 1.2.6
8
+ - 7
9
+ version: 1.2.7
10
10
  platform: ruby
11
11
  authors:
12
12
  - Florian Hanke