class VCR::LibraryHooks::Typhoeus::RequestHandler

@private

def externally_stubbed?

def externally_stubbed?
  ::Typhoeus::Expectation.find_by(request)
end

def initialize(request)

def initialize(request)
  @request = request
  request.block_connection = false if VCR.turned_on?
end

def on_stubbed_by_vcr_request

def on_stubbed_by_vcr_request
  response = ::Typhoeus::Response.new \
    :http_version   => stubbed_response.http_version,
    :code           => stubbed_response.status.code,
    :status_message => stubbed_response.status.message,
    :headers        => stubbed_response_headers,
    :body           => stubbed_response.body,
    :effective_url  => stubbed_response.adapter_metadata.fetch('effective_url', request.url),
    :mock           => true
  first_header_line = "HTTP/#{stubbed_response.http_version} #{response.code} #{response.status_message}\r\n"
  response.instance_variable_set(:@first_header_line, first_header_line)
  response.instance_variable_get(:@options)[:response_headers] =
    first_header_line + response.headers.map { |k,v| "#{k}: #{v}"}.join("\r\n")
  response
end

def on_unhandled_request

def on_unhandled_request
  invoke_after_request_hook(nil)
  super
end

def set_typed_request_for_after_hook(*args)

def set_typed_request_for_after_hook(*args)
  super
  request.instance_variable_set(:@__typed_vcr_request, @after_hook_typed_request)
end

def stubbed_response_headers

def stubbed_response_headers
  @stubbed_response_headers ||= {}.tap do |hash|
    stubbed_response.headers.each do |key, values|
      hash[key] = values.size == 1 ? values.first : values
    end if stubbed_response.headers
  end
end

def vcr_request

def vcr_request
  @vcr_request ||= VCR::Request.new \
    request.options.fetch(:method, :get),
    request.url,
    request.encoded_body,
    request.options.fetch(:headers, {})
end