Class: DatabaseValidations::UniquenessOptions

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

Constant Summary collapse

CUSTOM_OPTIONS =
%i[where index_name].freeze
DEFAULT_OPTIONS =
{ allow_nil: true, case_sensitive: true, allow_blank: false }.freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(field, options, adapter) ⇒ UniquenessOptions

Returns a new instance of UniquenessOptions.



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

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

  raise_if_unsupported_options!

  return if ENV['SKIP_DB_UNIQUENESS_VALIDATOR_INDEX_CHECK']

  index = responsible_index
  raise_if_index_missed!(index)

  @calculated_index_name = index.name
end

Instance Attribute Details

#calculated_index_nameObject (readonly)

Returns the value of attribute calculated_index_name.



14
15
16
# File 'lib/database_validations/lib/validates_db_uniqueness_of/uniqueness_options.rb', line 14

def calculated_index_name
  @calculated_index_name
end

#fieldObject (readonly)

Returns the value of attribute field.



14
15
16
# File 'lib/database_validations/lib/validates_db_uniqueness_of/uniqueness_options.rb', line 14

def field
  @field
end

Class Method Details

.validator_options(attributes, options) ⇒ Object



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

def self.validator_options(attributes, options)
  DEFAULT_OPTIONS
    .merge(attributes: attributes)
    .merge(options)
    .except(*CUSTOM_OPTIONS)
    .tap { |opts| opts[:conditions] = -> { where(options[:where]) } if options[:where] }
end

Instance Method Details

#case_sensitiveBoolean|nil

Returns:

  • (Boolean|nil)


74
75
76
# File 'lib/database_validations/lib/validates_db_uniqueness_of/uniqueness_options.rb', line 74

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

#column_keyString

Returns:

  • (String)


44
45
46
# File 'lib/database_validations/lib/validates_db_uniqueness_of/uniqueness_options.rb', line 44

def column_key
  @column_key ||= Helpers.generate_key_for_uniqueness(columns)
end

#columnsArray<String>

Returns:

  • (Array<String>)


49
50
51
# File 'lib/database_validations/lib/validates_db_uniqueness_of/uniqueness_options.rb', line 49

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

#handle_unique_error(instance) ⇒ Object



31
32
33
34
35
36
# File 'lib/database_validations/lib/validates_db_uniqueness_of/uniqueness_options.rb', line 31

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

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

#index_keyString

Returns:

  • (String)


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

def index_key
  @index_key ||= Helpers.generate_key_for_uniqueness_index(index_name || calculated_index_name)
end

#index_nameString|Symbol|nil

Returns:

  • (String|Symbol|nil)


69
70
71
# File 'lib/database_validations/lib/validates_db_uniqueness_of/uniqueness_options.rb', line 69

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

#messageString|nil

Returns:

  • (String|nil)


59
60
61
# File 'lib/database_validations/lib/validates_db_uniqueness_of/uniqueness_options.rb', line 59

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

#scopeArray<String|Symbol>

Returns:

  • (Array<String|Symbol>)


64
65
66
# File 'lib/database_validations/lib/validates_db_uniqueness_of/uniqueness_options.rb', line 64

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

#where_clauseString|nil

Returns:

  • (String|nil)


54
55
56
# File 'lib/database_validations/lib/validates_db_uniqueness_of/uniqueness_options.rb', line 54

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