This is the included module for all atomic operation objects.
Initialize the new pullAll operation.
@example Create a new pullAll operation.
PullAll.new(document, :aliases, [ "Bond" ])
@param [ Document ] document The document to pullAll onto. @param [ Symbol ] field The name of the array field. @param [ Object ] value The value to pullAll. @param [ Hash ] options The persistence options.
@since 2.0.0
# File lib/mongoid/persistence/atomic/operation.rb, line 34 def initialize(document, fields, value, options = {}) @document, @value = document, value @options = options @fields = Array.wrap(fields).collect do |field| document.database_field_name(field.to_s) end self.class.send(:define_method, :field) do @fields.first end if @fields.length == 1 end
Get the collection to be used for persistence.
@example Get the collection.
operation.collection
@return [ Collection ] The root collection.
@since 2.1.0
# File lib/mongoid/persistence/atomic/operation.rb, line 19 def collection document._root.collection end
Get the atomic operation to perform.
@example Get the operation.
inc.operation
@param [ String ] modifier The modifier to use.
@return [ Hash ] The atomic operation for the field and addition.
@since 2.0.0
# File lib/mongoid/persistence/atomic/operation.rb, line 58 def operation(modifier) hash = Hash[fields.collect do |field| [path(field), cast_value] end] { modifier => hash } end
Get the path to the field that is getting atomically updated.
@example Get the path.
operation.path
@return [ String, Symbol ] The path to the field.
@since 2.1.0
# File lib/mongoid/persistence/atomic/operation.rb, line 73 def path(field = field) position = document.atomic_position position.blank? ? field : "#{position}.#{field}" end
All atomic operations use this with a block to ensure saftey options clear out after the execution.
@example Prepare the operation.
prepare do collection.update end
@return [ Object ] The yielded value.
@since 2.1.0
# File lib/mongoid/persistence/atomic/operation.rb, line 89 def prepare yield(document) end