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 142 def locking_column @locking_column = DEFAULT_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 136 def locking_column=(value) reload_schema_from_cache @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 131 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 148 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 154 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 165 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