class MongoMapper::Plugins::Associations::InForeignArrayProxy

Public Instance Methods

<<(*docs) click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_foreign_array_proxy.rb, line 75
def <<(*docs)
  flatten_deeper(docs).each do |doc|
    inverse_association(doc) << proxy_owner
    doc.save
  end
  reset
end
Also aliased as: push, concat
all(options={}) click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_foreign_array_proxy.rb, line 20
def all(options={})
  query(options).all
end
concat(*docs)
Alias for: <<
count(options={}) click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_foreign_array_proxy.rb, line 32
def count(options={})
  query(options).count
end
create(attrs={}) click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_foreign_array_proxy.rb, line 54
def create(attrs={})
  doc = klass.create(attrs)
  if doc.persisted?
    inverse_association(doc) << proxy_owner
    doc.save
    reset
  end
  doc
end
create!(attrs={}) click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_foreign_array_proxy.rb, line 64
def create!(attrs={})
  doc = klass.create!(attrs)

  if doc.persisted?
    inverse_association(doc) << proxy_owner
    doc.save
    reset
  end
  doc
end
delete_all(options={}) click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_foreign_array_proxy.rb, line 43
def delete_all(options={})
  docs = query(options).fields(:_id).all
  klass.delete(docs.map { |d| d.id })
  reset
end
destroy_all(options={}) click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_foreign_array_proxy.rb, line 36
def destroy_all(options={})
  all(options).each do |doc|
    doc.destroy
  end
  reset
end
find(*args) click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_foreign_array_proxy.rb, line 8
def find(*args)
  query.find(*scoped_ids(args))
end
find!(*args) click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_foreign_array_proxy.rb, line 12
def find!(*args)
  query.find!(*scoped_ids(args))
end
first(options={}) click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_foreign_array_proxy.rb, line 24
def first(options={})
  query(options).first
end
last(options={}) click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_foreign_array_proxy.rb, line 28
def last(options={})
  query(options).last
end
nullify() click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_foreign_array_proxy.rb, line 49
def nullify
  replace([])
  reset
end
paginate(options) click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_foreign_array_proxy.rb, line 16
def paginate(options)
  query.paginate(options)
end
push(*docs)
Alias for: <<
replace(docs) click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_foreign_array_proxy.rb, line 85
def replace(docs)
  doc_ids = docs.map do |doc|
    doc.save unless doc.persisted?
    inverse_association(doc) << proxy_owner
    doc.save
    doc.id
  end

  replace_selector =  { options[:from] => proxy_owner.id }
  unless doc_ids.empty?
    replace_selector[:_id] = {"$not" => {"$in" => doc_ids}}
  end

  klass.collection.update_many(replace_selector, {
    "$pull" => { options[:from] => proxy_owner.id }
  })

  reset
end

Private Instance Methods

criteria() click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_foreign_array_proxy.rb, line 114
def criteria
  {options[:from] => proxy_owner.id}
end
find_target() click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_foreign_array_proxy.rb, line 126
def find_target
  all
end
inverse_association(doc) click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_foreign_array_proxy.rb, line 130
def inverse_association(doc)
  doc.send(options[:as].to_s.pluralize)
end
query(options={}) click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_foreign_array_proxy.rb, line 107
def query(options={})
  klass.query({}.
    merge(association.query_options).
    merge(options).
    merge(criteria))
end
scoped_ids(args) click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_foreign_array_proxy.rb, line 118
def scoped_ids(args)
  valid = args.flatten.map do |id|
    id = ObjectId.to_mongo(id) if klass.using_object_id?
    id
  end
  valid.empty? ? nil : valid
end