Module: PhonifyString

Defined in:
lib/phonify_string.rb

Instance Method Summary collapse

Instance Method Details

#phonify_string(*names) ⇒ Object



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.extract_options!)

	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