module Sequel::Plugins::SequelDynamicColumn

Attributes

dynamic_column_config[RW]

Public Class Methods

configure(model, opts = {}) { |config| ... } click to toggle source
# File lib/sequel_dynamic_column.rb, line 8
def self.configure(model, opts = {})
  #config = Config.new
  config = nil
  if block_given?
    config = Config.new
    yield config
  else
    config = Config.new(opts)
    #config.storage_column = opts.fetch(:storage_column)
    #config.dynamic_columns = opts.fetch(:dynamic_columns)
  end

  model.instance_eval do
    @dynamic_column_config = config

    class << self
      attr_accessor :dynamic_column_config
    end

    config.dynamic_columns.each do |field|
      field_str = field.to_s
      define_method "#{field}" do
        self.send(config.storage_column)[field_str]
      end

      define_method("#{field}=") do |val|
        storage_column_val = self.send(config.storage_column) || {}
        self.send("#{config.storage_column}=", storage_column_val)
        storage_column_val[field_str] = val
      end
    end
  end
end