Module: Storext::ClassMethods
- Defined in:
- lib/storext.rb
Instance Method Summary collapse
- #store_attribute(column, attr, type = nil, opts = {}) ⇒ Object
- #store_attributes(column, &block) ⇒ Object
- #storext_proxy_class ⇒ Object
Instance Method Details
#store_attribute(column, attr, type = nil, opts = {}) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/storext.rb', line 21 def store_attribute(column, attr, type=nil, opts={}) store_attribute_defs[column] ||= [] store_attribute_defs[column] << attr storext_proxy_class.attribute "_casted_#{attr}", type, opts define_method "#{attr}=" do |value| storext_proxy.send("_casted_#{attr}=", value) write_store_attribute column, attr, storext_proxy.send("_casted_#{attr}") end define_method attr do if store_val = read_store_attribute(column, attr) storext_proxy.send("_casted_#{attr}=", store_val) end storext_proxy.send("_casted_#{attr}") end store_accessor column, *store_attribute_defs[column] end |
#store_attributes(column, &block) ⇒ Object
42 43 44 |
# File 'lib/storext.rb', line 42 def store_attributes(column, &block) storext_proxy_class.define_store_attributes self, column, &block end |
#storext_proxy_class ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/storext.rb', line 46 def storext_proxy_class @storext_proxy_class ||= Class.new do include Virtus.model def self.define_store_attributes(source_class, column, &block) @source_class = source_class @column = column instance_eval &block end def self.method_missing(method_name, *args, &block) @source_class.store_attribute @column, method_name, *args end end end |