Class: DatabaseValidations::DbUniquenessValidator

Inherits:
ActiveRecord::Validations::UniquenessValidator
  • Object
show all
Defined in:
lib/database_validations/lib/validators/db_uniqueness_validator.rb

Constant Summary collapse

DEFAULT_MODE =
:optimized

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ DbUniquenessValidator

Returns a new instance of DbUniquenessValidator.

Parameters:

  • options (Hash)


15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/database_validations/lib/validators/db_uniqueness_validator.rb', line 15

def initialize(options)
  options[:allow_nil] = true
  options[:allow_blank] = false

  if options.key?(:where)
    condition = options[:where]
    options[:conditions] = -> { where(condition) }
  end

  handle_custom_options(options)

  super

  Injector.inject(klass)
  Checkers::DbUniquenessValidator.validate!(self)
end

Instance Attribute Details

#index_nameObject (readonly)

Returns the value of attribute index_name.



5
6
7
# File 'lib/database_validations/lib/validators/db_uniqueness_validator.rb', line 5

def index_name
  @index_name
end

#klassObject (readonly)

Returns the value of attribute klass.



5
6
7
# File 'lib/database_validations/lib/validators/db_uniqueness_validator.rb', line 5

def klass
  @klass
end

#whereObject (readonly)

Returns the value of attribute where.



5
6
7
# File 'lib/database_validations/lib/validators/db_uniqueness_validator.rb', line 5

def where
  @where
end

Class Method Details

.kindSymbol

Used to make 3rd party libraries work correctly

Returns:

  • (Symbol)


10
11
12
# File 'lib/database_validations/lib/validators/db_uniqueness_validator.rb', line 10

def self.kind
  :uniqueness
end

Instance Method Details

#apply_error(instance, attribute) ⇒ Object



40
41
42
43
44
45
# File 'lib/database_validations/lib/validators/db_uniqueness_validator.rb', line 40

def apply_error(instance, attribute)
  error_options = options.except(:case_sensitive, :scope, :conditions)
  error_options[:value] = instance.public_send(attribute)

  instance.errors.add(attribute, :taken, **error_options)
end

#perform_rescue?(validate) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/database_validations/lib/validators/db_uniqueness_validator.rb', line 32

def perform_rescue?(validate)
  (validate != false && @mode != :standard) || @rescue == :always
end

#validate(record) ⇒ Object



36
37
38
# File 'lib/database_validations/lib/validators/db_uniqueness_validator.rb', line 36

def validate(record)
  super if perform_query? || record._database_validations_fallback
end