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