module CMDx::Validators::Exclusion
def call(value, options = {})
def call(value, options = {}) values = options.dig(:exclusion, :in) || options.dig(:exclusion, :within) if values.is_a?(Range) raise_within_validation_error!(values.begin, values.end, options) if values.cover?(value) elsif Array(values).any? { |v| v === value } # rubocop:disable Style/CaseEquality raise_of_validation_error!(values, options) end end
def raise_of_validation_error!(values, options)
def raise_of_validation_error!(values, options) values = values.map(&:inspect).join(", ") message = options.dig(:exclusion, :of_message) || options.dig(:exclusion, :message) message %= { values: } unless message.nil? raise ValidationError, message || I18n.t( "cmdx.validators.exclusion.of", values:, default: "must not be one of: #{values}" ) end
def raise_within_validation_error!(min, max, options)
def raise_within_validation_error!(min, max, options) message = options.dig(:exclusion, :in_message) || options.dig(:exclusion, :within_message) || options.dig(:exclusion, :message) message %= { min:, max: } unless message.nil? raise ValidationError, message || I18n.t( "cmdx.validators.exclusion.within", min:, max:, default: "must not be within #{min} and #{max}" ) end