module ActiveModel::Unvalidate::ClassMethods

Public Instance Methods

inherited(base) click to toggle source

Copies callbacks to subclasses to ensure ancestor validations are not affected by unvalidating.

Calls superclass method
# File lib/active_model/unvalidate.rb, line 11
def inherited(base)
  base._validate_callbacks = _validate_callbacks.dup
  super
end
unvalidate(method) click to toggle source

Removes method-based validation

@param [Symbol] method name of validation method to remove

@return nil

# File lib/active_model/unvalidate.rb, line 68
def unvalidate(method)
  _validate_callbacks.select do |callback|
    callback.raw_filter == method
  end.each do |callback|
    _validate_callbacks.delete(callback)
  end
end
unvalidates(field, validations = nil) click to toggle source

Removes specified validations from existing models for a given field

@param [Symbol] field the field to remove validations from @param [Array<Symbol> | Symbol] validations validations to remove from field

@return nil

# File lib/active_model/unvalidate.rb, line 23
def unvalidates(field, validations = nil)
  return unvalidates_all(field) if validations.nil?

  validations = Array(validations).map do |validation|
    [validation, 'validator'].join('_').classify
  end
  _validators.reject! do |key, validators|
    if field == key
      validators.any? do |validator|
        validations.include?(extract_validator_name(validator))
      end
    end
  end
  _validate_callbacks.select do |callback|
    is_callback_class?(callback) &&
      callback.raw_filter.attributes.include?(field) &&
        validations.include?(extract_validator_name(callback.raw_filter))
  end.each do |callback|
    _validate_callbacks.delete(callback)
  end
end
unvalidates_all(field) click to toggle source

Removes all validations from a given field

@param [Symbol] field field to remove validations from

@return nil

# File lib/active_model/unvalidate.rb, line 51
def unvalidates_all(field)
  _validators.reject! do |key, _|
    key == field
  end
  _validate_callbacks.select do |callback|
    is_callback_class?(callback) && callback.raw_filter.attributes.include?(field)
  end.each do |callback|
    _validate_callbacks.delete(callback)
  end
end

Private Instance Methods

extract_validator_name(validator) click to toggle source
# File lib/active_model/unvalidate.rb, line 78
def extract_validator_name(validator)
  validator.class.to_s.demodulize
end
is_callback_class?(callback) click to toggle source
# File lib/active_model/unvalidate.rb, line 82
def is_callback_class?(callback)
  callback.raw_filter.respond_to?(:attributes)
end