class Roda::RodaPlugins::TypecastParams::Error
Exception class for errors that are due to the submitted parameters not matching what is expected. Should probably be treated as a 4xx error.
Attributes
An array of all other errors that were raised with this error. If the error was not raised inside Params#convert!
or Params#convert_each!
, this will just be an array containing the current receiver.
This allows you to use Params#convert!
to process a form input, and if any conversion errors occur inside the block, it can provide an array of all parameter names and reasons for parameters with problems.
The keys used to access the parameter that caused the error. This is an array that can be splatted to dig
to get the value of the parameter causing the error.
The reason behind this error. If this error was caused by a conversion method, this will be the conversion method symbol. If this error was caused because a value was missing, then it will be :missing
. If this error was caused because a value was not the correct type, then it will be :invalid_type
.
Public Class Methods
Source
# File lib/roda/plugins/typecast_params.rb, line 323 def self.create(keys, reason, e) if e.is_a?(self) e.keys ||= keys e.reason ||= reason e else backtrace = e.backtrace e = new("#{e.class}: #{e.message}") e.keys = keys e.reason = reason e.set_backtrace(backtrace) if backtrace e end end
Set the keys in the given exception. If the exception is not already an instance of the class, create a new instance to wrap it.
Public Instance Methods
Source
# File lib/roda/plugins/typecast_params.rb, line 351 def all_errors @all_errors ||= [self] end
Source
# File lib/roda/plugins/typecast_params.rb, line 378 def param_name if keys.length > 1 first, *rest = keys v = first.dup rest.each do |param| v << "[" v << param unless param.is_a?(Integer) v << "]" end v else keys.first end end
The likely parameter name where the contents were not expected. This is designed for cases where the parameter was submitted with the typical application/x-www-form-urlencoded or multipart/form-data content types, and assumes the typical rack parsing of these content types into parameters. # If the parameters were submitted via JSON, keys
should be used directly.
Example:
# keys: ['page'] param_name => 'page' # keys: ['artist', 'name'] param_name => 'artist[name]' # keys: ['album', 'artist', 'name'] param_name => 'album[artist][name]'
Source
# File lib/roda/plugins/typecast_params.rb, line 398 def param_names all_errors.map(&:param_name) end
An array of all parameter names for parameters where the context were not expected. If Params#convert!
was not used, this will be an array containing param_name
. If Params#convert!
was used and multiple exceptions were captured inside the convert! block, this will contain the parameter names related to all captured exceptions.