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
- DEFAULT_OPTIONS =
{ allow_nil: true, case_sensitive: true, allow_blank: false }.freeze
Instance Attribute Summary collapse
-
#field ⇒ Object
readonly
Returns the value of attribute field.
Instance Method Summary collapse
- #case_sensitive ⇒ Boolean|nil
- #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.
8 9 10 11 12 13 14 15 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 8 def initialize(field, , adapter) @field = field @options = @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.
6 7 8 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 6 def field @field end |
Instance Method Details
#case_sensitive ⇒ Boolean|nil
71 72 73 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 71 def case_sensitive @case_sensitive ||= [:case_sensitive] end |
#columns ⇒ Array<String>
46 47 48 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 46 def columns @columns ||= Helpers.unify_columns(field, scope) end |
#handle_unique_error(instance) ⇒ Object
17 18 19 20 21 22 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 17 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
35 36 37 38 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 35 def if_and_unless_pass?(instance) ([:if].nil? || condition_passes?([:if], instance)) && ([:unless].nil? || !condition_passes?([:unless], instance)) end |
#index_name ⇒ String|Symbol|nil
66 67 68 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 66 def index_name @index_name ||= [:index_name] end |
#key ⇒ String
41 42 43 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 41 def key @key ||= index_name ? Helpers.generate_key_for_uniqueness_index(index_name) : Helpers.generate_key_for_uniqueness(columns) end |
#message ⇒ String|nil
56 57 58 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 56 def @message ||= [:message] end |
#scope ⇒ Array<String|Symbol>
61 62 63 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 61 def scope @scope ||= Array.wrap([:scope]) end |
#validates_uniqueness_options ⇒ Hash<Symbol, Object>
25 26 27 28 29 30 31 32 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 25 def where_clause_str = where_clause DEFAULT_OPTIONS .merge() .except(*CUSTOM_OPTIONS) .tap { |opts| opts[:conditions] = -> { where(where_clause_str) } if where_clause } end |
#where_clause ⇒ String|nil
51 52 53 |
# File 'lib/database_validations/validations/uniqueness_options.rb', line 51 def where_clause @where_clause ||= [:where] end |