couchrest_model/lib/couchrest/model/casted_by.rb

33 lines
928 B
Ruby

module CouchRest::Model
module CastedBy
extend ActiveSupport::Concern
included do
self.send(:attr_accessor, :casted_by)
self.send(:attr_accessor, :casted_by_property)
end
# Gets a reference to the actual document in the DB
# Calls up to the next document if there is one,
# Otherwise we're at the top and we return self
def base_doc
return self if base_doc?
casted_by ? casted_by.base_doc : nil
end
# Checks if we're the top document
def base_doc?
!casted_by
end
# Provide the property this casted model instance has been
# used by. If it has not been set, search through the
# casted_by objects properties to try and find it.
#def casted_by_property
# return nil unless casted_by
# attrs = casted_by.attributes
# @casted_by_property ||= casted_by.properties.detect{ |k| attrs[k.to_s] === self }
#end
end
end