class Roda::RodaPlugins::TypecastParams::Error

  1. lib/roda/plugins/typecast_params.rb
Superclass: RodaError

Exception class for errors that are due to the submitted parameters not matching what is expected. Should probably be treated as a 4xx error.

Methods

Public Class

  1. create

Public Instance

  1. all_errors
  2. all_errors
  3. keys
  4. param_name
  5. param_names
  6. reason

Attributes

all_errors [W]

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.

keys [RW]

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.

reason [RW]

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

create(keys, reason, e)

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.

[show source]
    # File lib/roda/plugins/typecast_params.rb
323 def self.create(keys, reason, e)
324   if e.is_a?(self)
325     e.keys ||= keys
326     e.reason ||= reason
327     e
328   else
329     backtrace = e.backtrace
330     e = new("#{e.class}: #{e.message}")
331     e.keys = keys
332     e.reason = reason
333     e.set_backtrace(backtrace) if backtrace
334     e
335   end
336 end

Public Instance methods

all_errors()
[show source]
    # File lib/roda/plugins/typecast_params.rb
351 def all_errors
352   @all_errors ||= [self]
353 end
param_name()

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]'
[show source]
    # File lib/roda/plugins/typecast_params.rb
378 def param_name
379   if keys.length > 1
380     first, *rest = keys
381     v = first.dup
382     rest.each do |param|
383       v << "["
384       v << param unless param.is_a?(Integer)
385       v << "]"
386     end
387     v
388   else
389     keys.first
390   end
391 end
param_names()

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.

[show source]
    # File lib/roda/plugins/typecast_params.rb
398 def param_names
399   all_errors.map(&:param_name)
400 end