class Curl::WebMockCurlEasy

def curb_or_webmock

def curb_or_webmock
  request_signature = build_request_signature
  WebMock::RequestRegistry.instance.requested_signatures.put(request_signature)
  if webmock_response = WebMock::StubRegistry.instance.response_for_request(request_signature)
    build_curb_response(webmock_response)
    WebMock::CallbackRegistry.invoke_callbacks(
      {lib: :curb}, request_signature, webmock_response)
    invoke_curb_callbacks
    true
  elsif WebMock.net_connect_allowed?(request_signature.uri)
    res = yield
    if WebMock::CallbackRegistry.any_callbacks?
      webmock_response = build_webmock_response
      WebMock::CallbackRegistry.invoke_callbacks(
        {lib: :curb, real_request: true}, request_signature,
          webmock_response)
    end
    res
  else
    raise WebMock::NetConnectNotAllowedError.new(request_signature)
  end
end