Sha256: 06548b4e147305688aad229394f9834ddbbfc51b73886d2c319f34dec3541ef5

Contents?: true

Size: 1.37 KB

Versions: 1

Compression:

Stored size: 1.37 KB

Contents

# frozen_string_literal: true
module GraphQL
  class Schema
    # In early GraphQL versions, errors would be "automatically"
    # rescued and replaced with `"Internal error"`. That behavior
    # was undesirable but this middleware is offered for people who
    # want to preserve it.
    #
    # It has a couple of differences from the previous behavior:
    #
    # - Other parts of the query _will_ be run (previously,
    #   execution would stop when the error was raised and the result
    #   would have no `"data"` key at all)
    # - The entry in {Query::Context#errors} is a {GraphQL::ExecutionError}, _not_
    #   the originally-raised error.
    # - The entry in the `"errors"` key includes the location of the field
    #   which raised the errors.
    #
    # @example Use CatchallMiddleware with your schema
    #     # All errors will be suppressed and replaced with "Internal error" messages
    #     MySchema.middleware << GraphQL::Schema::CatchallMiddleware
    #
    module CatchallMiddleware
      MESSAGE = "Internal error"

      # Rescue any error and replace it with a {GraphQL::ExecutionError}
      # whose message is {MESSAGE}
      def self.call(parent_type, parent_object, field_definition, field_args, query_context, next_middleware)
        next_middleware.call
      rescue StandardError => err
        GraphQL::ExecutionError.new(MESSAGE)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
graphql-1.3.0 lib/graphql/schema/catchall_middleware.rb