Class: DatabaseValidations::UniquenessOptions
- Inherits:
-
Object
- Object
- DatabaseValidations::UniquenessOptions
- Defined in:
- lib/database_validations/validations/uniqueness_options.rb
Constant Summary collapse
- CUSTOM_OPTIONS =
i[where index_name].freeze
Instance Attribute Summary collapse
-
#field ⇒ Object
readonly
Returns the value of attribute field.
Instance Method Summary collapse
- #columns ⇒ Array<String>
- #handle_unique_error(instance) ⇒ Object
- #if_and_unless_pass?(instance) ⇒ Boolean
- #index_name ⇒ String|Symbol|nil
-
#initialize(field, options, adapter) ⇒ UniquenessOptions
constructor
A new instance of UniquenessOptions.
- #key ⇒ String
- #message ⇒ String|nil
- #scope ⇒ Array<String|Symbol>
- #validates_uniqueness_options ⇒ Hash<Symbol, Object>
- #where_clause ⇒ String|nil
Constructor Details
#initialize(field, options, adapter) ⇒ UniquenessOptions
Returns a new instance of UniquenessOptions.
7 8 9 10 11 12 13 14 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 7 def initialize(field, , adapter) @field = field = @adapter = adapter raise_if_index_missed! unless ENV['SKIP_DB_UNIQUENESS_VALIDATOR_INDEX_CHECK'] end |
Instance Attribute Details
#field ⇒ Object (readonly)
Returns the value of attribute field.
5 6 7 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 5 def field @field end |
Instance Method Details
#columns ⇒ Array<String>
44 45 46 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 44 def columns @columns ||= Helpers.unify_columns(field, scope) end |
#handle_unique_error(instance) ⇒ Object
16 17 18 19 20 21 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 16 def handle_unique_error(instance) = .except(:case_sensitive, :scope, :conditions, :attributes, *CUSTOM_OPTIONS) [:value] = instance.public_send([:attributes]) instance.errors.add([:attributes], :taken, ) end |
#if_and_unless_pass?(instance) ⇒ Boolean
33 34 35 36 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 33 def if_and_unless_pass?(instance) ([:if].nil? || condition_passes?([:if], instance)) && ([:unless].nil? || !condition_passes?([:unless], instance)) end |
#index_name ⇒ String|Symbol|nil
64 65 66 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 64 def index_name @index_name ||= [:index_name] end |
#key ⇒ String
39 40 41 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 39 def key @key ||= index_name ? index_name.to_s : Helpers.generate_key(columns) end |
#message ⇒ String|nil
54 55 56 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 54 def ||= [:message] end |
#scope ⇒ Array<String|Symbol>
59 60 61 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 59 def scope @scope ||= Array.wrap([:scope]) end |
#validates_uniqueness_options ⇒ Hash<Symbol, Object>
24 25 26 27 28 29 30 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 24 def where_clause_str = where_clause .except(*CUSTOM_OPTIONS) .merge(allow_nil: true, case_sensitive: true, allow_blank: false) .tap { |opts| opts[:conditions] = -> { where(where_clause_str) } if where_clause } end |
#where_clause ⇒ String|nil
49 50 51 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 49 def where_clause @where_clause ||= [:where] end |