module Redcrumbs::SerializableAssociation::ClassMethods
Public Instance Methods
serializable_association(name)
click to toggle source
# File lib/redcrumbs/serializable_association.rb, line 15 def serializable_association(name) raise ArgumentError unless name and [:creator, :target, :subject].include?(name) property "stored_#{name}".to_sym, DataMapper::Property::Json, :lazy => false property "#{name}_id".to_sym, DataMapper::Property::Integer, :index => true, :lazy => false property "#{name}_type".to_sym, DataMapper::Property::String, :index => true, :lazy => false define_setter_for(name) define_getter_for(name) define_loader_for(name) define_load_state_getter(name) self end
Private Instance Methods
define_getter_for(name)
click to toggle source
Define a getter, e.g. object.creator
# File lib/redcrumbs/serializable_association.rb, line 47 def define_getter_for(name) define_method("#{name}") do instance_variable_get("@#{name}") or instance_variable_set("@#{name}", deserialize(name)) or instance_variable_set("@#{name}", load_associated(name)) end end
define_load_state_getter(name)
click to toggle source
Define method to check if association has been fully loaded from the database.
# File lib/redcrumbs/serializable_association.rb, line 74 def define_load_state_getter(name) instance_variable_set("@#{name}_load_state", false) define_method("has_loaded_#{name}?") do instance_variable_get("@#{name}_load_state") end end
define_loader_for(name)
click to toggle source
Define method to force a load of the association from the database or return it if already loaded.
# File lib/redcrumbs/serializable_association.rb, line 59 def define_loader_for(name) define_method("full_#{name}") do if send("has_loaded_#{name}?") instance_variable_get("@#{name}") else instance_variable_set("@#{name}_load_state", true) instance_variable_set("@#{name}", load_associated(name)) end end end
define_setter_for(name)
click to toggle source
Define a setter, e.g. object.creator=
# File lib/redcrumbs/serializable_association.rb, line 34 def define_setter_for(name) define_method("#{name}=") do |associated| instance_variable_set("@#{name}".to_sym, associated) assign_id_for(name, associated) assign_type_for(name, associated) assign_serialized_attributes(name, associated) end end