mongoid 2.0.0.rc.7 → 2.0.0.rc.8
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/config/locales/en.yml +3 -0
- data/lib/config/locales/id.yml +46 -0
- data/lib/config/locales/ja.yml +40 -0
- data/lib/config/locales/vi.yml +45 -0
- data/lib/mongoid.rb +5 -3
- data/lib/mongoid/attributes.rb +24 -63
- data/lib/mongoid/attributes/processing.rb +5 -2
- data/lib/mongoid/callbacks.rb +10 -0
- data/lib/mongoid/collection.rb +24 -0
- data/lib/mongoid/collections/master.rb +14 -6
- data/lib/mongoid/collections/operations.rb +1 -1
- data/lib/mongoid/collections/retry.rb +39 -0
- data/lib/mongoid/collections/slaves.rb +26 -10
- data/lib/mongoid/components.rb +4 -4
- data/lib/mongoid/config.rb +6 -3
- data/lib/mongoid/contexts.rb +0 -1
- data/lib/mongoid/contexts/enumerable.rb +19 -7
- data/lib/mongoid/contexts/mongo.rb +9 -5
- data/lib/mongoid/copyable.rb +10 -8
- data/lib/mongoid/criteria.rb +83 -61
- data/lib/mongoid/criterion/builder.rb +34 -0
- data/lib/mongoid/criterion/creational.rb +2 -2
- data/lib/mongoid/criterion/exclusion.rb +58 -32
- data/lib/mongoid/criterion/inclusion.rb +49 -10
- data/lib/mongoid/criterion/optional.rb +1 -1
- data/lib/mongoid/criterion/selector.rb +80 -11
- data/lib/mongoid/cursor.rb +6 -1
- data/lib/mongoid/default_scope.rb +27 -19
- data/lib/mongoid/document.rb +26 -1
- data/lib/mongoid/errors.rb +1 -0
- data/lib/mongoid/errors/mixed_relations.rb +37 -0
- data/lib/mongoid/extensions/object_id/conversions.rb +7 -4
- data/lib/mongoid/factory.rb +1 -1
- data/lib/mongoid/field.rb +47 -30
- data/lib/mongoid/fields.rb +9 -2
- data/lib/mongoid/finders.rb +15 -49
- data/lib/mongoid/identity.rb +6 -4
- data/lib/mongoid/keys.rb +85 -31
- data/lib/mongoid/multi_parameter_attributes.rb +2 -2
- data/lib/mongoid/named_scope.rb +129 -28
- data/lib/mongoid/observer.rb +36 -0
- data/lib/mongoid/paranoia.rb +3 -3
- data/lib/mongoid/paths.rb +1 -1
- data/lib/mongoid/persistence.rb +2 -0
- data/lib/mongoid/persistence/atomic.rb +88 -0
- data/lib/mongoid/persistence/atomic/add_to_set.rb +30 -0
- data/lib/mongoid/persistence/atomic/inc.rb +28 -0
- data/lib/mongoid/persistence/atomic/operation.rb +44 -0
- data/lib/mongoid/persistence/atomic/pull_all.rb +33 -0
- data/lib/mongoid/persistence/atomic/push.rb +28 -0
- data/lib/mongoid/railtie.rb +13 -1
- data/lib/mongoid/relations.rb +1 -0
- data/lib/mongoid/relations/accessors.rb +20 -2
- data/lib/mongoid/relations/builders/embedded/one.rb +1 -0
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +17 -6
- data/lib/mongoid/relations/builders/referenced/many.rb +2 -1
- data/lib/mongoid/relations/builders/referenced/one.rb +1 -0
- data/lib/mongoid/relations/embedded/atomic.rb +86 -0
- data/lib/mongoid/relations/embedded/atomic/operation.rb +63 -0
- data/lib/mongoid/relations/embedded/atomic/pull.rb +65 -0
- data/lib/mongoid/relations/embedded/atomic/push_all.rb +59 -0
- data/lib/mongoid/relations/embedded/atomic/set.rb +61 -0
- data/lib/mongoid/relations/embedded/atomic/unset.rb +41 -0
- data/lib/mongoid/relations/embedded/many.rb +57 -25
- data/lib/mongoid/relations/macros.rb +6 -4
- data/lib/mongoid/relations/many.rb +51 -10
- data/lib/mongoid/relations/metadata.rb +4 -2
- data/lib/mongoid/relations/proxy.rb +39 -24
- data/lib/mongoid/relations/referenced/many.rb +47 -26
- data/lib/mongoid/relations/referenced/many_to_many.rb +47 -14
- data/lib/mongoid/relations/referenced/one.rb +14 -0
- data/lib/mongoid/sharding.rb +51 -0
- data/lib/mongoid/state.rb +3 -2
- data/lib/mongoid/timestamps.rb +5 -29
- data/lib/mongoid/timestamps/created.rb +31 -0
- data/lib/mongoid/timestamps/updated.rb +33 -0
- data/lib/mongoid/validations.rb +10 -3
- data/lib/mongoid/validations/referenced.rb +58 -0
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/versioning.rb +67 -5
- data/lib/rails/generators/mongoid/model/templates/model.rb +2 -0
- data/lib/rails/generators/mongoid/observer/observer_generator.rb +17 -0
- data/lib/rails/generators/mongoid/observer/templates/observer.rb +4 -0
- data/lib/rails/generators/mongoid_generator.rb +10 -1
- data/lib/rails/mongoid.rb +1 -0
- metadata +29 -8
- data/lib/mongoid/contexts/ids.rb +0 -25
- data/lib/mongoid/modifiers.rb +0 -24
- data/lib/mongoid/modifiers/command.rb +0 -18
- data/lib/mongoid/modifiers/inc.rb +0 -24
@@ -0,0 +1,30 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid #:nodoc:
|
3
|
+
module Persistence #:nodoc:
|
4
|
+
module Atomic #:nodoc:
|
5
|
+
|
6
|
+
# This class provides the ability to perform an explicit $addToSet
|
7
|
+
# modification on a specific field.
|
8
|
+
class AddToSet < Operation
|
9
|
+
|
10
|
+
# Sends the atomic $addToSet operation to the database.
|
11
|
+
#
|
12
|
+
# @example Persist the new values.
|
13
|
+
# addToSet.persist
|
14
|
+
#
|
15
|
+
# @return [ Object ] The new array value.
|
16
|
+
#
|
17
|
+
# @since 2.0.0
|
18
|
+
def persist
|
19
|
+
document[field] = [] unless document[field]
|
20
|
+
values = document.send(field)
|
21
|
+
values.push(value) unless values.include?(value)
|
22
|
+
values.tap do
|
23
|
+
document.collection.update(document._selector, operation("$addToSet"), options)
|
24
|
+
document.changes.delete(field.to_s) if document.persisted?
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid #:nodoc:
|
3
|
+
module Persistence #:nodoc:
|
4
|
+
module Atomic #:nodoc:
|
5
|
+
|
6
|
+
# This class provides atomic $inc behaviour.
|
7
|
+
class Inc < Operation
|
8
|
+
|
9
|
+
# Sends the atomic $inc operation to the database.
|
10
|
+
#
|
11
|
+
# @example Persist the new values.
|
12
|
+
# inc.persist
|
13
|
+
#
|
14
|
+
# @return [ Object ] The new integer value.
|
15
|
+
#
|
16
|
+
# @since 2.0.0
|
17
|
+
def persist
|
18
|
+
current = document[field] || 0
|
19
|
+
document[field] = current + value
|
20
|
+
document[field].tap do
|
21
|
+
document.collection.update(document._selector, operation("$inc"), options)
|
22
|
+
document.changes.delete(field.to_s)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid #:nodoc:
|
3
|
+
module Persistence #:nodoc:
|
4
|
+
module Atomic #:nodoc:
|
5
|
+
|
6
|
+
# This is the superclass for all atomic operation objects.
|
7
|
+
class Operation
|
8
|
+
include Mongoid::Safe
|
9
|
+
|
10
|
+
attr_reader :document, :field, :value, :options
|
11
|
+
|
12
|
+
# Initialize the new pullAll operation.
|
13
|
+
#
|
14
|
+
# @example Create a new pullAll operation.
|
15
|
+
# PullAll.new(document, :aliases, [ "Bond" ])
|
16
|
+
#
|
17
|
+
# @param [ Document ] document The document to pullAll onto.
|
18
|
+
# @param [ Symbol ] field The name of the array field.
|
19
|
+
# @param [ Object ] value The value to pullAll.
|
20
|
+
# @param [ Hash ] options The persistence options.
|
21
|
+
#
|
22
|
+
# @since 2.0.0
|
23
|
+
def initialize(document, field, value, options = {})
|
24
|
+
@document, @field, @value = document, field, value
|
25
|
+
@options = { :safe => safe_mode?(options) }
|
26
|
+
end
|
27
|
+
|
28
|
+
# Get the atomic operation to perform.
|
29
|
+
#
|
30
|
+
# @example Get the operation.
|
31
|
+
# inc.operation
|
32
|
+
#
|
33
|
+
# @param [ String ] modifier The modifier to use.
|
34
|
+
#
|
35
|
+
# @return [ Hash ] The atomic operation for the field and addition.
|
36
|
+
#
|
37
|
+
# @since 2.0.0
|
38
|
+
def operation(modifier)
|
39
|
+
{ modifier => { field => value } }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid #:nodoc:
|
3
|
+
module Persistence #:nodoc:
|
4
|
+
module Atomic #:nodoc:
|
5
|
+
|
6
|
+
# This class provides the ability to perform an explicit $pullAll
|
7
|
+
# modification on a specific field.
|
8
|
+
class PullAll < Operation
|
9
|
+
|
10
|
+
# Sends the atomic $pullAll operation to the database.
|
11
|
+
#
|
12
|
+
# @example Persist the new values.
|
13
|
+
# pull_all.persist
|
14
|
+
#
|
15
|
+
# @return [ Object ] The new array value.
|
16
|
+
#
|
17
|
+
# @since 2.0.0
|
18
|
+
def persist
|
19
|
+
if document[field]
|
20
|
+
values = document.send(field)
|
21
|
+
values.delete_if { |val| value.include?(val) }
|
22
|
+
values.tap do
|
23
|
+
document.collection.update(document._selector, operation("$pullAll"), options)
|
24
|
+
document.changes.delete(field.to_s) if document.persisted?
|
25
|
+
end
|
26
|
+
else
|
27
|
+
return nil
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid #:nodoc:
|
3
|
+
module Persistence #:nodoc:
|
4
|
+
module Atomic #:nodoc:
|
5
|
+
|
6
|
+
# This class provides the ability to perform an explicit $push modification
|
7
|
+
# on a specific field.
|
8
|
+
class Push < Operation
|
9
|
+
|
10
|
+
# Sends the atomic $push operation to the database.
|
11
|
+
#
|
12
|
+
# @example Persist the new values.
|
13
|
+
# push.persist
|
14
|
+
#
|
15
|
+
# @return [ Object ] The new array value.
|
16
|
+
#
|
17
|
+
# @since 2.0.0
|
18
|
+
def persist
|
19
|
+
document[field] = [] unless document[field]
|
20
|
+
document.send(field).push(value).tap do |value|
|
21
|
+
document.collection.update(document._selector, operation("$push"), options)
|
22
|
+
document.changes.delete(field.to_s)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/mongoid/railtie.rb
CHANGED
@@ -35,7 +35,7 @@ module Rails #:nodoc:
|
|
35
35
|
# module MyApplication
|
36
36
|
# class Application < Rails::Application
|
37
37
|
# config.mongoid.logger = Logger.new($stdout, :warn)
|
38
|
-
# config.mongoid.
|
38
|
+
# config.mongoid.persist_in_safe_mode = true
|
39
39
|
# end
|
40
40
|
# end
|
41
41
|
config.mongoid = ::Mongoid::Config
|
@@ -124,6 +124,18 @@ module Rails #:nodoc:
|
|
124
124
|
end
|
125
125
|
end
|
126
126
|
end
|
127
|
+
|
128
|
+
# Instantitate any registered observers after Rails initialization and
|
129
|
+
# instantiate them after being reloaded in the development environment
|
130
|
+
initializer "instantiate observers" do
|
131
|
+
config.after_initialize do
|
132
|
+
::Mongoid.instantiate_observers
|
133
|
+
|
134
|
+
ActionDispatch::Callbacks.to_prepare(:mongoid_instantiate_observers) do
|
135
|
+
::Mongoid.instantiate_observers
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
127
139
|
end
|
128
140
|
end
|
129
141
|
end
|
data/lib/mongoid/relations.rb
CHANGED
@@ -10,6 +10,7 @@ require "mongoid/relations/builders"
|
|
10
10
|
require "mongoid/relations/many"
|
11
11
|
require "mongoid/relations/one"
|
12
12
|
require "mongoid/relations/polymorphic"
|
13
|
+
require "mongoid/relations/embedded/atomic"
|
13
14
|
require "mongoid/relations/embedded/in"
|
14
15
|
require "mongoid/relations/embedded/many"
|
15
16
|
require "mongoid/relations/embedded/one"
|
@@ -90,6 +90,20 @@ module Mongoid # :nodoc:
|
|
90
90
|
instance_variable_set("@#{name}", relation)
|
91
91
|
end
|
92
92
|
|
93
|
+
# Replace an existing relation with a new one.
|
94
|
+
#
|
95
|
+
# @example Replace the relation.
|
96
|
+
# document.substitute("addresses", Address.new)
|
97
|
+
#
|
98
|
+
# @param [ String ] name The name of the relation.
|
99
|
+
# @param [ Document ] object The document to replace with.
|
100
|
+
# @options [ Hash ] options The options.
|
101
|
+
#
|
102
|
+
# @since 2.0.0
|
103
|
+
def substitute(name, object, options)
|
104
|
+
set(name, ivar(name).substitute(object, options))
|
105
|
+
end
|
106
|
+
|
93
107
|
module ClassMethods #:nodoc:
|
94
108
|
|
95
109
|
# Defines the getter for the relation. Nothing too special here: just
|
@@ -144,9 +158,13 @@ module Mongoid # :nodoc:
|
|
144
158
|
object, options = args.first, options(args)
|
145
159
|
variable = "@#{name}"
|
146
160
|
if relation_exists?(name) && !object.is_a?(Hash)
|
147
|
-
|
161
|
+
substitute(name, object, options)
|
148
162
|
else
|
149
|
-
|
163
|
+
if metadata.embedded? && object.blank? && send(name)
|
164
|
+
substitute(name, object, options)
|
165
|
+
else
|
166
|
+
build(name, object, metadata, options.merge(:eager => true))
|
167
|
+
end
|
150
168
|
end
|
151
169
|
end
|
152
170
|
end
|
@@ -24,10 +24,16 @@ module Mongoid # :nodoc:
|
|
24
24
|
if over_limit?(attributes)
|
25
25
|
raise Errors::TooManyNestedAttributeRecords.new(existing, options[:limit])
|
26
26
|
end
|
27
|
-
attributes.each
|
27
|
+
attributes.each do |attrs|
|
28
|
+
if attrs.respond_to?(:with_indifferent_access)
|
29
|
+
process(attrs)
|
30
|
+
else
|
31
|
+
process(attrs[1])
|
32
|
+
end
|
33
|
+
end
|
28
34
|
end
|
29
35
|
|
30
|
-
# Create the new builder for nested attributes on one-to-
|
36
|
+
# Create the new builder for nested attributes on one-to-many
|
31
37
|
# relations.
|
32
38
|
#
|
33
39
|
# Example:
|
@@ -44,8 +50,12 @@ module Mongoid # :nodoc:
|
|
44
50
|
#
|
45
51
|
# A new builder.
|
46
52
|
def initialize(metadata, attributes, options = {})
|
47
|
-
|
48
|
-
a
|
53
|
+
if attributes.respond_to?(:with_indifferent_access)
|
54
|
+
@attributes = attributes.with_indifferent_access.sort do |a, b|
|
55
|
+
a[0].to_i <=> b[0].to_i
|
56
|
+
end
|
57
|
+
else
|
58
|
+
@attributes = attributes
|
49
59
|
end
|
50
60
|
@metadata = metadata
|
51
61
|
@options = options
|
@@ -102,8 +112,9 @@ module Mongoid # :nodoc:
|
|
102
112
|
# attrs: The single document attributes to process.
|
103
113
|
def process(attrs)
|
104
114
|
return if reject?(attrs)
|
105
|
-
if attrs[:id]
|
106
|
-
|
115
|
+
if attrs[:id] or attrs['id'] or attrs['_id']
|
116
|
+
id = attrs[:id] || attrs['id'] || attrs['_id']
|
117
|
+
document = existing.find(convert_id(id))
|
107
118
|
destroyable?(attrs) ? document.destroy : document.update_attributes(attrs)
|
108
119
|
else
|
109
120
|
# @todo: Durran: Tell the push not to save the base and call it
|
@@ -16,8 +16,9 @@ module Mongoid # :nodoc:
|
|
16
16
|
# @return [ Array<Document> ] The documents.
|
17
17
|
def build(type = nil)
|
18
18
|
return object unless query?
|
19
|
+
return [] if object.is_a?(Array)
|
19
20
|
key = metadata.foreign_key
|
20
|
-
metadata.klass.
|
21
|
+
metadata.klass.all(:conditions => { key => object })
|
21
22
|
end
|
22
23
|
end
|
23
24
|
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "mongoid/relations/embedded/atomic/operation"
|
3
|
+
require "mongoid/relations/embedded/atomic/pull"
|
4
|
+
require "mongoid/relations/embedded/atomic/push_all"
|
5
|
+
require "mongoid/relations/embedded/atomic/set"
|
6
|
+
require "mongoid/relations/embedded/atomic/unset"
|
7
|
+
|
8
|
+
module Mongoid #:nodoc:
|
9
|
+
module Relations #:nodoc:
|
10
|
+
module Embedded #:nodoc:
|
11
|
+
|
12
|
+
# This module provides the ability for calls to be declared atomic.
|
13
|
+
module Atomic
|
14
|
+
|
15
|
+
MODIFIERS = {
|
16
|
+
:$pull => Pull,
|
17
|
+
:$pushAll => PushAll,
|
18
|
+
:$set => Set,
|
19
|
+
:$unset => Unset
|
20
|
+
}
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
# Executes a block of commands in an atomic fashion. Mongoid will
|
25
|
+
# intercept all database upserts while in this block and combine them
|
26
|
+
# into a single database call. When the block concludes the atomic
|
27
|
+
# update will occur.
|
28
|
+
#
|
29
|
+
# Since the collection is accessed through the class it would not be
|
30
|
+
# thread safe to give it state so we access the atomic updater via the
|
31
|
+
# current thread.
|
32
|
+
#
|
33
|
+
# @note This operation is not safe when attemping to do illegal updates
|
34
|
+
# for different objects or collections, since the updator is not
|
35
|
+
# scoped on the thread. This is meant for Mongoid internal use only
|
36
|
+
# to keep existing design clean.
|
37
|
+
#
|
38
|
+
# @example Atomically $set multiple saves.
|
39
|
+
# atomically(:$set) do
|
40
|
+
# address_one.save!
|
41
|
+
# address_two.save!
|
42
|
+
# end
|
43
|
+
#
|
44
|
+
# @example Atomically $pushAll multiple new docs.
|
45
|
+
# atomically(:$pushAll) do
|
46
|
+
# person.addresses.push([ address_one, address_two ])
|
47
|
+
# end
|
48
|
+
#
|
49
|
+
# @param [ Symbol ] modifier The atomic modifier to perform.
|
50
|
+
# @param [ Proc ] block The block to execute.
|
51
|
+
#
|
52
|
+
# @return [ Object ] The result of the operation.
|
53
|
+
#
|
54
|
+
# @since 2.0.0
|
55
|
+
def atomically(modifier, &block)
|
56
|
+
updater = Thread.current[:mongoid_atomic_update] ||= MODIFIERS[modifier].new
|
57
|
+
count_executions do
|
58
|
+
block.call if block
|
59
|
+
end.tap do
|
60
|
+
if @executions.zero?
|
61
|
+
Thread.current[:mongoid_atomic_update] = nil
|
62
|
+
updater.execute(collection)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# Execute the block, incrementing the executions before the call and
|
68
|
+
# decrementing them after in order to be able to nest blocks within
|
69
|
+
# each other.
|
70
|
+
#
|
71
|
+
# @example Execute and increment.
|
72
|
+
# execute { block.call }
|
73
|
+
#
|
74
|
+
# @param [ Proc ] block The block to call.
|
75
|
+
#
|
76
|
+
# @since 2.0.0
|
77
|
+
def count_executions(&block)
|
78
|
+
@executions ||= 0 and @executions += 1
|
79
|
+
block.call.tap do
|
80
|
+
@executions -=1
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid #:nodoc:
|
3
|
+
module Relations #:nodoc:
|
4
|
+
module Embedded #:nodoc:
|
5
|
+
module Atomic #:nodoc:
|
6
|
+
|
7
|
+
class Operation
|
8
|
+
attr_accessor :documents, :options, :path, :selector
|
9
|
+
|
10
|
+
# Consumes an execution that was supposed to hit the database, but is
|
11
|
+
# now being deferred to later in favor of a single update.
|
12
|
+
#
|
13
|
+
# @example Consume the operation.
|
14
|
+
# set.consume(
|
15
|
+
# { "_id" => BSON::ObjectId.new },
|
16
|
+
# { "$push" => { "addresses" => { "_id" => "street" } } },
|
17
|
+
# { :multi => false, :safe => true }
|
18
|
+
# )
|
19
|
+
#
|
20
|
+
# @param [ Hash ] selector The document selector.
|
21
|
+
# @param [ Hash ] operations The ops to set in the db.
|
22
|
+
# @param [ Hash ] options The persistence options.
|
23
|
+
#
|
24
|
+
# @option options [ true, false ] :multi Persist multiple at once.
|
25
|
+
# @option options [ true, false ] :safe Persist in safe mode.
|
26
|
+
#
|
27
|
+
# @since 2.0.0
|
28
|
+
def consume(selector, operations, options = {})
|
29
|
+
@consumed, @selector, @options = true, selector, options
|
30
|
+
@documents ||= []
|
31
|
+
parse(operations)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Has this operation consumed any executions?
|
35
|
+
#
|
36
|
+
# @example Is this consumed?
|
37
|
+
# unset.consumed?
|
38
|
+
#
|
39
|
+
# @return [ true, false ] If the operation has consumed anything.
|
40
|
+
#
|
41
|
+
# @since 2.0.0
|
42
|
+
def consumed?
|
43
|
+
!!@consumed
|
44
|
+
end
|
45
|
+
|
46
|
+
# Execute the $pushAll operation on the collection.
|
47
|
+
#
|
48
|
+
# @example Execute the operation.
|
49
|
+
# unset.execute(collection)
|
50
|
+
#
|
51
|
+
# @param [ Collection ] collection The root collection.
|
52
|
+
#
|
53
|
+
# @since 2.0.0
|
54
|
+
def execute(collection)
|
55
|
+
if collection && consumed?
|
56
|
+
collection.update(selector, operations, options)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|