module ActiveMongoid::Associations::DocumentRelation::Accessors

Public Instance Methods

build_document(name, object, metadata) click to toggle source
# File lib/active_mongoid/associations/document_relation/accessors.rb, line 7
def build_document(name, object, metadata)
  relation = create_document_relation(object, metadata)
  set_document_relation(name, relation)
end
create_document_relation(object, metadata) click to toggle source
# File lib/active_mongoid/associations/document_relation/accessors.rb, line 16
def create_document_relation(object, metadata)
  type = self.attributes[metadata.inverse_type]
  target = metadata.builder(self, object).build(type)
  target ? metadata.relation.new(self, target, metadata) : nil
end
set_document_relation(name, object) click to toggle source
# File lib/active_mongoid/associations/document_relation/accessors.rb, line 12
def set_document_relation(name, object)
  instance_variable_set("@#{name}", object)
end

Private Instance Methods

get_document_relation(name, metadata, object, reload = false) click to toggle source
# File lib/active_mongoid/associations/document_relation/accessors.rb, line 24
def get_document_relation(name, metadata, object, reload = false)
  if !reload && (value = instance_variable_get("@#{name}")) != nil
    value
  else
    if object && needs_no_database_query?(object, metadata)
      build_document(name, object, metadata)
    else
      build_document(name, self.send(metadata.key), metadata)
    end
  end
end
needs_no_database_query?(object, metadata) click to toggle source
# File lib/active_mongoid/associations/document_relation/accessors.rb, line 36
def needs_no_database_query?(object, metadata)
  object.is_a?(::Mongoid::Document) && object.id.to_s == attributes[metadata.key].to_s
end