module NoBrainer::Document::Validation::Uniqueness
Attributes
locked_keys_for_uniqueness[RW]
Public Instance Methods
_lock_for_uniqueness_once(key)
click to toggle source
# File lib/no_brainer/document/validation/uniqueness.rb, line 14 def _lock_for_uniqueness_once(key) @locked_keys_for_uniqueness ||= {} @locked_keys_for_uniqueness[key] ||= NoBrainer::Config.distributed_lock_class.new(key).tap(&:lock) end
lock_unique_fields()
click to toggle source
# File lib/no_brainer/document/validation/uniqueness.rb, line 24 def lock_unique_fields self.class.unique_validators .flat_map { |validator| validator.attributes.map { |attr| [attr, validator] } } .select { |f, validator| validator.should_validate_field?(self, f) } .map { |f, validator| [f, *validator.scope].map { |k| [k, _read_attribute(k)] } } .map { |params| self.class._uniqueness_key_name_from_params(params) } .sort.each { |key| _lock_for_uniqueness_once(key) } end
save?(options={})
click to toggle source
XXX we don’t use read_attribute_for_validation, which goes through the user getters, but read internal attributes instead. It makes more sense.
Calls superclass method
# File lib/no_brainer/document/validation/uniqueness.rb, line 7 def save?(options={}) lock_unique_fields super ensure unlock_unique_fields end
unlock_unique_fields()
click to toggle source
# File lib/no_brainer/document/validation/uniqueness.rb, line 19 def unlock_unique_fields (@locked_keys_for_uniqueness || {}).values.each(&:unlock) @locked_keys_for_uniqueness = {} end