module MongoMapper::Plugins::Modifiers::ClassMethods
Public Instance Methods
add_to_set(*args)
click to toggle source
# File lib/mongo_mapper/plugins/modifiers.rb, line 59 def add_to_set(*args) modifier_update('$addToSet', args) end
Also aliased as: push_uniq
decrement(*args)
click to toggle source
# File lib/mongo_mapper/plugins/modifiers.rb, line 12 def decrement(*args) criteria, keys, options = criteria_and_keys_from_args(args) values, to_decrement = keys.values, {} keys.keys.each_with_index { |k, i| to_decrement[k] = -values[i].abs } collection.update_many(criteria, {'$inc' => to_decrement}, options || {}) end
find_one_and_update(args)
click to toggle source
# File lib/mongo_mapper/plugins/modifiers.rb, line 76 def find_one_and_update(args) args = args.dup args[:query] = dealias_keys(args.delete :query) if args.key? :query args[:update] = dealias_keys(args.delete :update) if args.key? :update collection.find_one_and_update(args[:query], args[:update], args) end
Also aliased as: find_and_modify
increment(*args)
click to toggle source
# File lib/mongo_mapper/plugins/modifiers.rb, line 8 def increment(*args) modifier_update('$inc', args) end
pop(*args)
click to toggle source
# File lib/mongo_mapper/plugins/modifiers.rb, line 72 def pop(*args) modifier_update('$pop', args) end
pull(*args)
click to toggle source
# File lib/mongo_mapper/plugins/modifiers.rb, line 64 def pull(*args) modifier_update('$pull', args) end
pull_all(*args)
click to toggle source
# File lib/mongo_mapper/plugins/modifiers.rb, line 68 def pull_all(*args) modifier_update('$pullAll', args) end
push(*args)
click to toggle source
# File lib/mongo_mapper/plugins/modifiers.rb, line 42 def push(*args) modifier_update('$push', args) end
push_all(*args)
click to toggle source
# File lib/mongo_mapper/plugins/modifiers.rb, line 46 def push_all(*args) Kernel.warn "push_all no longer supported. use $push with $each" hash = args.pop ids = args push_values = hash.inject({}) do |hsh, (key, values)| { key => { '$each' => values } } end modifier_update('$addToSet', [ids, push_values].flatten) end
set(*args)
click to toggle source
# File lib/mongo_mapper/plugins/modifiers.rb, line 19 def set(*args) criteria, updates, options = criteria_and_keys_from_args(args) updates.each do |key, value| updates[key] = keys[key.to_s].set(value) if key?(key) end modifier_update('$set', [criteria, updates, options]) end
unset(*args)
click to toggle source
# File lib/mongo_mapper/plugins/modifiers.rb, line 27 def unset(*args) if args[0].is_a?(Hash) criteria, keys = args.shift, args options = keys.last.is_a?(Hash) ? keys.pop : {} else keys, ids = args.partition { |arg| arg.is_a?(Symbol) } options = ids.last.is_a?(Hash) ? ids.pop : {} criteria = {:id => ids} end criteria = criteria_hash(criteria).to_hash updates = keys.inject({}) { |hash, key| hash[key] = 1; hash } modifier_update('$unset', [criteria, updates, options]) end
upsert(selector, updates, args = {})
click to toggle source
# File lib/mongo_mapper/plugins/modifiers.rb, line 84 def upsert(selector, updates, args = {}) criteria = dealias_keys(selector) updates = dealias_keys(updates) collection.update_one(criteria, updates, args.merge(upsert: true)) end
Private Instance Methods
criteria_and_keys_from_args(args)
click to toggle source
# File lib/mongo_mapper/plugins/modifiers.rb, line 101 def criteria_and_keys_from_args(args) if args[0].is_a?(Hash) criteria = args[0] updates = args[1] options = args[2] else criteria, (updates, options) = args.partition { |a| !a.is_a?(Hash) } criteria = { :id => criteria } end upgrade_legacy_safe_usage!(options) updates = dealias_keys updates [criteria_hash(criteria).to_hash, updates, options] end
modifier_update(modifier, args)
click to toggle source
# File lib/mongo_mapper/plugins/modifiers.rb, line 92 def modifier_update(modifier, args) criteria, updates, options = criteria_and_keys_from_args(args) if options collection.update_many(criteria, {modifier => updates}, options) else collection.update_many(criteria, {modifier => updates}) end end
upgrade_legacy_safe_usage!(options)
click to toggle source
# File lib/mongo_mapper/plugins/modifiers.rb, line 116 def upgrade_legacy_safe_usage!(options) if options and options.key?(:safe) options.merge! Utils.get_safe_options(options) options.delete :safe end end