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 p2 = Person 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.
Classes and Modules
Exception class raised when trying to update or destroy a stale object.
Public Class methods
Load the instance_filters plugin into the model.
# File lib/sequel/plugins/optimistic_locking.rb, line 26 def self.apply(model, opts=OPTS) model.plugin :instance_filters end
Set the lock_column to the :lock_column option, or :lock_version if that option is not given.
# File lib/sequel/plugins/optimistic_locking.rb, line 32 def self.configure(model, opts=OPTS) model.lock_column = opts[:lock_column] || :lock_version end