Sha256: 512e3a1161c34406fb839af9b5bbe52519056bf5dbba79ff39e2d691a1e143d9

Contents?: true

Size: 1.22 KB

Versions: 14

Compression:

Stored size: 1.22 KB

Contents

module MongoModel
  module DocumentExtensions
    module OptimisticLocking
      extend ActiveSupport::Concern
      
      module ClassMethods
        def locking_enabled?
          properties.include?(:_lock_version)
        end
        
        def lock_optimistically=(value)
          if value == true
            property :_lock_version, Integer, :default => 0, :internal => true, :protected => true
            before_save :increment_lock_version, :if => :locking_enabled?
          else
            properties.delete(:_lock_version)
          end
        end
      end
      
      def locking_enabled?
        self.class.locking_enabled?
      end
    
    private
      def increment_lock_version
        self._lock_version += 1
      end
      
      def save_to_collection
        if locking_enabled? && _lock_version > 1
          begin
            collection.update({ '_id' => id, '_lock_version' => _lock_version-1 }, to_mongo)
            success = database.get_last_error['updatedExisting']
            
            self._lock_version -= 1 unless success
            
            success
          rescue Mongo::OperationFailure => e
            false
          end
        else
          super
        end
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
mongomodel-0.2.20 lib/mongomodel/document/optimistic_locking.rb
mongomodel-0.2.19 lib/mongomodel/document/optimistic_locking.rb
mongomodel-0.2.18 lib/mongomodel/document/optimistic_locking.rb
mongomodel-0.2.17 lib/mongomodel/document/optimistic_locking.rb
mongomodel-0.2.16 lib/mongomodel/document/optimistic_locking.rb
mongomodel-0.2.15 lib/mongomodel/document/optimistic_locking.rb
mongomodel-0.2.14 lib/mongomodel/document/optimistic_locking.rb
mongomodel-0.2.13 lib/mongomodel/document/optimistic_locking.rb
mongomodel-0.2.12 lib/mongomodel/document/optimistic_locking.rb
mongomodel-0.2.11 lib/mongomodel/document/optimistic_locking.rb
mongomodel-0.2.10 lib/mongomodel/document/optimistic_locking.rb
mongomodel-0.2.9 lib/mongomodel/document/optimistic_locking.rb
mongomodel-0.2.8 lib/mongomodel/document/optimistic_locking.rb
mongomodel-0.2.7 lib/mongomodel/document/optimistic_locking.rb