Method: Virtualize::ClassMethods#set_virtual_attributes

Defined in:
lib/virtualize.rb

#set_virtual_attributes(*args) ⇒ Object



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