AyuntamientoMadrid/participacion

View on GitHub
app/models/concerns/skip_validation.rb

Summary

Maintainability
A
0 mins
Test Coverage
module SkipValidation
  extend ActiveSupport::Concern

  module ClassMethods
    def skip_validation(field, validator)
      validator_class = if validator.is_a?(Class)
                          validator
                        else
                          "ActiveModel::Validations::#{validator.to_s.camelize}Validator".constantize
                        end

      _validators[field].reject! { |existing_validator| existing_validator.is_a?(validator_class) }

      _validate_callbacks.each do |callback|
        if callback.filter.is_a?(validator_class)
          callback.filter.instance_variable_set(:@attributes, callback.filter.attributes - [field])
        end
      end
    end

    def skip_translation_validation(field, validator)
      skip_validation(field, validator)
      translation_class.skip_validation(field, validator)
    end
  end
end