module ParamsValidator::Filter

Public Class Methods

sanitize_params(params, definition) click to toggle source
# File lib/params_validator/filter.rb, line 5
def self.sanitize_params(params, definition)
  errors = {}
  definition.each do |field, validation_definition|
    errors = validate_field(field, params, validation_definition, errors)

    validation_definition.reject {|k,v| reserved_keys.include?(k) }.each do |nested_field, nested_validation_definition|
      sanitize_params(params[field.to_s], { nested_field => nested_validation_definition })
    end
  end
  raise InvalidParamsException.new(errors) unless errors.empty?
  params
end

Private Class Methods

reserved_keys() click to toggle source
# File lib/params_validator/filter.rb, line 20
def self.reserved_keys
  @reserved_keys ||= [:_default, :_whitelist, :_with].to_set
end
validate_field(field, params, validation_definition, errors) click to toggle source
# File lib/params_validator/filter.rb, line 24
def self.validate_field(field, params, validation_definition, errors)
  validators = validation_definition[:_with]
  return errors unless validators
  validators.each do |validator_name|
    camelized_validator_name = self.camelize(validator_name)
    begin
      validator = ParamsValidator::Validator.const_get(camelized_validator_name)
      validator = validator.new(validation_definition)
      value = params.is_a?(Hash) ? params[field.to_s] : nil
      unless validator.valid?(value)
        if validator.respond_to?(:default?) && validator.default?
          params[field] = validator.default
        else
          errors[field] = validator.error_message
        end
      end
    rescue NameError
      raise InvalidValidatorException.new(validator_name)
    end
  end
  errors
end