class VCR::RequestHandler

@private

Public Instance Methods

handle() click to toggle source
# File lib/vcr/request_handler.rb, line 6
def handle
  log "Handling request: #{request_summary} (disabled: #{disabled?})"
  invoke_before_request_hook

  req_type = request_type(:consume_stub)

  log "Identified request type (#{req_type}) for #{request_summary}"

  # The before_request hook can change the type of request
  # (i.e. by inserting a cassette), so we need to query the
  # request type again.
  #
  # Likewise, the main handler logic can modify what
  # #request_type would return (i.e. when a response stub is
  # used), so we need to store the request type for the
  # after_request hook.
  set_typed_request_for_after_hook(req_type)

  send "on_#{req_type}_request"
end

Private Instance Methods

disabled?() click to toggle source
# File lib/vcr/request_handler.rb, line 62
def disabled?
  VCR.library_hooks.disabled?(library_name)
end
externally_stubbed?() click to toggle source
# File lib/vcr/request_handler.rb, line 54
def externally_stubbed?
  false
end
has_response_stub?(consume_stub) click to toggle source
# File lib/vcr/request_handler.rb, line 66
def has_response_stub?(consume_stub)
  if consume_stub
    stubbed_response
  else
    VCR.http_interactions.has_interaction_matching?(vcr_request)
  end
end
invoke_after_request_hook(vcr_response) click to toggle source
# File lib/vcr/request_handler.rb, line 49
def invoke_after_request_hook(vcr_response)
  return if disabled?
  VCR.configuration.invoke_hook(:after_http_request, @after_hook_typed_request, vcr_response)
end
invoke_before_request_hook() click to toggle source
# File lib/vcr/request_handler.rb, line 43
def invoke_before_request_hook
  return if disabled? || !VCR.configuration.has_hooks_for?(:before_http_request)
  typed_request = Request::Typed.new(vcr_request, request_type)
  VCR.configuration.invoke_hook(:before_http_request, typed_request)
end
library_name() click to toggle source
# File lib/vcr/request_handler.rb, line 78
def library_name
  # extracts `:typhoeus` from `VCR::LibraryHooks::Typhoeus::RequestHandler`
  @library_name ||= self.class.name.split('::')[-2].downcase.to_sym
end
log_prefix() click to toggle source
# File lib/vcr/request_handler.rb, line 110
def log_prefix
  "[#{library_name}] "
end
on_externally_stubbed_request() click to toggle source

Subclasses can implement these

# File lib/vcr/request_handler.rb, line 84
def on_externally_stubbed_request
end
on_ignored_request() click to toggle source
# File lib/vcr/request_handler.rb, line 87
def on_ignored_request
end
on_recordable_request() click to toggle source
# File lib/vcr/request_handler.rb, line 93
def on_recordable_request
end
on_stubbed_by_vcr_request() click to toggle source
# File lib/vcr/request_handler.rb, line 90
def on_stubbed_by_vcr_request
end
on_unhandled_request() click to toggle source
# File lib/vcr/request_handler.rb, line 96
def on_unhandled_request
  raise VCR::Errors::UnhandledHTTPRequestError.new(vcr_request)
end
request_summary() click to toggle source
Calls superclass method VCR::Logger#request_summary
# File lib/vcr/request_handler.rb, line 100
def request_summary
  request_matchers = if cass = VCR.current_cassette
    cass.match_requests_on
  else
    VCR.configuration.default_cassette_options[:match_requests_on]
  end

  super(vcr_request, request_matchers)
end
request_type(consume_stub = false) click to toggle source
# File lib/vcr/request_handler.rb, line 33
def request_type(consume_stub = false)
  case
    when externally_stubbed?                then :externally_stubbed
    when should_ignore?                     then :ignored
    when has_response_stub?(consume_stub)   then :stubbed_by_vcr
    when VCR.real_http_connections_allowed? then :recordable
    else                                         :unhandled
  end
end
set_typed_request_for_after_hook(request_type) click to toggle source
# File lib/vcr/request_handler.rb, line 29
def set_typed_request_for_after_hook(request_type)
  @after_hook_typed_request = Request::Typed.new(vcr_request, request_type)
end
should_ignore?() click to toggle source
# File lib/vcr/request_handler.rb, line 58
def should_ignore?
  disabled? || VCR.request_ignorer.ignore?(vcr_request)
end
stubbed_response() click to toggle source
# File lib/vcr/request_handler.rb, line 74
def stubbed_response
  @stubbed_response ||= VCR.http_interactions.response_for(vcr_request)
end