Class: DatabaseValidations::UniquenessOptions

Inherits:
Object
  • Object
show all
Defined in:
lib/database_validations/validations/uniqueness_options.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(field, options, adapter) ⇒ UniquenessOptions

Returns a new instance of UniquenessOptions.



5
6
7
8
9
10
11
12
# File 'lib/database_validations/validations/uniqueness_options.rb', line 5

def initialize(field, options, adapter)
  @field = field
  @options = options
  @adapter = adapter

  raise_if_unsupported_options!
  raise_if_index_missed! unless ENV['SKIP_DB_UNIQUENESS_VALIDATOR_INDEX_CHECK']
end

Instance Attribute Details

#fieldObject (readonly)

Returns the value of attribute field.



3
4
5
# File 'lib/database_validations/validations/uniqueness_options.rb', line 3

def field
  @field
end

Instance Method Details

#columnsObject



38
39
40
# File 'lib/database_validations/validations/uniqueness_options.rb', line 38

def columns
  @columns ||= Helpers.unify_columns(field, scope)
end

#handle_unique_error(instance) ⇒ Object



14
15
16
17
18
19
# File 'lib/database_validations/validations/uniqueness_options.rb', line 14

def handle_unique_error(instance)
  error_options = options.except(:case_sensitive, :scope, :conditions, :attributes, :where)
  error_options[:value] = instance.public_send(options[:attributes])

  instance.errors.add(options[:attributes], :taken, error_options)
end

#if_and_unless_pass?(instance) ⇒ Boolean

Returns:

  • (Boolean)


29
30
31
32
# File 'lib/database_validations/validations/uniqueness_options.rb', line 29

def if_and_unless_pass?(instance)
  (options[:if].nil? || condition_passes?(options[:if], instance)) &&
    (options[:unless].nil? || !condition_passes?(options[:unless], instance))
end

#keyObject



34
35
36
# File 'lib/database_validations/validations/uniqueness_options.rb', line 34

def key
  @key ||= Helpers.generate_key(columns)
end

#messageObject



46
47
48
# File 'lib/database_validations/validations/uniqueness_options.rb', line 46

def message
  @message ||= options[:message]
end

#scopeObject



50
51
52
# File 'lib/database_validations/validations/uniqueness_options.rb', line 50

def scope
  @scope ||= Array.wrap(options[:scope])
end

#validates_uniqueness_optionsObject



21
22
23
24
25
26
27
# File 'lib/database_validations/validations/uniqueness_options.rb', line 21

def validates_uniqueness_options
  where_clause_str = where_clause

  options.except(:where)
    .merge(allow_nil: true, case_sensitive: true, allow_blank: false)
    .tap { |opts| opts[:conditions] = -> { where(where_clause_str) } if where_clause }
end

#where_clauseObject



42
43
44
# File 'lib/database_validations/validations/uniqueness_options.rb', line 42

def where_clause
  @where_clause ||= options[:where]
end