module Metafy::Base
Public Class Methods
included(object)
click to toggle source
Calls superclass method
# File lib/metafy/base.rb, line 67 def self.included object super object.after_initialize :populate_metafied_attributes object.after_find :populate_metafied_attributes object.after_save :write_metafied_attributes end
new(attributes = nil)
click to toggle source
Calls superclass method
# File lib/metafy/base.rb, line 3 def initialize(attributes = nil) unless attributes.nil? super(attributes.except(*self.metafied_attrs)) define_accessors_for_attributes attributes.each do |n,v| set_metafied_attribute(n,v) if has_metafied_attribute?(n) end else super(nil) end end
Public Instance Methods
define_accessor_for_attribute(att)
click to toggle source
# File lib/metafy/base.rb, line 55 def define_accessor_for_attribute(att) singleton_class.send(:attr_accessor, att.to_sym) end
define_accessors_for_attributes()
click to toggle source
# File lib/metafy/base.rb, line 59 def define_accessors_for_attributes self.metafied_attrs.each do | meta_attr | unless respond_to?(meta_attr.to_s) define_accessor_for_attribute(meta_attr) end end end
get_metafied_attribute(att)
click to toggle source
# File lib/metafy/base.rb, line 82 def get_metafied_attribute(att) unless respond_to?(att.to_s) define_accessor_for_attribute(att) end send(att.to_s) end
has_metafied_attribute?(attribute)
click to toggle source
# File lib/metafy/base.rb, line 15 def has_metafied_attribute?(attribute) return self.metafied_attrs.include?(attribute.to_sym) end
populate_metafied_attributes()
click to toggle source
# File lib/metafy/base.rb, line 40 def populate_metafied_attributes define_accessors_for_attributes attributes = Mattr.metas(self.class.name, self.id) attributes.each do | meta_attr | set_metafied_attribute( meta_attr.meta_key.to_sym, meta_attr.meta_value.to_s ) end end
read_metafied_attribute(attribute)
click to toggle source
# File lib/metafy/base.rb, line 19 def read_metafied_attribute(attribute) has_metafied_attribute?(attribute.to_sym) ? Mattr.value(self.class.name, self.id, attribute.to_s) : nil end
set_metafied_attribute(att, value = nil)
click to toggle source
# File lib/metafy/base.rb, line 74 def set_metafied_attribute(att, value = nil) unless respond_to?(att.to_s + '=') define_accessor_for_attribute(att) end send(att.to_s + '=', value) end
singleton_class()
click to toggle source
# File lib/metafy/base.rb, line 49 def singleton_class class << self self end end
update_attributes(attributes)
click to toggle source
overrides update_attributes
to take meta attributes into account
Calls superclass method
# File lib/metafy/base.rb, line 91 def update_attributes(attributes) attributes.each do |n,v| if has_metafied_attribute?(n.to_sym) set_metafied_attribute( n.to_sym, v ) write_metafied_attribute( n.to_sym ) end end attributes.nil? ? super(nil) : super(attributes.except(*self.metafied_attrs)) end
write_metafied_attribute( meta_attr )
click to toggle source
# File lib/metafy/base.rb, line 29 def write_metafied_attribute( meta_attr ) meta_attr = meta_attr.to_sym old_meta = read_metafied_attribute( meta_attr ) new_meta = get_metafied_attribute( meta_attr ) if( old_meta != new_meta ) Mattr.meta = [ self.class.name, self.id, meta_attr.to_s, get_metafied_attribute( meta_attr ) ] end end
write_metafied_attributes()
click to toggle source
# File lib/metafy/base.rb, line 23 def write_metafied_attributes self.metafied_attrs.each do | meta_attr | write_metafied_attribute( meta_attr ) end end