class MongoMapper::Plugins::Associations::InArrayProxy
Public Instance Methods
<<(*docs)
click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb, line 93 def <<(*docs) flatten_deeper(docs).each do |doc| doc.save unless doc.persisted? unless ids.include?(doc.id) ids << doc.id end end reset end
all(options={})
click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb, line 21 def all(options={}) return [] if ids.blank? order_results(query(options).all) end
count(options={})
click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb, line 48 def count(options={}) return 0 if ids.blank? options.blank? ? ids.size : query(options).count end
create(attrs={})
click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb, line 73 def create(attrs={}) doc = klass.create(attrs) if doc.persisted? ids << doc.id proxy_owner.save reset end doc end
create!(attrs={})
click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb, line 83 def create!(attrs={}) doc = klass.create!(attrs) if doc.persisted? ids << doc.id proxy_owner.save reset end doc end
delete_all(options={})
click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb, line 61 def delete_all(options={}) docs = query(options).fields(:_id).all docs.each { |doc| ids.delete(doc.id) } klass.delete(docs.map { |d| d.id }) reset end
destroy_all(options={})
click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb, line 53 def destroy_all(options={}) all(options).each do |doc| ids.delete(doc.id) doc.destroy end reset end
find(*args)
click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb, line 8 def find(*args) order_results(query.find(*scoped_ids(args))) end
find!(*args)
click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb, line 12 def find!(*args) order_results(query.find!(*scoped_ids(args))) end
first(options={})
click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb, line 26 def first(options={}) return nil if ids.blank? if ordered? ids = find_ordered_ids(options) find!(ids.first) if ids.any? else query(options).first end end
last(options={})
click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb, line 37 def last(options={}) return nil if ids.blank? if ordered? ids = find_ordered_ids(options) find!(ids.last) if ids.any? else query(options).last end end
nullify()
click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb, line 68 def nullify replace([]) reset end
paginate(options)
click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb, line 16 def paginate(options) return [] if ids.blank? query.paginate(options) end
replace(docs)
click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb, line 105 def replace(docs) doc_ids = docs.map do |doc| doc.save unless doc.persisted? doc.id end ids.replace(doc_ids.uniq) reset end
Private Instance Methods
criteria()
click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb, line 123 def criteria {:_id => ids} end
find_ordered_ids(options={})
click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb, line 135 def find_ordered_ids(options={}) return ids if options.empty? matched_ids = klass.collection.distinct(:_id, query(options).criteria.to_hash) matched_ids.sort_by! { |matched_id| ids.index(matched_id) } end
find_target()
click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb, line 142 def find_target return [] if ids.blank? all end
ids()
click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb, line 147 def ids proxy_owner[options[:in]] end
order_results(objects)
click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb, line 151 def order_results(objects) return objects if !ordered? return objects unless objects.respond_to?(:to_a) && objects.respond_to?(:sort_by) objects.sort_by { |obj| ids.index(obj.id) } end
ordered?()
click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb, line 157 def ordered? association.ordered? end
query(options={})
click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb, line 116 def query(options={}) klass. query(association.query_options). amend(options). amend(criteria) end
scoped_ids(args)
click to toggle source
# File lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb, line 127 def scoped_ids(args) valid = args.flatten.select do |id| id = ObjectId.to_mongo(id) if klass.using_object_id? ids.include?(id) end valid.empty? ? nil : valid end