class Selenium::WebDriver::Remote::Response

@api private

Attributes

code[R]
payload[R]

Public Class Methods

new(code, payload = nil) click to toggle source
# File lib/selenium/webdriver/remote/response.rb, line 31
def initialize(code, payload = nil)
  @code    = code
  @payload = payload || {}

  assert_ok
end

Public Instance Methods

[](key) click to toggle source
# File lib/selenium/webdriver/remote/response.rb, line 49
def [](key)
  @payload[key]
end
error() click to toggle source
# File lib/selenium/webdriver/remote/response.rb, line 38
def error
  error, message, backtrace = process_error
  klass = Error.for_error(error) || return

  ex = klass.new(message)
  ex.set_backtrace(caller)
  add_backtrace ex, backtrace

  ex
end

Private Instance Methods

add_backtrace(ex, server_trace) click to toggle source
# File lib/selenium/webdriver/remote/response.rb, line 63
def add_backtrace(ex, server_trace)
  return unless server_trace

  backtrace = case server_trace
              when Array
                backtrace_from_remote(server_trace)
              when String
                server_trace.split("\n")
              end

  ex.set_backtrace(backtrace + ex.backtrace)
end
assert_ok() click to toggle source
# File lib/selenium/webdriver/remote/response.rb, line 55
def assert_ok
  e = error
  raise e if e
  return unless @code.nil? || @code >= 400

  raise Error::ServerError, self
end
backtrace_from_remote(server_trace) click to toggle source
# File lib/selenium/webdriver/remote/response.rb, line 76
def backtrace_from_remote(server_trace)
  server_trace.filter_map do |frame|
    next unless frame.is_a?(Hash)

    file = frame['fileName']
    line = frame['lineNumber']
    meth = frame['methodName']

    class_name = frame['className']
    file = "#{class_name}(#{file})" if class_name

    meth = 'unknown' if meth.nil? || meth.empty?

    "[remote server] #{file}:#{line}:in `#{meth}'"
  end
end
process_error() click to toggle source
# File lib/selenium/webdriver/remote/response.rb, line 93
def process_error
  return unless self['value'].is_a?(Hash)

  [
    self['value']['error'],
    self['value']['message'],
    self['value']['stacktrace']
  ]
end