Module: ActiveModel::Unvalidate::ClassMethods

Defined in:
lib/active_model/unvalidate.rb

Instance Method Summary collapse

Instance Method Details

#inherited(base) ⇒ Object

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



11
12
13
14
# File 'lib/active_model/unvalidate.rb', line 11

def inherited(base)
  base._validate_callbacks = _validate_callbacks.dup
  super
end

#unvalidate(method) ⇒ Object

Removes method-based validation

Parameters:

  • method (Symbol)

    name of validation method to remove

Returns:

  • nil



68
69
70
71
72
73
74
# 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) ⇒ Object

Removes specified validations from existing models for a given field

Parameters:

  • field (Symbol)

    the field to remove validations from

  • validations (Array<Symbol> | Symbol) (defaults to: nil)

    validations to remove from field

Returns:

  • nil



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 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) ⇒ Object

Removes all validations from a given field

Parameters:

  • field (Symbol)

    field to remove validations from

Returns:

  • nil



51
52
53
54
55
56
57
58
59
60
# 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