class DatabaseValidations::Checkers::DbUniquenessValidator
Attributes
validator[R]
Public Class Methods
new(validator)
click to toggle source
@param [DatabaseValidations::DbUniquenessValidator]
# File lib/database_validations/lib/checkers/db_uniqueness_validator.rb, line 12 def initialize(validator) @validator = validator end
validate!(validator)
click to toggle source
@param [DatabaseValidations::DbUniquenessValidator]
# File lib/database_validations/lib/checkers/db_uniqueness_validator.rb, line 7 def self.validate!(validator) new(validator).validate! end
Public Instance Methods
validate!()
click to toggle source
# File lib/database_validations/lib/checkers/db_uniqueness_validator.rb, line 16 def validate! validate_index_usage! validate_indexes! unless ENV['SKIP_DB_UNIQUENESS_VALIDATOR_INDEX_CHECK'] end
Private Instance Methods
valid_index?(columns, index)
click to toggle source
# File lib/database_validations/lib/checkers/db_uniqueness_validator.rb, line 24 def valid_index?(columns, index) index_columns_size = index.columns.is_a?(Array) ? index.columns.size : (index.columns.count(',') + 1) (columns.size == index_columns_size) && (validator.where.nil? == index.where.nil?) end
validate_index_usage!()
click to toggle source
# File lib/database_validations/lib/checkers/db_uniqueness_validator.rb, line 30 def validate_index_usage! return unless validator.index_name.present? && validator.attributes.size > 1 raise ArgumentError, "When index_name is provided validator can have only one attribute. See #{validator.inspect}" end
validate_indexes!()
click to toggle source
# File lib/database_validations/lib/checkers/db_uniqueness_validator.rb, line 36 def validate_indexes! # rubocop:disable Metrics/AbcSize adapter = Adapters::BaseAdapter.new(validator.klass) validator.attributes.map do |attribute| columns = KeyGenerator.unify_columns(attribute, validator.options[:scope]) index = validator.index_name ? adapter.find_unique_index_by_name(validator.index_name.to_s) : adapter.find_unique_index(columns, validator.where) # rubocop:disable Metrics/LineLength raise Errors::IndexNotFound.new(columns, validator.where, validator.index_name, adapter.unique_indexes, adapter.table_name) unless index && valid_index?(columns, index) # rubocop:disable Metrics/LineLength end end