Sha256: 12a3269280719906ba95b05a38777ce3910ecd017b8245ee1f5b89700123e6af

Contents?: true

Size: 1.31 KB

Versions: 12

Compression:

Stored size: 1.31 KB

Contents

module GraphitiGql
  class ExceptionHandler
    attr_reader :error, :context, :field
    class_attribute :registry, :log, :notify, :default_message, :default_code

    self.registry = {}
    self.default_message = "We're sorry, something went wrong."
    self.default_code = 500

    def self.register_exception(err, opts)
      registry[err] = opts
    end

    register_exception Graphiti::Errors::RecordNotFound, code: 404
    register_exception Graphiti::Errors::SingularSideload, code: 400
    register_exception Graphiti::Errors::InvalidAttributeAccess, code: 403
    register_exception GraphitiGql::Errors::UnsupportedLast, code: 400

    def initialize(err, obj, args, ctx, field)
      @error = err
      @obj = obj
      @args = args
      @context = ctx
      @field = field
      @config = get_config(err)
    end

    def notify
      # noop
    end

    def log
      # noop
    end

    def handle
      notify if @config[:notify] != false
      log if @config[:log] != false

      message = @config[:message] ? err.message : default_message
      code = @config[:code] || default_code
      raise GraphQL::ExecutionError.new(message, extensions: { code: code })
    end

    private

    def get_config(error)
      registered = registry.find { |e, _| error.is_a?(e) }
      registered ? registered[1] : {}
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
graphiti_gql-0.2.38 lib/graphiti_gql/exception_handler.rb
graphiti_gql-0.2.37 lib/graphiti_gql/exception_handler.rb
graphiti_gql-0.2.36 lib/graphiti_gql/exception_handler.rb
graphiti_gql-0.2.35 lib/graphiti_gql/exception_handler.rb
graphiti_gql-0.2.34 lib/graphiti_gql/exception_handler.rb
graphiti_gql-0.2.33 lib/graphiti_gql/exception_handler.rb
graphiti_gql-0.2.32 lib/graphiti_gql/exception_handler.rb
graphiti_gql-0.2.31 lib/graphiti_gql/exception_handler.rb
graphiti_gql-0.2.30 lib/graphiti_gql/exception_handler.rb
graphiti_gql-0.2.29 lib/graphiti_gql/exception_handler.rb
graphiti_gql-0.2.28 lib/graphiti_gql/exception_handler.rb
graphiti_gql-0.2.27 lib/graphiti_gql/exception_handler.rb