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