phony 1.7.7 → 1.7.8
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/phony/countries.rb +2 -2
- data/lib/phony/countries/austria.rb +2 -1
- data/lib/phony/countries/china.rb +4 -3
- data/lib/phony/countries/germany.rb +4 -3
- data/lib/phony/countries/ireland.rb +3 -3
- data/lib/phony/countries/malaysia.rb +1 -1
- data/lib/phony/countries/netherlands.rb +3 -3
- data/lib/phony/countries/russia_kazakhstan_abhasia_south_osetia.rb +4 -3
- data/lib/phony/countries/south_korea.rb +6 -2
- data/lib/phony/countries/sweden.rb +3 -2
- data/lib/phony/country.rb +1 -1
- data/lib/phony/dsl.rb +4 -0
- data/lib/phony/national_splitters/none.rb +24 -0
- data/lib/phony/validators.rb +4 -2
- data/spec/lib/phony/countries_spec.rb +14 -14
- data/spec/lib/phony/country_spec.rb +1 -1
- data/spec/lib/phony/dsl_spec.rb +12 -1
- data/spec/lib/phony/national_code_spec.rb +1 -1
- data/spec/lib/phony/national_splitters/none_spec.rb +1 -1
- data/spec/lib/phony/validations_spec.rb +6 -0
- metadata +3 -4
data/lib/phony/countries.rb
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
# * none: Does not have a national destination code, e.g. Denmark, Iceland.
|
11
11
|
# * one_of: Matches one of the following numbers. Splits if it does.
|
12
12
|
# * match: Try to match the regex, and if it matches, splits it off.
|
13
|
-
# * fixed: Always splits off a fixed length ndc. (Always use last in a | chain) Offers a "zero" formatting option (default true).
|
13
|
+
# * fixed: Always splits off a fixed length ndc. (Always use last in a | chain as a catchall) Offers a "zero" formatting option (default true).
|
14
14
|
#
|
15
15
|
# For the national number part, there are two:
|
16
16
|
# * split: Use this number group splitting.
|
@@ -139,7 +139,7 @@ Phony.define do
|
|
139
139
|
country '52',
|
140
140
|
match(/^(0\d{2})\d+$/) >> split(2,2,2,2) |
|
141
141
|
match(/^(33|55|81)\d+$/) >> split(2,2,2,2) |
|
142
|
-
match(/^(\d{3})\d+$/) >> split(3,2,2)
|
142
|
+
match(/^(\d{3})\d+$/) >> split(3,2,2) # catchall.
|
143
143
|
|
144
144
|
# Cuba.
|
145
145
|
#
|
@@ -21,7 +21,8 @@ mobile = %w{ 130 131 132 133 135 136 137 138 139 145 150 151 152 153 155 156 157
|
|
21
21
|
service = %w{ 110 114 119 120 122 999 } # Probably not exhaustive. TODO Look at http://www.eoc.com.cn/?action-viewnews-itemid-11493.
|
22
22
|
|
23
23
|
Phony.define do
|
24
|
-
country '86', one_of(service)
|
25
|
-
one_of(mobile)
|
26
|
-
one_of(ndcs
|
24
|
+
country '86', one_of(service) >> split(8) |
|
25
|
+
one_of(mobile) >> split(4,4) |
|
26
|
+
one_of(ndcs) >> split(4,4) |
|
27
|
+
fixed(3) >> split(4,4)
|
27
28
|
end
|
@@ -4066,7 +4066,8 @@ service = [
|
|
4066
4066
|
]
|
4067
4067
|
|
4068
4068
|
Phony.define do
|
4069
|
-
country '49', one_of(service)
|
4070
|
-
match(/^(1[567]\d)\d*$/)
|
4071
|
-
one_of(ndcs
|
4069
|
+
country '49', one_of(service) >> split(3,10) |
|
4070
|
+
match(/^(1[567]\d)\d*$/) >> split(3,10) | # Mobile
|
4071
|
+
one_of(ndcs) >> split(3,10) |
|
4072
|
+
fixed(5) >> split(3,10)
|
4072
4073
|
end
|
@@ -69,8 +69,8 @@ Phony.define do
|
|
69
69
|
country '353', one_of(ndcs_with_7_subscriber_digits) >> split(3,4) |
|
70
70
|
one_of(ndcs_with_5_subscriber_digits) >> split(5) |
|
71
71
|
one_of(ndcs_with_6_subscriber_digits) >> split(6) |
|
72
|
-
one_of(freefone)
|
73
|
-
match(/^(8\d).+$/)
|
74
|
-
fixed(3)
|
72
|
+
one_of(freefone) >> split(6) |
|
73
|
+
match(/^(8\d).+$/) >> split(3,4) | # mobile
|
74
|
+
fixed(3) >> split(6) # Fallback
|
75
75
|
|
76
76
|
end
|
@@ -51,7 +51,7 @@ service = [
|
|
51
51
|
]
|
52
52
|
|
53
53
|
Phony.define do
|
54
|
-
country '31', one_of(service)
|
55
|
-
one_of(['6'] + ndcs
|
56
|
-
# 8 is for mobile numbers, other numbers will work as well (they use 7).
|
54
|
+
country '31', one_of(service) >> split(3,3) |
|
55
|
+
one_of(['6'] + ndcs) >> split(8) | # mobile + landline
|
56
|
+
fixed(3) >> split(8) # 8 is for mobile numbers, other numbers will work as well (they use 7).
|
57
57
|
end
|
@@ -116,8 +116,9 @@ Phony.define do
|
|
116
116
|
country '7', one_of(ndcs_with_5_subscriber_digits) >> split(1, 2, 2) |
|
117
117
|
one_of(ndcs_with_6_subscriber_digits) >> split(2, 2, 2) |
|
118
118
|
one_of(ndcs_with_7_subscriber_digits) >> split(3, 2, 2) |
|
119
|
-
one_of(%w(800))
|
119
|
+
one_of(%w(800)) >> split(3, 2, 2) | # Russia free number
|
120
120
|
one_of(%w(929 995344 9971 99744 9976 997)) >> split(2, 2, 2) | # South Osetia
|
121
|
-
match(/([67]\d{2})/)
|
122
|
-
one_of(%w(840 940)
|
121
|
+
match(/([67]\d{2})/) >> split(2, 2, 2) | # Kazakhstan: (600..799)
|
122
|
+
one_of(%w(840 940)) >> split(2,2,2) # Abhasia
|
123
|
+
fixed(3) >> split(2,2,2)
|
123
124
|
end
|
@@ -7,10 +7,14 @@
|
|
7
7
|
#
|
8
8
|
|
9
9
|
special = %w{ 100 101 105 106 107 108 109 111 112 113 114 115 116 117 118 119 120 121 122 123 125 127 128 129 131 132 134 141 182 188 }
|
10
|
-
# mobile = ('10'..'19').to_a # Note: Mobile not used as it is (for now) handled by the
|
10
|
+
# mobile = ('10'..'19').to_a # Note: Mobile not used as it is (for now) handled by the fixed catchall.
|
11
11
|
|
12
12
|
Phony.define do
|
13
13
|
country '82', match(/^(#{special.join("|")})$/) >> split(3,3) | # Special actually don't need to be split – but better err.
|
14
|
+
one_of('2') >> split(4,4) | # Seoul, also includes "services".
|
15
|
+
fixed(2) >> split(4,4) # catchall
|
16
|
+
|
17
|
+
# See above.
|
18
|
+
#
|
14
19
|
# one_of(*mobile) >> split(4,4) |
|
15
|
-
one_of('2', :max_length => 2) >> split(4,4) # Seoul, also includes "services".
|
16
20
|
end
|
@@ -54,6 +54,7 @@ service = [
|
|
54
54
|
]
|
55
55
|
|
56
56
|
Phony.define do
|
57
|
-
country '46', one_of(service)
|
58
|
-
one_of(ndcs + mobile
|
57
|
+
country '46', one_of(service) >> split(3,3) |
|
58
|
+
one_of(ndcs + mobile) >> split(8) |
|
59
|
+
fixed(3) >> split(8) # catchall
|
59
60
|
end
|
data/lib/phony/country.rb
CHANGED
@@ -28,7 +28,7 @@ module Phony
|
|
28
28
|
def split national_number
|
29
29
|
@codes.each do |code|
|
30
30
|
zero, ndc, *rest = code.split national_number
|
31
|
-
return
|
31
|
+
return [zero, ndc, *rest] if rest && !rest.empty?
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
data/lib/phony/dsl.rb
CHANGED
@@ -79,6 +79,10 @@ module Phony
|
|
79
79
|
NationalSplitters::Variable.new options[:max_length], ndcs
|
80
80
|
end
|
81
81
|
def match regex, options = {}
|
82
|
+
# Check if regexp has a group in it.
|
83
|
+
#
|
84
|
+
raise "Regexp /#{regex.source}/ needs a group in it that defines which digits belong to the NDC." unless regex.source =~ /\(/
|
85
|
+
|
82
86
|
on_fail_take = options.delete :on_fail_take
|
83
87
|
NationalSplitters::Regex.instance_for regex, options[:on_fail_take], options
|
84
88
|
end
|
@@ -13,6 +13,30 @@ module Phony
|
|
13
13
|
@instance ||= new
|
14
14
|
end
|
15
15
|
|
16
|
+
# On false:
|
17
|
+
#
|
18
|
+
# This is a hack to make phony's
|
19
|
+
# plausible method work even with
|
20
|
+
# this splitter.
|
21
|
+
#
|
22
|
+
# Promise: We will rewrite this soon
|
23
|
+
# to beautify, but making it work for
|
24
|
+
# people in production is most important
|
25
|
+
# right now.
|
26
|
+
#
|
27
|
+
# The problem is that the validation looks
|
28
|
+
# at whether there is a NDC - if it is nil,
|
29
|
+
# it is not plausible.
|
30
|
+
# (Does not work with this class, of course
|
31
|
+
# since using nil is dangerous and breaks
|
32
|
+
# abstraction)
|
33
|
+
#
|
34
|
+
# Note: Actually, it might stay in.
|
35
|
+
#
|
36
|
+
def split national_number
|
37
|
+
[nil, false, national_number]
|
38
|
+
end
|
39
|
+
|
16
40
|
end
|
17
41
|
|
18
42
|
end
|
data/lib/phony/validators.rb
CHANGED
@@ -48,8 +48,10 @@ module Phony
|
|
48
48
|
|
49
49
|
# Element based checking.
|
50
50
|
#
|
51
|
-
|
52
|
-
|
51
|
+
# Note: ndc == false means the country has none.
|
52
|
+
#
|
53
|
+
return false if ndc.nil?
|
54
|
+
return false if ndc && ndc.empty?
|
53
55
|
|
54
56
|
# A valid range for the rest is 0 or 3+ total digits.
|
55
57
|
#
|
@@ -63,7 +63,7 @@ describe 'country descriptions' do
|
|
63
63
|
Phony.split('5342123456').should == ['53', '42', '123456'] # Villa Clara
|
64
64
|
end
|
65
65
|
it 'handles danish numbers' do
|
66
|
-
Phony.split('4532121212').should == ['45',
|
66
|
+
Phony.split('4532121212').should == ['45', false, '32', '12', '12', '12']
|
67
67
|
end
|
68
68
|
it 'handles dutch numbers' do
|
69
69
|
Phony.split('31612345678').should == ['31', '6', '12345678'] # mobile
|
@@ -109,10 +109,10 @@ describe 'country descriptions' do
|
|
109
109
|
Phony.split('3622123456').should == ['36', '22', '123', '456']
|
110
110
|
end
|
111
111
|
it 'handles icelandic numbers' do
|
112
|
-
Phony.split('354112').should == ['354',
|
113
|
-
Phony.split('3544211234').should == ['354',
|
114
|
-
Phony.split('3544621234').should == ['354',
|
115
|
-
Phony.split('3545511234').should == ['354',
|
112
|
+
Phony.split('354112').should == ['354', false, '112'] # Emergency TODO
|
113
|
+
Phony.split('3544211234').should == ['354', false, '421', '1234'] # Keflavík
|
114
|
+
Phony.split('3544621234').should == ['354', false, '462', '1234'] # Akureyri
|
115
|
+
Phony.split('3545511234').should == ['354', false, '551', '1234'] # Reykjavík
|
116
116
|
end
|
117
117
|
it 'handles irish numbers' do
|
118
118
|
Phony.split('35311234567').should == ['353', '1', '123', '4567'] # Dublin, 7 digit subscriber #
|
@@ -149,14 +149,14 @@ describe 'country descriptions' do
|
|
149
149
|
Phony.split('526641231212').should == ['52', '664', '123', '12', '12'] # Tijuana
|
150
150
|
end
|
151
151
|
it 'handles norwegian numbers' do
|
152
|
-
Phony.split('4721234567').should == ['47',
|
153
|
-
Phony.split('4731234567').should == ['47',
|
154
|
-
Phony.split('4741234567').should == ['47',
|
155
|
-
Phony.split('4751234567').should == ['47',
|
156
|
-
Phony.split('4761234567').should == ['47',
|
157
|
-
Phony.split('4771234567').should == ['47',
|
158
|
-
Phony.split('4781234567').should == ['47',
|
159
|
-
Phony.split('4791234567').should == ['47',
|
152
|
+
Phony.split('4721234567').should == ['47',false,'21','23','45','67']
|
153
|
+
Phony.split('4731234567').should == ['47',false,'31','23','45','67']
|
154
|
+
Phony.split('4741234567').should == ['47',false,'412','34','567']
|
155
|
+
Phony.split('4751234567').should == ['47',false,'51','23','45','67']
|
156
|
+
Phony.split('4761234567').should == ['47',false,'61','23','45','67']
|
157
|
+
Phony.split('4771234567').should == ['47',false,'71','23','45','67']
|
158
|
+
Phony.split('4781234567').should == ['47',false,'812','34','567']
|
159
|
+
Phony.split('4791234567').should == ['47',false,'912','34','567']
|
160
160
|
end
|
161
161
|
it 'handles peruvian numbers' do
|
162
162
|
Phony.split('51112341234').should == ['51', '1', '1234', '1234'] # Lima
|
@@ -202,7 +202,7 @@ describe 'country descriptions' do
|
|
202
202
|
Phony.split('21621231234').should == ['216', '2', '123', '1234'] # Bizerte
|
203
203
|
end
|
204
204
|
it 'handles singaporean numbers' do
|
205
|
-
Phony.split('6561231234').should == ['65',
|
205
|
+
Phony.split('6561231234').should == ['65', false, '6123', '1234'] # Fixed line
|
206
206
|
end
|
207
207
|
it 'handles slovakian numbers' do
|
208
208
|
Phony.split('421912123456').should == ['421', '912', '123456'] # Mobile
|
data/spec/lib/phony/dsl_spec.rb
CHANGED
@@ -3,10 +3,21 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
describe Phony::DSL do
|
6
|
+
|
7
|
+
let(:dsl) { described_class.new }
|
6
8
|
|
7
9
|
it 'has a todo' do
|
8
10
|
Phony.define do
|
9
|
-
todo.split("123456789012345").should == [nil,
|
11
|
+
todo.split("123456789012345").should == [nil, false, nil, nil, '123456789012345']
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'match' do
|
16
|
+
it 'checks for ( in regex' do
|
17
|
+
expect { dsl.match(/123/) }.to raise_error("Regexp /123/ needs a group in it that defines which digits belong to the NDC.")
|
18
|
+
end
|
19
|
+
it 'checks for ( in regex' do
|
20
|
+
dsl.match(/(123)/).should be_kind_of(Phony::NationalSplitters::Regex)
|
10
21
|
end
|
11
22
|
end
|
12
23
|
|
@@ -12,7 +12,7 @@ describe Phony::NationalCode do
|
|
12
12
|
@national = Phony::NationalCode.new national_splitter, local_splitter
|
13
13
|
end
|
14
14
|
it 'splits correctly' do
|
15
|
-
@national.split('112').should == [nil,
|
15
|
+
@national.split('112').should == [nil, false, '112']
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -11,7 +11,7 @@ describe Phony::NationalSplitters::None do
|
|
11
11
|
describe 'split' do
|
12
12
|
let(:splitter) { described_class.instance_for }
|
13
13
|
it 'splits correctly into ndc and rest' do
|
14
|
-
splitter.split('123456789').should == [nil,
|
14
|
+
splitter.split('123456789').should == [nil, false, '123456789']
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
@@ -22,6 +22,12 @@ describe 'validations' do
|
|
22
22
|
# it 'is correct' do
|
23
23
|
# Phony.plausible?('+1911').should be_false
|
24
24
|
# end
|
25
|
+
it 'is correct' do
|
26
|
+
Phony.plausible?('45 44 11 22 33').should be_true
|
27
|
+
end
|
28
|
+
it 'is correct' do
|
29
|
+
Phony.plausible?('+4231231212').should be_true
|
30
|
+
end
|
25
31
|
it 'is correct' do
|
26
32
|
Phony.plausible?('010').should be_false
|
27
33
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phony
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.7.
|
4
|
+
version: 1.7.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-19 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: ! 'Fast international phone number (E164 standard) normalizing, splitting
|
15
15
|
and formatting. Lots of formatting options: International (+.., 00..), national
|
@@ -83,7 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
83
|
version: '0'
|
84
84
|
requirements: []
|
85
85
|
rubyforge_project:
|
86
|
-
rubygems_version: 1.8.
|
86
|
+
rubygems_version: 1.8.23
|
87
87
|
signing_key:
|
88
88
|
specification_version: 3
|
89
89
|
summary: Fast international phone number (E164 standard) normalizing, splitting and
|
@@ -103,4 +103,3 @@ test_files:
|
|
103
103
|
- spec/lib/phony/validations_spec.rb
|
104
104
|
- spec/lib/phony/vanity_spec.rb
|
105
105
|
- spec/lib/phony_spec.rb
|
106
|
-
has_rdoc: false
|