module ActiveRecord::Locking::Optimistic::ClassMethods

Constants

DEFAULT_LOCKING_COLUMN

Public Instance Methods

locking_column() click to toggle source

The version column used for optimistic locking. Defaults to lock_version.

# File lib/active_record/locking/optimistic.rb, line 156
def locking_column
  reset_locking_column unless defined?(@locking_column)
  @locking_column
end
locking_column=(value) click to toggle source

Set the column to use for optimistic locking. Defaults to lock_version.

# File lib/active_record/locking/optimistic.rb, line 150
def locking_column=(value)
  clear_caches_calculated_from_columns
  @locking_column = value.to_s
end
locking_enabled?() click to toggle source

Returns true if the lock_optimistically flag is set to true (which it is, by default) and the table includes the locking_column column (defaults to lock_version).

# File lib/active_record/locking/optimistic.rb, line 145
def locking_enabled?
  lock_optimistically && columns_hash[locking_column]
end
reset_locking_column() click to toggle source

Reset the column used for optimistic locking back to the lock_version default.

# File lib/active_record/locking/optimistic.rb, line 162
def reset_locking_column
  self.locking_column = DEFAULT_LOCKING_COLUMN
end
update_counters(id, counters) click to toggle source

Make sure the lock version column gets updated when counters are updated.

Calls superclass method
# File lib/active_record/locking/optimistic.rb, line 168
def update_counters(id, counters)
  counters = counters.merge(locking_column => 1) if locking_enabled?
  super
end

Private Instance Methods

inherited(subclass) click to toggle source

We need to apply this decorator here, rather than on module inclusion. The closure created by the matcher would otherwise evaluate for `ActiveRecord::Base`, not the sub class being decorated. As such, changes to `lock_optimistically`, or `locking_column` would not be picked up.

Calls superclass method
# File lib/active_record/locking/optimistic.rb, line 179
def inherited(subclass)
  subclass.class_eval do
    is_lock_column = ->(name, _) { lock_optimistically && name == locking_column }
    decorate_matching_attribute_types(is_lock_column, :_optimistic_locking) do |type|
      LockingType.new(type)
    end
  end
  super
end