module Virtualize::ClassMethods

Public Instance Methods

set_virtual_attributes(*args) click to toggle source
# 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