class ActiveMongoid::Associations::RecordRelation::Referenced::Many

Private Class Methods

builder(base, meta, object) click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 111
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/record_relation/referenced/many.rb, line 115
def criteria(metadata, object, type = nil)
  crit = metadata.klass.where(metadata.foreign_key => object.to_s)
  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/record_relation/referenced/many.rb, line 91
def foreign_key(name)
  "#{name}#{foreign_key_suffix}"
end
foreign_key_default() click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 95
def foreign_key_default
  nil
end
foreign_key_suffix() click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 99
def foreign_key_suffix
  "_id"
end
macro() click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 107
def macro
  :has_many_records
end
primary_key_default() click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 103
def primary_key_default
  "_id"
end
stores_foreign_key?() click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 87
def stores_foreign_key?
  false
end

Private Instance Methods

binding() click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 13
def binding
  Bindings::Many.new(base, target, __metadata__)
end
criteria() click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 9
def criteria
  Many.criteria(__metadata__, base.send(__metadata__.primary_key), base.class)
end
matches?(obj, conditions) click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 53
def matches?(obj, conditions)
  conditions.all? {|key, value| obj.attributes[key] == value}
end
method_missing(name, *args, &block) click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 75
def method_missing(name, *args, &block)
  if target.respond_to?(name)
    target.send(name, *args, &block)
  else
    criteria.scoping do
      criteria.public_send(name, *args, &block)
    end
  end
end
persist_delayed(objs, inserts) click to toggle source

TODO: look into AR analog to collection insert

# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 18
def persist_delayed(objs, inserts)
  unless objs.empty?
    # collection.insert(inserts)
    inserts.each do |insert|
      insert.save
    end
    objs.each do |obj|
      # obj.save
      # obj.post_persist
    end
  end
end
remove_all(conditions = nil, method = :delete_all) click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 42
def remove_all(conditions = nil, method = :delete_all)
  conditions = conditions || {}
  removed = klass.send(method, conditions.merge!(criteria.where_values_hash))
  target.delete_if do |obj|
    if matches?(obj, conditions)
      unbind_one(obj) and true
    end
  end
  removed
end
remove_not_in(ids) click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 57
def remove_not_in(ids)
  removed = criteria.where("id not in (?)", 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.mark_for_destruction
      end
    end
  end
end
save_or_delay(obj, objs, inserts) click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 31
def save_or_delay(obj, objs, inserts)
  if obj.new_record? && obj.valid?(:create)
    # obj.run_before_callbacks(:save, :create)
    obj.save
    objs.push(obj)
    inserts.push(obj)
  else
    obj.save
  end
end