Sha256: 8895c27139f3a02815ad165b68d9168296d41f6798bcf5ef373cd596a0ef2f9b
Contents?: true
Size: 1.77 KB
Versions: 2
Compression:
Stored size: 1.77 KB
Contents
module DataMapper module Lock module Optimistic ## # Validate _model_'s lock_version before attempting # to save or destroy. def self.included model model.extend ClassMethods model.before :destroy, :validate_lock_version model.before :save, :validate_lock_version model.before :save, :increment_lock_version end ## # Validate the lock version. # # * Lets new records passed # * Lets un-altered records passed # * Lets the record pass unless the lock_version has been changed # # === Raises # # DataMapper::Lock::StaleRecordError # def validate_lock_version if !new? && dirty? if lock_version_altered? raise DataMapper::Lock::StaleRecordError.new(self, @latest_record) end end end ## # Check if the lock_version has been altered and # return the latest record. def lock_version_altered? @latest_record = self.class.get original_attributes[:id] || id @latest_record.lock_version != lock_version end ## # Increment the lock_version. def increment_lock_version self.lock_version += 1 end module ClassMethods ## # Provide optimistic locking support. # # This method adds a property named :lock_version # which is used to track alterations made, preventing # multi-thread/process rece conditions while updating or # destroying records. def lock_optimistic options = {} property :lock_version, Integer, :nullable => true, :default => 0 end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
dm-lock-1.0.0 | lib/dm-lock/optimistic.rb |
dm-lock-0.0.1 | lib/dm-lock/optimistic.rb |