class Hurley::Connection

Public Instance Methods

call(request) click to toggle source
# File third_party/hurley_patches.rb, line 45
def call(request)
  net_http_connection(request) do |http|
    begin
      Response.new(request) do |res|
        perform_request(http, request, res)

        # net/http only raises exception on 407 with ssl...?
        if res.status_code == 407
          raise ConnectionFailed, %Q(407 "Proxy Authentication Required")
        end
      end
    rescue *NET_HTTP_EXCEPTIONS => err
      if defined?(OpenSSL) && OpenSSL::SSL::SSLError === err
        raise SSLError, err
      else
        raise ConnectionFailed, err
      end
    end
  end

rescue ::Timeout::Error => err
  raise Timeout, err
end

Private Instance Methods

net_http_request(request) click to toggle source
# File third_party/hurley_patches.rb, line 71
def net_http_request(request)
  http_req = Net::HTTPGenericRequest.new(
    request.verb.to_s.upcase, # request method
    !!request.body,           # is there a request body
    :head != request.verb,    # is there a response body
    request.url.request_uri,  # request uri path
    request.header,           # request headers
  )

  if body = request.body_io
    http_req.body_stream = body
  end

  http_req
end
perform_request(http, request, res) click to toggle source
# File third_party/hurley_patches.rb, line 87
def perform_request(http, request, res)
  http.request(net_http_request(request)) do |http_res|
    res.status_code = http_res.code.to_i
    http_res.each_header do |key, value|
      res.header[key] = value
    end

    if :get == request.verb
      http_res.read_body { |chunk| res.receive_body(chunk) }
    else
      res.receive_body(http_res.body)
    end
  end
end