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
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/auto_html/auto_html_for.rb', line 18
def auto_html_for(raw_attrs, &proc)
include AutoHtmlFor::InstanceMethods
if defined?(ActiveRecord) == "constant"
return unless ActiveRecord::Base.connection.table_exists? self.table_name
end
suffix = AutoHtmlFor.auto_html_for_options[:htmlized_attribute_suffix]
auto_html_for_columns = [raw_attrs].flatten.map { |a| "#{a}#{suffix}" }
column_names = self.respond_to?(:column_names) ? self.column_names : fields.keys
missing_cache_columns = auto_html_for_columns - column_names
missing_cache_columns.each do |missing_cache_column|
raw_attr = missing_cache_column.gsub(suffix, '')
define_method(missing_cache_column) do
val = self[raw_attr] || self.send(raw_attr.to_sym)
auto_html(val, &proc)
end
end
cache_columns = auto_html_for_columns - missing_cache_columns
cache_columns.each do |cache_column|
raw_attr = cache_column.gsub(suffix, '')
define_method("#{raw_attr}=") do |val|
self[raw_attr] = val
result = auto_html(val, &proc)
self.send("#{cache_column}=", result)
val
end
define_method(cache_column) do
result = self[cache_column]
result.respond_to?(:html_safe) ? result.html_safe : result
end
end
end
|