Class: DatabaseValidations::UniquenessOptions

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

Instance Method Summary collapse

Constructor Details

#initialize(field, options, adapter) ⇒ UniquenessOptions

Returns a new instance of UniquenessOptions.



3
4
5
6
7
8
9
10
# File 'lib/database_validations/uniqueness_options.rb', line 3

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 Method Details

#columnsObject



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

def columns
  @columns ||= Helpers.unify_columns(field, Array.wrap(options[:scope]))
end

#handle_unique_error(instance) ⇒ Object



12
13
14
15
16
17
# File 'lib/database_validations/uniqueness_options.rb', line 12

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)


27
28
29
30
# File 'lib/database_validations/uniqueness_options.rb', line 27

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

#keyObject



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

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

#validates_uniqueness_optionsObject



19
20
21
22
23
24
25
# File 'lib/database_validations/uniqueness_options.rb', line 19

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



40
41
42
# File 'lib/database_validations/uniqueness_options.rb', line 40

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