phony 1.9.0 → 2.0.0.beta1
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.
- data/README.textile +1 -1
- data/lib/phony.rb +28 -15
- data/lib/phony/countries.rb +609 -210
- data/lib/phony/countries/austria.rb +6 -1
- data/lib/phony/countries/bangladesh.rb +55 -0
- data/lib/phony/countries/belarus.rb +130 -0
- data/lib/phony/countries/georgia.rb +91 -0
- data/lib/phony/countries/germany.rb +20 -6
- data/lib/phony/countries/india.rb +50 -0
- data/lib/phony/countries/indonesia.rb +50 -0
- data/lib/phony/countries/italy.rb +38 -67
- data/lib/phony/countries/japan.rb +412 -0
- data/lib/phony/countries/kyrgyzstan.rb +118 -0
- data/lib/phony/countries/latvia.rb +40 -0
- data/lib/phony/countries/libya.rb +114 -0
- data/lib/phony/countries/malaysia.rb +7 -5
- data/lib/phony/countries/moldova.rb +50 -0
- data/lib/phony/countries/montenegro.rb +27 -0
- data/lib/phony/countries/namibia.rb +35 -0
- data/lib/phony/countries/nepal.rb +71 -0
- data/lib/phony/countries/netherlands.rb +3 -2
- data/lib/phony/countries/pakistan.rb +119 -0
- data/lib/phony/countries/paraguay.rb +145 -0
- data/lib/phony/countries/russia_kazakhstan_abhasia_south_osetia.rb +6 -6
- data/lib/phony/countries/serbia.rb +34 -0
- data/lib/phony/countries/somali.rb +22 -0
- data/lib/phony/countries/south_korea.rb +1 -1
- data/lib/phony/countries/sweden.rb +1 -1
- data/lib/phony/countries/taiwan.rb +51 -0
- data/lib/phony/countries/tajikistan.rb +76 -0
- data/lib/phony/countries/turkmenistan.rb +73 -0
- data/lib/phony/countries/ukraine.rb +614 -0
- data/lib/phony/countries/uruguay.rb +51 -0
- data/lib/phony/countries/zimbabwe.rb +37 -0
- data/lib/phony/country.rb +41 -0
- data/lib/phony/country_codes.rb +45 -18
- data/lib/phony/dsl.rb +33 -7
- data/lib/phony/local_splitters/fixed.rb +14 -1
- data/lib/phony/local_splitters/regex.rb +12 -1
- data/lib/phony/national_code.rb +7 -3
- data/lib/phony/national_splitters/default.rb +13 -1
- data/lib/phony/national_splitters/dsl.rb +9 -7
- data/lib/phony/national_splitters/fixed.rb +6 -0
- data/lib/phony/national_splitters/none.rb +6 -0
- data/lib/phony/national_splitters/regex.rb +6 -0
- data/lib/phony/national_splitters/variable.rb +7 -1
- data/spec/lib/phony/countries_spec.rb +684 -16
- data/spec/lib/phony/local_splitters/regex_spec.rb +41 -0
- data/spec/lib/phony/validations_spec.rb +542 -10
- data/spec/lib/phony_spec.rb +20 -6
- metadata +29 -9
- data/lib/phony/validator.rb +0 -26
- data/lib/phony/validators.rb +0 -88
data/spec/lib/phony_spec.rb
CHANGED
@@ -60,6 +60,20 @@ describe Phony do
|
|
60
60
|
it "should not normalize a number with a correct zero inside" do
|
61
61
|
Phony.normalize('+390909709511').should == '390909709511'
|
62
62
|
end
|
63
|
+
|
64
|
+
context 'special trunk prefixes' do
|
65
|
+
it 'normalizes Hungary' do
|
66
|
+
Phony.normalize('36 0630245506').should == '3630245506'
|
67
|
+
end
|
68
|
+
it 'normalizes Russia' do
|
69
|
+
Phony.normalize('7 8 342 1234567').should == '73421234567'
|
70
|
+
end
|
71
|
+
it 'normalizes Lithuania' do
|
72
|
+
Phony.normalize('370 8 5 1234567').should == '37051234567'
|
73
|
+
end
|
74
|
+
it 'normalizes Belarus'
|
75
|
+
end
|
76
|
+
|
63
77
|
end
|
64
78
|
end
|
65
79
|
|
@@ -150,16 +164,16 @@ describe Phony do
|
|
150
164
|
end
|
151
165
|
describe '"unsupported" countries' do
|
152
166
|
it 'should format as a single block' do
|
153
|
-
Phony.format('
|
167
|
+
Phony.format('88132155605220').should == '+881 32155605220'
|
154
168
|
end
|
155
169
|
it 'should format as a single block, regardless of format' do
|
156
|
-
Phony.format('
|
170
|
+
Phony.format('8811819372205', :format => :international).should == '+881 1819372205'
|
157
171
|
end
|
158
172
|
it 'should format as a single block, respecting custom spaces' do
|
159
|
-
Phony.format('
|
173
|
+
Phony.format('8811819372205', :spaces => :-).should == '+881-1819372205'
|
160
174
|
end
|
161
175
|
it 'should format as a single block, even without spaces' do
|
162
|
-
Phony.format('
|
176
|
+
Phony.format('8811819372205', :spaces => '').should == '+8811819372205'
|
163
177
|
end
|
164
178
|
end
|
165
179
|
end
|
@@ -219,10 +233,10 @@ describe Phony do
|
|
219
233
|
end
|
220
234
|
context '"unsupported" countries' do
|
221
235
|
it 'handles formatting' do
|
222
|
-
Phony.format('
|
236
|
+
Phony.format('88132155605220').should == '+881 32155605220'
|
223
237
|
end
|
224
238
|
it 'handles normalizing' do
|
225
|
-
Phony.normalize('+
|
239
|
+
Phony.normalize('+881-321 5560 5220').should == '88132155605220'
|
226
240
|
end
|
227
241
|
end
|
228
242
|
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phony
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 2.0.0.beta1
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Florian Hanke
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-04-18 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
|
@@ -21,17 +21,40 @@ extra_rdoc_files:
|
|
21
21
|
- README.textile
|
22
22
|
files:
|
23
23
|
- lib/phony/countries/austria.rb
|
24
|
+
- lib/phony/countries/bangladesh.rb
|
25
|
+
- lib/phony/countries/belarus.rb
|
24
26
|
- lib/phony/countries/brazil.rb
|
25
27
|
- lib/phony/countries/china.rb
|
28
|
+
- lib/phony/countries/georgia.rb
|
26
29
|
- lib/phony/countries/germany.rb
|
30
|
+
- lib/phony/countries/india.rb
|
31
|
+
- lib/phony/countries/indonesia.rb
|
27
32
|
- lib/phony/countries/ireland.rb
|
28
33
|
- lib/phony/countries/italy.rb
|
34
|
+
- lib/phony/countries/japan.rb
|
35
|
+
- lib/phony/countries/kyrgyzstan.rb
|
36
|
+
- lib/phony/countries/latvia.rb
|
37
|
+
- lib/phony/countries/libya.rb
|
29
38
|
- lib/phony/countries/malaysia.rb
|
39
|
+
- lib/phony/countries/moldova.rb
|
40
|
+
- lib/phony/countries/montenegro.rb
|
41
|
+
- lib/phony/countries/namibia.rb
|
42
|
+
- lib/phony/countries/nepal.rb
|
30
43
|
- lib/phony/countries/netherlands.rb
|
44
|
+
- lib/phony/countries/pakistan.rb
|
45
|
+
- lib/phony/countries/paraguay.rb
|
31
46
|
- lib/phony/countries/russia_kazakhstan_abhasia_south_osetia.rb
|
47
|
+
- lib/phony/countries/serbia.rb
|
48
|
+
- lib/phony/countries/somali.rb
|
32
49
|
- lib/phony/countries/south_korea.rb
|
33
50
|
- lib/phony/countries/sweden.rb
|
51
|
+
- lib/phony/countries/taiwan.rb
|
52
|
+
- lib/phony/countries/tajikistan.rb
|
53
|
+
- lib/phony/countries/turkmenistan.rb
|
54
|
+
- lib/phony/countries/ukraine.rb
|
34
55
|
- lib/phony/countries/united_kingdom.rb
|
56
|
+
- lib/phony/countries/uruguay.rb
|
57
|
+
- lib/phony/countries/zimbabwe.rb
|
35
58
|
- lib/phony/countries.rb
|
36
59
|
- lib/phony/country.rb
|
37
60
|
- lib/phony/country_codes.rb
|
@@ -45,8 +68,6 @@ files:
|
|
45
68
|
- lib/phony/national_splitters/none.rb
|
46
69
|
- lib/phony/national_splitters/regex.rb
|
47
70
|
- lib/phony/national_splitters/variable.rb
|
48
|
-
- lib/phony/validator.rb
|
49
|
-
- lib/phony/validators.rb
|
50
71
|
- lib/phony/vanity.rb
|
51
72
|
- lib/phony.rb
|
52
73
|
- README.textile
|
@@ -79,12 +100,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
79
100
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
101
|
none: false
|
81
102
|
requirements:
|
82
|
-
- - ! '
|
103
|
+
- - ! '>'
|
83
104
|
- !ruby/object:Gem::Version
|
84
|
-
version:
|
105
|
+
version: 1.3.1
|
85
106
|
requirements: []
|
86
107
|
rubyforge_project:
|
87
|
-
rubygems_version: 1.8.
|
108
|
+
rubygems_version: 1.8.10
|
88
109
|
signing_key:
|
89
110
|
specification_version: 3
|
90
111
|
summary: Fast international phone number (E164 standard) normalizing, splitting and
|
@@ -104,4 +125,3 @@ test_files:
|
|
104
125
|
- spec/lib/phony/validations_spec.rb
|
105
126
|
- spec/lib/phony/vanity_spec.rb
|
106
127
|
- spec/lib/phony_spec.rb
|
107
|
-
has_rdoc: false
|
data/lib/phony/validator.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
module Phony
|
2
|
-
|
3
|
-
class Validator
|
4
|
-
|
5
|
-
attr_reader :ndc_checks
|
6
|
-
|
7
|
-
def initialize
|
8
|
-
@ndc_checks = []
|
9
|
-
end
|
10
|
-
|
11
|
-
def plausible? ndc, rest
|
12
|
-
ndc_checks && ndc_checks.each do |ndc_check|
|
13
|
-
return false if ndc_check === ndc
|
14
|
-
end
|
15
|
-
|
16
|
-
true
|
17
|
-
end
|
18
|
-
|
19
|
-
def ndc_check ndc
|
20
|
-
@ndc_checks << ndc
|
21
|
-
self
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
data/lib/phony/validators.rb
DELETED
@@ -1,88 +0,0 @@
|
|
1
|
-
# # Number: A possible phone number, E164 or not.
|
2
|
-
# # Hints: Information that helps or constricts the plausibility check.
|
3
|
-
# #
|
4
|
-
# plausible? number, hints = {}
|
5
|
-
#
|
6
|
-
|
7
|
-
# plausible? number # Uses the definitions from the country definition to plausibility check.
|
8
|
-
# plausible? number, cc: 1 # => Checks cc.
|
9
|
-
# plausible? number, pattern: /[^5]/ # Uses def, checks against split.
|
10
|
-
# plausible? number, country: 1, pattern: [3, 4, 3] # Uses given country – adds cc.
|
11
|
-
#
|
12
|
-
|
13
|
-
# Basic plausibility is:
|
14
|
-
# * Max digits are 15.
|
15
|
-
# * Min digits are 2 (?)
|
16
|
-
#
|
17
|
-
|
18
|
-
module Phony
|
19
|
-
|
20
|
-
class Validators
|
21
|
-
|
22
|
-
def initialize
|
23
|
-
@validators = {}
|
24
|
-
end
|
25
|
-
|
26
|
-
def self.instance
|
27
|
-
@instance ||= new
|
28
|
-
end
|
29
|
-
|
30
|
-
# Add a specific country validator.
|
31
|
-
#
|
32
|
-
def add cc, validator
|
33
|
-
@validators[cc] = validator
|
34
|
-
end
|
35
|
-
|
36
|
-
# Is the given number plausible?
|
37
|
-
#
|
38
|
-
def plausible? number, hints = {}
|
39
|
-
normalized = CountryCodes.instance.clean number
|
40
|
-
|
41
|
-
# False if it fails the basic check.
|
42
|
-
#
|
43
|
-
return false unless (4..15) === normalized.size
|
44
|
-
|
45
|
-
# Hint based checking.
|
46
|
-
#
|
47
|
-
cc, ndc, *rest = Phony.split normalized
|
48
|
-
|
49
|
-
# Element based checking.
|
50
|
-
#
|
51
|
-
# Note: ndc == false means the country has none.
|
52
|
-
#
|
53
|
-
return false if ndc.nil?
|
54
|
-
return false if ndc && ndc.empty?
|
55
|
-
|
56
|
-
# A valid range for the rest is 0 or 3+ total digits.
|
57
|
-
#
|
58
|
-
return false if (1..2) === rest.reduce(0) { |total, string| total + string.size }
|
59
|
-
|
60
|
-
# CC.
|
61
|
-
#
|
62
|
-
cc_needed = hints[:cc]
|
63
|
-
return false if cc_needed && !(cc_needed === cc)
|
64
|
-
|
65
|
-
# NDC.
|
66
|
-
#
|
67
|
-
ndc_needed = hints[:ndc]
|
68
|
-
return false if ndc_needed && !(ndc_needed === ndc)
|
69
|
-
|
70
|
-
# Country specific checks.
|
71
|
-
#
|
72
|
-
validator = validator_for cc
|
73
|
-
validator.plausible? ndc, rest
|
74
|
-
rescue StandardError
|
75
|
-
return false
|
76
|
-
end
|
77
|
-
|
78
|
-
def validator_for cc
|
79
|
-
@validators[cc] || default_validator
|
80
|
-
end
|
81
|
-
|
82
|
-
def default_validator
|
83
|
-
@default_validator ||= Validator.new
|
84
|
-
end
|
85
|
-
|
86
|
-
end
|
87
|
-
|
88
|
-
end
|