Sha256: 5911a7e2dcfa3a6a1b12c20e110f73d9b8169a5606730b6b3f29992742072c74

Contents?: true

Size: 1.47 KB

Versions: 3

Compression:

Stored size: 1.47 KB

Contents

module Mongoid
  module Locker
    # Normalizes queries between Mongoid 2 and 3.
    module Wrapper
      IS_OLD_MONGOID = Mongoid::VERSION.start_with? '2.'

      # Update the document for the provided Class matching the provided query with the provided setter.
      #
      # @param [Class] The model class
      # @param [Hash] The Mongoid query
      # @param [Hash] The Mongoid setter
      # @return [Boolean] true if the document was successfully updated, false otherwise
      def self.update(klass, query, setter)
        error_obj =
          if IS_OLD_MONGOID
            klass.collection.update(query, setter, safe: true)
          else
            klass.with(safe: true).collection.find(query).update(setter)
          end

        error_obj['n'] == 1
      end

      # Determine whether the provided document is locked in the database or not.
      #
      # @param [Class] The model instance
      # @return [Time] The timestamp of when the document is locked until, nil if not locked.
      def self.locked_until(doc)
        existing_query = {
          _id: doc.id,
          locked_until: { '$exists' => true }
        }

        if IS_OLD_MONGOID
          existing = doc.class.collection.find_one(existing_query, fields: { locked_until: 1 })
          existing ? existing['locked_until'] : nil
        else
          existing = doc.class.where(existing_query).limit(1).only(:locked_until).first
          existing ? existing.locked_until : nil
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
mongoid-locker-0.3.2 lib/mongoid/locker/wrapper.rb
mongoid-locker-0.3.1 lib/mongoid/locker/wrapper.rb
mongoid-locker-0.3.0 lib/mongoid/locker/wrapper.rb