13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# File 'lib/embedded/model.rb', line 13
def embeds(embeddable_attr, options = {})
cattr_accessor :embedded_attributes
self.embedded_attributes ||= {}
self.embedded_attributes[embeddable_attr] = options
attributes = options[:attrs]
columns = embedded_column_names(embeddable_attr,attributes)
clazz = options[:class_name] ? options[:class_name].constantize : embeddable_attr.to_s.camelcase.constantize
self.send(:define_method, embeddable_attr) do
values = columns.inject({}) do |hash,(k,v)|
hash.merge(v=>read_attribute(k))
end
clazz.new(values)
end
self.send(:define_method, :"#{embeddable_attr}=") do |v|
columns.each do |k,a|
self.write_attribute(k, v.send(a))
end
end
end
|