class ActiveMongoid::Associations::DocumentRelation::Referenced::Many

Private Class Methods

builder(base, meta, object) click to toggle source
# File lib/active_mongoid/associations/document_relation/referenced/many.rb, line 107
def builder(base, meta, object)
  ActiveMongoid::Associations::Builders::Many.new(base, meta, object || [])
end
criteria(metadata, object, type = nil) click to toggle source
# File lib/active_mongoid/associations/document_relation/referenced/many.rb, line 111
def criteria(metadata, object, type = nil)
  crit = metadata.klass.where(metadata.foreign_key => object)
  if metadata.polymorphic?
    crit = crit.where(metadata.type => type.name)
  end
  crit
end
foreign_key(name) click to toggle source
# File lib/active_mongoid/associations/document_relation/referenced/many.rb, line 87
def foreign_key(name)
  "#{name}#{foreign_key_suffix}"
end
foreign_key_default() click to toggle source
# File lib/active_mongoid/associations/document_relation/referenced/many.rb, line 91
def foreign_key_default
  nil
end
foreign_key_suffix() click to toggle source
# File lib/active_mongoid/associations/document_relation/referenced/many.rb, line 95
def foreign_key_suffix
  "_id"
end
macro() click to toggle source
# File lib/active_mongoid/associations/document_relation/referenced/many.rb, line 103
def macro
  :has_many_documents
end
primary_key_default() click to toggle source
# File lib/active_mongoid/associations/document_relation/referenced/many.rb, line 99
def primary_key_default
  "id"
end
stores_foreign_key?() click to toggle source
# File lib/active_mongoid/associations/document_relation/referenced/many.rb, line 83
def stores_foreign_key?
  false
end

Private Instance Methods

binding() click to toggle source
# File lib/active_mongoid/associations/document_relation/referenced/many.rb, line 13
def binding
  Bindings::Many.new(base, target, __metadata__)
end
collection() click to toggle source
# File lib/active_mongoid/associations/document_relation/referenced/many.rb, line 18
def collection
  klass.collection
end
criteria() click to toggle source
# File lib/active_mongoid/associations/document_relation/referenced/many.rb, line 9
def criteria
  Many.criteria(__metadata__, base.send(__metadata__.primary_key), base.class)
end
method_missing(name, *args, &block) click to toggle source
# File lib/active_mongoid/associations/document_relation/referenced/many.rb, line 71
def method_missing(name, *args, &block)
  if target.respond_to?(name)
    target.send(name, *args, &block)
  else
    klass.send(:with_scope, criteria) do
      criteria.public_send(name, *args, &block)
    end
  end
end
persist_delayed(docs, inserts) click to toggle source
# File lib/active_mongoid/associations/document_relation/referenced/many.rb, line 22
def persist_delayed(docs, inserts)
  unless docs.empty?
    collection.insert(inserts)
    docs.each do |doc|
      doc.new_record = false
    end
  end
end
remove_all(conditions = nil, method = :delete_all) click to toggle source
# File lib/active_mongoid/associations/document_relation/referenced/many.rb, line 42
def remove_all(conditions = nil, method = :delete_all)
  selector = conditions || {}
  removed = klass.send(method, selector.merge!(criteria.selector))
  target.delete_if do |obj|
    if obj.matches?(selector)
      unbind_one(obj) and true
    end
  end
  removed
end
remove_not_in(ids) click to toggle source
# File lib/active_mongoid/associations/document_relation/referenced/many.rb, line 53
def remove_not_in(ids)
  removed = criteria.not_in(_id: ids)
  if __metadata__.destructive?
    removed.delete_all
  else
    removed.update_all(__metadata__.foreign_key => nil)
  end
  in_memory.each do |obj|
    if !ids.include?(obj.id)
      unbind_one(obj)
      target.delete(obj)
      if __metadata__.destructive?
        obj.destroyed = true
      end
    end
  end
end
save_or_delay(doc, docs, inserts) click to toggle source
# File lib/active_mongoid/associations/document_relation/referenced/many.rb, line 31
def save_or_delay(doc, docs, inserts)
  if doc.new_record? && doc.valid?(:create)
    doc.run_callbacks(:save)
    doc.run_callbacks(:create)
    docs.push(doc)
    inserts.push(doc.as_document)
  else
    doc.save
  end
end