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
|
# File 'lib/virtualize.rb', line 7
def set_virtual_attributes(*args)
options = args.last.is_a?(Hash) ? args.pop : {}
options = { on: 'data' }.merge(options)
column_name = options[:on]
attributes = args
@virtual_column = column_name
@virtual_attributes = attributes
serialize column_name
define_method 'virtual_data' do
hash = send(column_name)
hash.is_a?(Hash) ? hash : {}
end
attributes.each do |attr|
define_method(attr) do
virtual_data[attr]
end
define_method("#{attr}=") do |value|
hash = self.virtual_data.merge({ :"#{attr}" => value })
self.send("#{column_name}=", hash)
end
end
end
|