Sha256: f5764c435885c10913e36ed631d6d616ea1a83ebb01d743a6fe379185dc218c6

Contents?: true

Size: 2 KB

Versions: 22

Compression:

Stored size: 2 KB

Contents

# encoding: utf-8
module Mongoid
  module Contextual
    class FindAndModify
      include Command

      # @attribute [r] criteria The criteria for the context.
      # @attribute [r] options The command options.
      # @attribute [r] update The updates.
      # @attribute [r] query The Moped query.
      attr_reader :criteria, :options, :update, :query

      # Initialize the find and modify command, used for MongoDB's
      # $findAndModify.
      #
      # @example Initialize the command.
      #   FindAndModify.new(criteria, { "$set" => { likes: 1 }})
      #
      # @param [ Criteria ] criteria The criteria.
      # @param [ Hash ] update The updates.
      # @param [ Hash ] options The command options.
      #
      # @option options [ true, false ] :new Return the updated document.
      # @option options [ true, false ] :remove Delete the first document.
      # @option options [ true, false ] :upsert Create the document if it doesn't exist.
      #
      # @since 3.0.0
      def initialize(collection, criteria, update, options = {})
        @collection, @criteria, @options, @update =
          collection, criteria, options, update.mongoize
        @query = collection.find(criteria.selector)
        apply_criteria_options
      end

      # Get the result of the $findAndModify.
      #
      # @example Get the result.
      #   find_and_modify.result
      #
      # @return [ Hash ] The result of the command.
      #
      # @since 3.0.0
      def result
        query.modify(update, options)
      end

      private

      # Apply criteria specific options - query, sort, fields.
      #
      # @api private
      #
      # @example Apply the criteria options
      #   find_and_modify.apply_criteria_options
      #
      # @return [ nil ] Nothing.
      #
      # @since 3.0.0
      def apply_criteria_options
        if spec = criteria.options[:sort]
          query.sort(spec)
        end
        if spec = criteria.options[:fields]
          query.select(spec)
        end
      end
    end
  end
end

Version data entries

22 entries across 22 versions & 5 rubygems

Version Path
ish_lib_manager-0.0.1 test/dummy/vendor/bundle/ruby/2.3.0/gems/mongoid-4.0.2/lib/mongoid/contextual/find_and_modify.rb
mongoid-3.1.7 lib/mongoid/contextual/find_and_modify.rb
mongoid-4.0.2 lib/mongoid/contextual/find_and_modify.rb
mongoid-4.0.1 lib/mongoid/contextual/find_and_modify.rb
mongoid-4.0.0 lib/mongoid/contextual/find_and_modify.rb
mongoid-4.0.0.rc2 lib/mongoid/contextual/find_and_modify.rb
mongoid-4.0.0.rc1 lib/mongoid/contextual/find_and_modify.rb
mongoid-4.0.0.beta2 lib/mongoid/contextual/find_and_modify.rb
mongoid-4.0.0.beta1 lib/mongoid/contextual/find_and_modify.rb
mongoid-4.0.0.alpha2 lib/mongoid/contextual/find_and_modify.rb
mongoid-4.0.0.alpha1 lib/mongoid/contextual/find_and_modify.rb
mongoid-3.1.6 lib/mongoid/contextual/find_and_modify.rb
sepastian-mongoid-rails4-4.0.1.alpha lib/mongoid/contextual/find_and_modify.rb
sepastian-mongoid-rails4-4.0.0.alpha lib/mongoid/contextual/find_and_modify.rb
mongoid-3.1.5 lib/mongoid/contextual/find_and_modify.rb
mongoid_heroku_stable-4.0.0 lib/mongoid/contextual/find_and_modify.rb
mongoid_rails4-4.0.0 lib/mongoid/contextual/find_and_modify.rb
mongoid-3.1.4 lib/mongoid/contextual/find_and_modify.rb
mongoid-3.1.3 lib/mongoid/contextual/find_and_modify.rb
mongoid-3.1.2 lib/mongoid/contextual/find_and_modify.rb