Sha256: 812500398169bb6a18468b5ac1c32800eb4a24a53b8a30973d7fd3062bcc7bc2
Contents?: true
Size: 1.38 KB
Versions: 3
Compression:
Stored size: 1.38 KB
Contents
require 'mega/dynamod' require 'glue/on_included' module Glue # This error is thrown when you the object you are trynig # to update is allready updated by another thread. class StaleObjectError < StandardError end # Include this module into entity classes to provide optimistic # locking suport. For more information on optimistic locking # please consult: # # http://c2.com/cgi/wiki?OptimisticLocking # http://en.wikipedia.org/wiki/Optimistic_concurrency_control module Locking property :lock_version, Fixnum, :default => 0 pre "@lock_version = 0", :on => :og_insert on_included %{ base.module_eval do def self.enchant self.send :alias_method, :update_without_lock, :update self.send :alias_method, :update, :update_with_lock self.send :alias_method, :save_without_lock, :save self.send :alias_method, :save, :save_with_lock end end } def update_with_lock lock = @lock_version @lock_version += 1 unless update_without_lock(:condition => "lock_version=#{lock}") == 1 raise(StaleObjectError, 'Attempted to update a stale object') end end def save_with_lock lock = @lock_version @lock_version += 1 unless save_without_lock(:condition => "lock_version=#{lock}") == 1 raise(StaleObjectError, 'Attempted to update a stale object') end end end end # * George Moschovitis <gm@navel.gr>
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
og-0.25.0 | lib/glue/optimistic_locking.rb |
og-0.26.0 | lib/glue/optimistic_locking.rb |
og-0.27.0 | lib/glue/optimistic_locking.rb |