Sha256: dbe7fdcee137cfd59a942addcfce1f31512e8aafd74e141b80c42274719de21a

Contents?: true

Size: 1.17 KB

Versions: 2

Compression:

Stored size: 1.17 KB

Contents

module PipeRpc
  class Hub::Request
    class Error
      def initialize(error)
        @error = error
      end

      attr_reader :error

      def code
        case @error
        when NoServerError then -32604
        when method_call_error? && NoMethodError then -32601
        when method_call_error? && ArgumentError then -32602
        when InternalError then -32605
        else -32603
        end
      end

      def message
        @error.message
      end

      def backtrace
        @error.backtrace.to_a.dup.tap do |backtrace|
          # In ruby, backtraces of argument errors have the location of the
          # method definition and not from where it is called as first location
          # in the backtrace. To normalize argument and no method errors,
          # remove the first location for argument errors.
          backtrace.shift if @error.is_a?(ArgumentError) and not Object.const_defined?(:MRUBY_VERSION)
        end
      end

      def method_call_error?
        if Object.const_defined?(:MRUBY_VERSION)
          backtrace.first.nil?
        else
          backtrace.first.split(':').first(2) == [CALL_FILE, CALL_LINENO.to_s]
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pipe_rpc-1.1.0 lib/pipe_rpc/hub_request_error.rb
pipe_rpc-1.0.0 lib/pipe_rpc/hub_request_error.rb