phone_wrangler 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/phone_wrangler.rb +47 -19
- data/phone_wrangler.gemspec +1 -1
- data/test/phone_wrangler_test.rb +17 -0
- metadata +1 -1
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/lib/phone_wrangler.rb
CHANGED
@@ -21,6 +21,20 @@ module PhoneWrangler
|
|
21
21
|
@@default_area_code
|
22
22
|
end
|
23
23
|
|
24
|
+
@@formats = {
|
25
|
+
:us => "%c (%a) %m-%p x %x",
|
26
|
+
:us_short => "(%a) %m-%p",
|
27
|
+
:nanp_short => "(%a) %m-%p"
|
28
|
+
}
|
29
|
+
|
30
|
+
@@pattern_map = {
|
31
|
+
/%c/ => :country_code,
|
32
|
+
/%a/ => :area_code,
|
33
|
+
/%p/ => :prefix,
|
34
|
+
/%n/ => :number,
|
35
|
+
/%e/ => :extension
|
36
|
+
}
|
37
|
+
|
24
38
|
#-------------------args-----------------------------------------
|
25
39
|
def initialize(args='')
|
26
40
|
@original = args
|
@@ -58,15 +72,31 @@ module PhoneWrangler
|
|
58
72
|
end
|
59
73
|
end
|
60
74
|
|
75
|
+
def empty?
|
76
|
+
answer = true
|
77
|
+
NUMBER_PARTS.each do |field|
|
78
|
+
if self.respond_to?(field)
|
79
|
+
field_val = self.send(field)
|
80
|
+
answer = answer && (field_val.nil? || field_val.empty?)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
return answer
|
84
|
+
end
|
85
|
+
|
61
86
|
#------------------------------------------------------------
|
62
|
-
def to_s(format =
|
63
|
-
if
|
64
|
-
|
87
|
+
def to_s(format = '')
|
88
|
+
return '' if self.empty?
|
89
|
+
|
90
|
+
case format
|
91
|
+
when Symbol
|
92
|
+
format = @@formats[format]
|
93
|
+
when ''
|
65
94
|
format += "(%a) " unless area_code.nil? or area_code.empty?
|
66
95
|
format += "%p-" unless prefix.nil? or prefix.empty?
|
67
96
|
format += "%n" unless number.nil? or number.empty?
|
68
97
|
format += " x%e" unless extension.nil? or extension.empty?
|
69
98
|
end
|
99
|
+
|
70
100
|
format_number(format)
|
71
101
|
end
|
72
102
|
|
@@ -75,7 +105,7 @@ module PhoneWrangler
|
|
75
105
|
end
|
76
106
|
|
77
107
|
# TODO: Should #digits method include the extension digits at all? Probably not
|
78
|
-
# with an 'x' anyway.
|
108
|
+
# with an 'x', anyway.
|
79
109
|
def digits
|
80
110
|
digitstring = ''
|
81
111
|
[:area_code, :prefix, :number].each {|part|
|
@@ -95,15 +125,18 @@ module PhoneWrangler
|
|
95
125
|
# my $us_phone_regex = '1?\s*\W\s*([2-9][0-8][0-9])\W*([2-9][0-9]{2})\W*([0-9]{4})(\se?x?t?(\d*))?';
|
96
126
|
|
97
127
|
def parse_from_string(raw_string)
|
98
|
-
# Optional 1 -./ 256 (opt) 456 -./ 1234 ext(opt) 1234 (opt)
|
99
|
-
phone_regexp = /
|
128
|
+
# Optional + 1 -./ 256 (opt) 456 -./ 1234 ext(opt) 1234 (opt)
|
129
|
+
phone_regexp = / \+? \s* 1? \s* [.\/-]? \s*
|
130
|
+
[\(]?([2-9][0-8]\d)?[\)]? \s* [.\/-]? \s*
|
131
|
+
([2-9]\d{2}) \s* [.\/-]? \s*
|
132
|
+
(\d{4}) \s* (?:\s*e?x?t?\s*(\d+))? /x
|
100
133
|
match = phone_regexp.match(raw_string)
|
101
134
|
if ! match.nil?
|
102
135
|
# puts "Setting values #{match.captures.pretty_inspect}"
|
103
136
|
@area_code = match.captures[0]
|
104
137
|
@prefix = match.captures[1]
|
105
138
|
@number = match.captures[2]
|
106
|
-
@extension = match.captures[
|
139
|
+
@extension = match.captures[3]
|
107
140
|
else
|
108
141
|
# puts "No matchy :("
|
109
142
|
end
|
@@ -148,19 +181,14 @@ module PhoneWrangler
|
|
148
181
|
}
|
149
182
|
end
|
150
183
|
|
151
|
-
# This
|
152
|
-
|
184
|
+
# This part borrowed from http://github.com/midas/phone_number/blob/master/lib/phone_number/number.rb
|
185
|
+
private
|
153
186
|
|
154
|
-
def format_number(
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
# gsub("%A", area_code_long || "").
|
160
|
-
gsub("%n", number || "").
|
161
|
-
# gsub("%f", number1 || "").
|
162
|
-
# gsub("%l", number2 || "").
|
163
|
-
gsub("%e", extension || "")
|
187
|
+
def format_number(format)
|
188
|
+
@@pattern_map.each do |pat, field|
|
189
|
+
format = format.gsub( pat, self.send(field) || '' ) if self.respond_to?(field)
|
190
|
+
end
|
191
|
+
format
|
164
192
|
end
|
165
193
|
|
166
194
|
end
|
data/phone_wrangler.gemspec
CHANGED
data/test/phone_wrangler_test.rb
CHANGED
@@ -29,6 +29,16 @@ class PhoneWranglerTest < Test::Unit::TestCase
|
|
29
29
|
assert_equal PhoneNumber, pn.class
|
30
30
|
end
|
31
31
|
|
32
|
+
should "agree it is empty when it is" do
|
33
|
+
pn = PhoneNumber.new
|
34
|
+
assert pn.empty?
|
35
|
+
end
|
36
|
+
|
37
|
+
should "not agree it is empty when it is not" do
|
38
|
+
pn = PhoneNumber.new(:area_code => '256', :prefix => '555', :number => '1234')
|
39
|
+
assert ! pn.empty?
|
40
|
+
end
|
41
|
+
|
32
42
|
should "correctly parse phone number strings" do
|
33
43
|
pn = PhoneNumber.new("(256) 555-1234")
|
34
44
|
assert_equal '256', pn.area_code
|
@@ -187,6 +197,13 @@ class PhoneWranglerTest < Test::Unit::TestCase
|
|
187
197
|
assert_equal String, @pn.to_s.class
|
188
198
|
end
|
189
199
|
|
200
|
+
# TODO: I don't know if this is the right behavior, actually. If the user
|
201
|
+
# passes in a format string with extra decorative content, does he want it
|
202
|
+
# back with only the decorative structure? Or is an empty string better?
|
203
|
+
should "return an empty string if the PhoneNumber is empty" do
|
204
|
+
assert_equal '', PhoneNumber.new.to_s("x%e foo")
|
205
|
+
end
|
206
|
+
|
190
207
|
should "format numbers properly with to_s" do
|
191
208
|
assert_equal "(256) 555-1234", @pn.to_s
|
192
209
|
end
|