class GraphQL::Schema::RescueMiddleware
-
If no handler is found, re-raise the error
- If a handler is found, use it & return a {GraphQL::ExecutionError}
- Rescue errors in a middleware chain, then check for a handler
- Store a table of errors & handlers
def attempt_rescue(err)
def attempt_rescue(err) rescue_table.each { |klass, handler| if klass.is_a?(Class) && err.is_a?(klass) && handler result = handler.call(err) case result when String return GraphQL::ExecutionError.new(result) when GraphQL::ExecutionError return result end end } raise(err) end
def call(*args)
def call(*args) begin yield rescue StandardError => err attempt_rescue(err) end end
def initialize
def initialize @rescue_table = {} end
def remove_handler(*error_classes)
-
error_class
(Class
) -- the error class whose handler should be removed
def remove_handler(*error_classes) error_classes.map{ |error_class| rescue_table.delete(error_class) } end
def rescue_from(*error_classes, &block)
- Yieldreturn: - message to put in GraphQL response
Other tags:
- Yieldparam: an - error that was rescued
Other tags:
- Yield: - A handler to return a message for these error instances
Parameters:
-
error_classes
(Class
) -- one or more classes of errors to rescue from
Other tags:
- Example: Rescue from not-found by telling the user -
def rescue_from(*error_classes, &block) error_classes.map{ |error_class| rescue_table[error_class] = block } end