Module: WebMockHTTPClients

Included in:
WebMockHTTPClient, WebMockJSONClient
Defined in:
lib/webmock/http_lib_adapters/httpclient_adapter.rb

Instance Method Summary collapse

Instance Method Details

#build_httpclient_response(webmock_response, stream = false, req_header = nil, &block) ⇒ Object

Raises:

  • (HTTPClient::TimeoutError)


110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/webmock/http_lib_adapters/httpclient_adapter.rb', line 110

def build_httpclient_response(webmock_response, stream = false, req_header = nil, &block)
  body = stream ? StringIO.new(webmock_response.body) : webmock_response.body
  response = HTTP::Message.new_response(body, req_header)
  response.header.init_response(webmock_response.status[0])
  response.reason=webmock_response.status[1]
  webmock_response.headers.to_a.each { |name, value| response.header.set(name, value) }

  raise HTTPClient::TimeoutError if webmock_response.should_timeout
  webmock_response.raise_error_if_any

  block.call(response, body) if block

  response
end

#do_get(req, proxy, conn, stream = false, &block) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/webmock/http_lib_adapters/httpclient_adapter.rb', line 54

def do_get(req, proxy, conn, stream = false, &block)
  request_signature = build_request_signature(req, :reuse_existing)

  WebMock::RequestRegistry.instance.requested_signatures.put(request_signature)

  if webmock_responses[request_signature]
    webmock_response = webmock_responses.delete(request_signature)
    response = build_httpclient_response(webmock_response, stream, req.header, &block)
    @request_filter.each do |filter|
      filter.filter_response(req, response)
    end
    res = conn.push(response)
    WebMock::CallbackRegistry.invoke_callbacks(
      {:lib => :httpclient}, request_signature, webmock_response)
    res
  elsif WebMock.net_connect_allowed?(request_signature.uri)
    # in case there is a nil entry in the hash...
    webmock_responses.delete(request_signature)

    res = if stream
      do_get_stream_without_webmock(req, proxy, conn, &block)
    elsif block
      body = ''
      do_get_block_without_webmock(req, proxy, conn) do |http_res, chunk|
        body += chunk
        block.call(http_res, chunk)
      end
    else
      do_get_block_without_webmock(req, proxy, conn)
    end
    res = conn.pop
    conn.push(res)
    if WebMock::CallbackRegistry.any_callbacks?
      webmock_response = build_webmock_response(res, body)
      WebMock::CallbackRegistry.invoke_callbacks(
        {:lib => :httpclient, :real_request => true}, request_signature,
        webmock_response)
    end
    res
  else
    raise WebMock::NetConnectNotAllowedError.new(request_signature)
  end
end

#do_get_block(req, proxy, conn, &block) ⇒ Object



46
47
48
# File 'lib/webmock/http_lib_adapters/httpclient_adapter.rb', line 46

def do_get_block(req, proxy, conn, &block)
  do_get(req, proxy, conn, false, &block)
end

#do_get_stream(req, proxy, conn, &block) ⇒ Object



50
51
52
# File 'lib/webmock/http_lib_adapters/httpclient_adapter.rb', line 50

def do_get_stream(req, proxy, conn, &block)
  do_get(req, proxy, conn, true, &block)
end

#do_request_async(method, uri, query, body, extheader) ⇒ Object



98
99
100
101
102
103
104
105
106
107
108
# File 'lib/webmock/http_lib_adapters/httpclient_adapter.rb', line 98

def do_request_async(method, uri, query, body, extheader)
  req = create_request(method, uri, query, body, extheader)
  request_signature = build_request_signature(req)
  webmock_request_signatures << request_signature

  if webmock_responses[request_signature] || WebMock.net_connect_allowed?(request_signature.uri)
    super
  else
    raise WebMock::NetConnectNotAllowedError.new(request_signature)
  end
end