class VCR::Middleware::Faraday::RequestHandler
@private
Attributes
app[R]
env[R]
Public Class Methods
new(app, env)
click to toggle source
# File lib/vcr/middleware/faraday.rb, line 42 def initialize(app, env) @app, @env = app, env @has_on_complete_hook = false end
Public Instance Methods
handle()
click to toggle source
Calls superclass method
VCR::RequestHandler#handle
# File lib/vcr/middleware/faraday.rb, line 47 def handle # Faraday must be exlusive here in case another library hook is being used. # We don't want double recording/double playback. VCR.library_hooks.exclusive_hook = :faraday super ensure response = defined?(@vcr_response) ? @vcr_response : nil invoke_after_request_hook(response) unless delay_finishing? end
Private Instance Methods
delay_finishing?()
click to toggle source
# File lib/vcr/middleware/faraday.rb, line 59 def delay_finishing? !!env[:parallel_manager] && @has_on_complete_hook end
invoke_after_request_hook(response)
click to toggle source
Calls superclass method
VCR::RequestHandler#invoke_after_request_hook
# File lib/vcr/middleware/faraday.rb, line 120 def invoke_after_request_hook(response) super VCR.library_hooks.exclusive_hook = nil end
on_ignored_request()
click to toggle source
# File lib/vcr/middleware/faraday.rb, line 92 def on_ignored_request response = app.call(env) @vcr_response = response_for(response) response end
on_recordable_request()
click to toggle source
# File lib/vcr/middleware/faraday.rb, line 110 def on_recordable_request @has_on_complete_hook = true response = app.call(env) response.on_complete do @vcr_response = response_for(response) VCR.record_http_interaction(VCR::HTTPInteraction.new(vcr_request, @vcr_response)) invoke_after_request_hook(@vcr_response) if delay_finishing? end end
on_stubbed_by_vcr_request()
click to toggle source
# File lib/vcr/middleware/faraday.rb, line 98 def on_stubbed_by_vcr_request headers = env[:response_headers] ||= ::Faraday::Utils::Headers.new headers.update stubbed_response.headers if stubbed_response.headers env.update :status => stubbed_response.status.code, :body => stubbed_response.body @vcr_response = stubbed_response faraday_response = ::Faraday::Response.new faraday_response.finish(env) env[:response] = faraday_response end
raw_body_from(body)
click to toggle source
# File lib/vcr/middleware/faraday.rb, line 71 def raw_body_from(body) return body unless body.respond_to?(:read) body.read.tap do |b| body.rewind if body.respond_to?(:rewind) end end
response_for(response)
click to toggle source
# File lib/vcr/middleware/faraday.rb, line 79 def response_for(response) # reason_phrase is a new addition to Faraday::Response, # so maintain backward compatibility reason = response.respond_to?(:reason_phrase) ? response.reason_phrase : nil VCR::Response.new( VCR::ResponseStatus.new(response.status, reason), response.headers, raw_body_from(response.body), nil ) end
vcr_request()
click to toggle source
# File lib/vcr/middleware/faraday.rb, line 63 def vcr_request @vcr_request ||= VCR::Request.new \ env[:method], env[:url].to_s, raw_body_from(env[:body]), env[:request_headers] end