3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# File 'lib/phonify_string.rb', line 3
def phonify_string(*names)
configuration = {
:required => false
}.merge(names.)
names.each do |name|
self.send(:attr_accessor, "#{name}_invalid".intern )
if self.accessible_attributes
self.send(:attr_accessible, "#{name}_number".intern )
end
define_method "#{name}_number" do
read_attribute(name) unless read_attribute(name).nil?
end
define_method "#{name}_number=" do |phone|
if ( !phone.blank? )
if phone =~ /\D*(\d?)\D*(\d{3})\D*(\d{3})\D*(\d{4})\D*/
write_attribute(name, "#{$1}(#{$2})#{$3}-#{$4}")
instance_variable_set("@#{name}_invalid", false)
else
write_attribute(name, phone)
instance_variable_set("@#{name}_invalid", true)
end
else
if configuration[:required]
write_attribute(name,'')
instance_variable_set("@#{name}_invalid", true)
else
write_attribute(name,'')
instance_variable_set("@#{name}_invalid", false)
end
end
end
validates_each( name ) do |record,attr,value|
record.errors.add("#{name}_number","is invalid.") if record.send("#{name}_invalid".intern)
end
end
end
|