class HTTP::WebMockPerform

Public Class Methods

new(request, options, &perform) click to toggle source
# File lib/webmock/http_lib_adapters/http_rb/webmock.rb, line 5
def initialize(request, options, &perform)
  @request = request
  @options = options
  @perform = perform
  @request_signature = nil
end

Public Instance Methods

exec() click to toggle source
# File lib/webmock/http_lib_adapters/http_rb/webmock.rb, line 12
def exec
  replay || perform || halt
end
request_signature() click to toggle source
# File lib/webmock/http_lib_adapters/http_rb/webmock.rb, line 16
def request_signature
  unless @request_signature
    @request_signature = @request.webmock_signature
    register_request(@request_signature)
  end

  @request_signature
end

Protected Instance Methods

halt() click to toggle source
# File lib/webmock/http_lib_adapters/http_rb/webmock.rb, line 62
def halt
  raise ::WebMock::NetConnectNotAllowedError.new request_signature
end
invoke_callbacks(webmock_response, options = {}) click to toggle source
# File lib/webmock/http_lib_adapters/http_rb/webmock.rb, line 66
def invoke_callbacks(webmock_response, options = {})
  ::WebMock::CallbackRegistry.invoke_callbacks(
    options.merge({ lib: :http_rb }),
    request_signature,
    webmock_response
  )
end
perform() click to toggle source
# File lib/webmock/http_lib_adapters/http_rb/webmock.rb, line 55
def perform
  return unless ::WebMock.net_connect_allowed?(request_signature.uri)
  response = @perform.call
  invoke_callbacks(response.to_webmock, real_request: true)
  response
end
raise_timeout_error() click to toggle source
# File lib/webmock/http_lib_adapters/http_rb/webmock.rb, line 50
def raise_timeout_error
  raise Errno::ETIMEDOUT if HTTP::VERSION < "1.0.0"
  raise HTTP::TimeoutError, "connection error: #{Errno::ETIMEDOUT.new}"
end
register_request(signature) click to toggle source
# File lib/webmock/http_lib_adapters/http_rb/webmock.rb, line 31
def register_request(signature)
  ::WebMock::RequestRegistry.instance.requested_signatures.put(signature)
end
replay() click to toggle source
# File lib/webmock/http_lib_adapters/http_rb/webmock.rb, line 35
def replay
  webmock_response = response_for_request request_signature

  return unless webmock_response

  raise_timeout_error if webmock_response.should_timeout
  webmock_response.raise_error_if_any

  invoke_callbacks(webmock_response, real_request: false)
  response = ::HTTP::Response.from_webmock @request, webmock_response, request_signature

  @options.features.each { |_name, feature| response = feature.wrap_response(response) }
  response
end
response_for_request(signature) click to toggle source
# File lib/webmock/http_lib_adapters/http_rb/webmock.rb, line 27
def response_for_request(signature)
  ::WebMock::StubRegistry.instance.response_for_request(signature)
end