Module: Sequel::Plugins::OptimisticLocking
- Defined in:
- lib/sequel/plugins/optimistic_locking.rb
Overview
This plugin implements a simple database-independent locking mechanism to ensure that concurrent updates do not override changes. This is best implemented by a code example:
class Person < Sequel::Model
plugin :optimistic_locking
end
p1 = Person[1]
p2 = Person[1]
p1.update(:name=>'Jim') # works
p2.update(:name=>'Bob') # raises Sequel::Plugins::OptimisticLocking::Error
In order for this plugin to work, you need to make sure that the database table has a lock_version column (or other column you name via the lock_column class level accessor) that defaults to 0.
This plugin relies on the instance_filters plugin.
Defined Under Namespace
Modules: ClassMethods, InstanceMethods
Constant Summary collapse
- Error =
Exception class raised when trying to update or destroy a stale object.
InstanceFilters::Error
Class Method Summary collapse
-
.apply(model, opts = {}) ⇒ Object
Load the instance_filters plugin into the model.
-
.configure(model, opts = {}) ⇒ Object
Set the lock_column to the :lock_column option, or :lock_version if that option is not given.
Class Method Details
.apply(model, opts = {}) ⇒ Object
Load the instance_filters plugin into the model.
27 28 29 |
# File 'lib/sequel/plugins/optimistic_locking.rb', line 27 def self.apply(model, opts={}) model.plugin :instance_filters end |
.configure(model, opts = {}) ⇒ Object
Set the lock_column to the :lock_column option, or :lock_version if that option is not given.
33 34 35 |
# File 'lib/sequel/plugins/optimistic_locking.rb', line 33 def self.configure(model, opts={}) model.lock_column = opts[:lock_column] || :lock_version end |