Sha256: 2cfef7797784582499065dc16cec60df2f6593ba940dc5c670121e80ace16bfd

Contents?: true

Size: 1.49 KB

Versions: 1

Compression:

Stored size: 1.49 KB

Contents

module Webdriver
  class Connection
    def initialize endpoint
      uri = URI(endpoint)
      @http = Net::HTTP.new uri.hostname, uri.port
    end

    def get path, headers={}
      call :get, path, headers
    end

    def post path, headers={}, body=nil
      call :post, path, headers, body
    end

    def post path, headers={}, body=nil
      call :post, path, headers, body
    end

    def call method, path, headers={}, body={}
      path = "/#{path}"
      body_json = body.to_json if body
      Webdriver.debug [method, path, headers, body_json]

      response = case method
      when :get
        @http.get path
      when :post
        @http.post path, body_json
      when :delete
        @http.delete path, body_json
      else
        raise "err"
      end

      response_body = JSON.parse response.body

      status = response_body.dig "status"
      session_id = response_body.dig "sessionId"
      value = response_body.dig "value"

      case status
      when 0
        # POST /session has different response structure than other calls
        if method == :post && path == "/session"
          value.merge("id" => session_id)
        else # everything else works like this
          value
        end
      when 1..nil
        error_message = value.dig("message")
        pp [:err, value.dig("message")]
        raise error_message
      else
        if method == :get && path == "/status"
          value
        else
          raise value.dig("message")
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
webdriver-0.6.0 lib/webdriver/connection.rb