module RequestParamsValidation::Params::Validators::Type

Public Instance Methods

default_invalid_type_message(type) click to toggle source
# File lib/request_params_validation/params/validators/type.rb, line 33
def default_invalid_type_message(type)
  type = :object if type == Params::HASH_TYPE

  message = if param.element_of_array?
              "All elements of the array should be a valid #{type}"
            else
              "Value should be a valid #{type}"
            end

  if [Params::DATE_TYPE, Params::DATETIME_TYPE].include?(type)
    format = param.format.try(:strptime) || RequestParamsValidation.formats.send(type)

    if format
      message = if param.format.try(:message)
                  param.format.message
                else
                  "#{message} with the format #{format}"
                end
    end
  end

  message
end
validate_type!() click to toggle source
# File lib/request_params_validation/params/validators/type.rb, line 10
def validate_type!
  type = param.type

  method_name = "valid_#{type}?"

  unless self.respond_to?(method_name)
    raise UnsupportedTypeError.new(param_key: param.key, param_type: type)
  end

  valid = if [Params::DATE_TYPE, Params::DATETIME_TYPE].include?(type)
            self.send(method_name, value, param.format.try(:strptime))
          else
            self.send(method_name, value)
          end

  unless valid
    raise_error(
      :on_invalid_parameter_type,
      details: default_invalid_type_message(type)
    )
  end
end