dialy 0.2.1 → 0.3.0
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.rdoc +4 -4
- data/VERSION +1 -1
- data/dialy.gemspec +2 -2
- data/lib/dialy/formatter.rb +60 -45
- data/spec/dialy_spec.rb +22 -18
- metadata +5 -5
data/README.rdoc
CHANGED
@@ -9,17 +9,17 @@ Because the area codes in Germany, Austria and Switzerland have different length
|
|
9
9
|
|
10
10
|
== Examples
|
11
11
|
|
12
|
-
Dialy.
|
12
|
+
Dialy::Number.new('+49 (0221) 12 34 56').to_s
|
13
13
|
# => '+49 221 1234567'
|
14
14
|
|
15
|
-
Dialy.
|
15
|
+
Dialy::Number.new('+49 (0)221 12 34 56').to_s
|
16
16
|
# => '+49 221 1234567'
|
17
17
|
|
18
|
-
Dialy.
|
18
|
+
Dialy::Number.new('0049221123456').to_s
|
19
19
|
# => '+49 221 1234567'
|
20
20
|
|
21
21
|
Dialy::Config[:default_country_code] = 49
|
22
|
-
Dialy.
|
22
|
+
Dialy::Number.new('0221/123456').to_s
|
23
23
|
# => '+49 221 1234567'
|
24
24
|
|
25
25
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/dialy.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{dialy}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Georg Ledermann"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-10-05}
|
13
13
|
s.description = %q{Knows all area codes from Germany, Austria and Switzerland}
|
14
14
|
s.email = %q{mail@georg-ledermann.de}
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/dialy/formatter.rb
CHANGED
@@ -1,59 +1,74 @@
|
|
1
1
|
module Dialy
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
class UnknownCountryCode < ArgumentError; end
|
3
|
+
class UnknownAreaCode < ArgumentError; end
|
4
|
+
class WrongFormatting < ArgumentError; end
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
# Step 1: Find country code
|
11
|
-
country_code = nil
|
12
|
-
if match = plain.match(/^(\+|00)(\d{1,3})/)
|
13
|
-
plain.slice!(0,match[1].length)
|
6
|
+
class Number
|
7
|
+
def initialize(value)
|
8
|
+
raise ArgumentError unless value.is_a?(String)
|
14
9
|
|
15
|
-
#
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
10
|
+
# Remove all but digits and +
|
11
|
+
@number = value.gsub(/[^+0-9]/, '')
|
12
|
+
|
13
|
+
# Plus (+) is only allowed as first character
|
14
|
+
raise WrongFormatting if @number.count('+') > 1
|
15
|
+
raise WrongFormatting if @number.index('+').to_i > 0
|
16
|
+
|
17
|
+
# Main work
|
18
|
+
@country_code = extract_country_code! || Config[:default_country_code]
|
19
|
+
@area_code = extract_area_code!
|
20
|
+
end
|
21
|
+
|
22
|
+
# String representation in E.123 format
|
23
|
+
def to_s
|
24
|
+
"+#{@country_code} #{[ @area_code, @number ].compact.join(' ')}"
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
def extract_country_code!
|
29
|
+
if match = @number.match(/^(\+|00)(\d{1,3})/)
|
30
|
+
# Because the length of a country code is not fixed, we have to do
|
31
|
+
# multiple searches. Start with the minimum length and go to the
|
32
|
+
# maxium until an area code is found.
|
33
|
+
CC_RANGE.each do |len|
|
34
|
+
part = match[2][0,len].to_i
|
20
35
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
36
|
+
if COUNTRY_CODES.include?(part)
|
37
|
+
# Remove "+" or leading "00"
|
38
|
+
@number.slice!(0,match[1].length)
|
39
|
+
|
40
|
+
# Strip country code
|
41
|
+
@number.slice!(0,part.to_s.length)
|
42
|
+
|
43
|
+
return part
|
44
|
+
end
|
25
45
|
end
|
26
|
-
end
|
27
46
|
|
28
|
-
|
29
|
-
|
30
|
-
country_code = Config[:default_country_code]
|
47
|
+
raise UnknownCountryCode.new("Unknown country code: #{match[2]}")
|
48
|
+
end
|
31
49
|
end
|
50
|
+
|
51
|
+
def extract_area_code!
|
52
|
+
# Delete leading "0"
|
53
|
+
@number.slice!(0,1) if @number.match /^0/
|
32
54
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
# Because the length of an area code is not fixed, we have to do
|
41
|
-
# multiple searches. Start with the minimum length and go to the
|
42
|
-
# maxium until an area code is found.
|
43
|
-
AC_RANGE[country_code].each do |len|
|
44
|
-
part = plain[0,len].to_i
|
55
|
+
if AREA_CODES[@country_code]
|
56
|
+
# Because the length of an area code is not fixed, we have to do
|
57
|
+
# multiple searches. Start with the minimum length and go to the
|
58
|
+
# maxium until an area code is found.
|
59
|
+
AC_RANGE[@country_code].each do |len|
|
60
|
+
part = @number[0,len].to_i
|
45
61
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
62
|
+
if AREA_CODES[@country_code].include?(part)
|
63
|
+
# Strip area_code
|
64
|
+
@number.slice!(0,part.to_s.length)
|
65
|
+
|
66
|
+
return part
|
67
|
+
end
|
50
68
|
end
|
51
|
-
end
|
52
69
|
|
53
|
-
|
70
|
+
raise UnknownAreaCode.new('Unknown area code')
|
71
|
+
end
|
54
72
|
end
|
55
|
-
|
56
|
-
# Finished. Build result
|
57
|
-
"+#{country_code} #{[ area_code, plain ].compact.join(' ')}"
|
58
73
|
end
|
59
74
|
end
|
data/spec/dialy_spec.rb
CHANGED
@@ -26,7 +26,7 @@ describe "Dialy" do
|
|
26
26
|
describe "options" do
|
27
27
|
it "should use default_country_code" do
|
28
28
|
Dialy::Config[:default_country_code] = 41
|
29
|
-
Dialy.
|
29
|
+
Dialy::Number.new('030-12345678').to_s.should == '+41 30 12345678'
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -37,23 +37,23 @@ describe "Dialy" do
|
|
37
37
|
end
|
38
38
|
|
39
39
|
it "should format plain number" do
|
40
|
-
Dialy.
|
40
|
+
Dialy::Number.new('02406-12345678').to_s.should == @expected
|
41
41
|
end
|
42
42
|
|
43
43
|
it "should format with +49" do
|
44
|
-
Dialy.
|
44
|
+
Dialy::Number.new('+49240612345678').to_s.should == @expected
|
45
45
|
end
|
46
46
|
|
47
47
|
it "should format with +49(0)" do
|
48
|
-
Dialy.
|
48
|
+
Dialy::Number.new('+49(0)2406-123456-78').to_s.should == @expected
|
49
49
|
end
|
50
50
|
|
51
51
|
it "should format with 0049" do
|
52
|
-
Dialy.
|
52
|
+
Dialy::Number.new('0049240612345678').to_s.should == @expected
|
53
53
|
end
|
54
54
|
|
55
55
|
it "should format with missing 0" do
|
56
|
-
Dialy.
|
56
|
+
Dialy::Number.new('240612345678').to_s.should == @expected
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
@@ -63,8 +63,8 @@ describe "Dialy" do
|
|
63
63
|
end
|
64
64
|
|
65
65
|
it "should format" do
|
66
|
-
Dialy.
|
67
|
-
Dialy.
|
66
|
+
Dialy::Number.new('0163-1234567').to_s.should == '+49 163 1234567'
|
67
|
+
Dialy::Number.new('0171-1234567').to_s.should == '+49 171 1234567'
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
@@ -74,9 +74,9 @@ describe "Dialy" do
|
|
74
74
|
end
|
75
75
|
|
76
76
|
it "should format" do
|
77
|
-
Dialy.
|
78
|
-
Dialy.
|
79
|
-
Dialy.
|
77
|
+
Dialy::Number.new('(+49) (08541) 123456').to_s.should == '+49 8541 123456'
|
78
|
+
Dialy::Number.new('0 08 00-1 23 45 67').to_s.should == '+800 1234567'
|
79
|
+
Dialy::Number.new('[0351] 1 23 45 6').to_s.should == '+49 351 123456'
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
@@ -86,23 +86,27 @@ describe "Dialy" do
|
|
86
86
|
end
|
87
87
|
|
88
88
|
it "should format" do
|
89
|
-
Dialy.
|
90
|
-
Dialy.
|
89
|
+
Dialy::Number.new('0041-71-123 45 67').to_s.should == '+41 71 1234567'
|
90
|
+
Dialy::Number.new('71-123 45 67').to_s.should == '+41 71 1234567'
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
94
|
describe "Wrong formatting" do
|
95
95
|
it "should fail with +" do
|
96
|
-
lambda { Dialy.
|
97
|
-
lambda { Dialy.
|
96
|
+
lambda { Dialy::Number.new('++49') }.should raise_error(Dialy::WrongFormatting)
|
97
|
+
lambda { Dialy::Number.new('0+49 221') }.should raise_error(Dialy::WrongFormatting)
|
98
98
|
end
|
99
99
|
|
100
100
|
it "should fail for non existing area_code" do
|
101
|
-
lambda { Dialy.
|
101
|
+
lambda { Dialy::Number.new('+49 2396 1234567') }.should raise_error(Dialy::UnknownAreaCode)
|
102
102
|
end
|
103
103
|
|
104
|
-
it "should fail for non existing country_code" do
|
105
|
-
lambda { Dialy.
|
104
|
+
it "should fail for non existing (+) country_code" do
|
105
|
+
lambda { Dialy::Number.new('+429 1234 1234567') }.should raise_error(Dialy::UnknownCountryCode)
|
106
|
+
end
|
107
|
+
|
108
|
+
it "should fail for nun existing (00) country_code" do
|
109
|
+
lambda { Dialy::Number.new('003834-123456') }.should raise_error(Dialy::UnknownCountryCode)
|
106
110
|
end
|
107
111
|
end
|
108
112
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dialy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 3
|
9
|
+
- 0
|
10
|
+
version: 0.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Georg Ledermann
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-10-05 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|