To add a collaborator to this project you will need to use the Relish gem to add the collaborator via a terminal command. Soon you'll be able to also add collaborators here!
More about adding a collaboratoraround_http_request hook
The around_http_request
hook wraps each HTTP request. It can be used
rather than separate before_http_request
and after_http_request
hooks
to simplify wrapping/transactional logic (such as using a VCR cassette).
In your block, call #proceed
on the yielded request to cause it to continue.
Alternately, you can treat the request as a proc and pass it on to a method that
expects a block by prefixing it with an ampersand (&request
).
Note that around_http_request
will not work on Ruby 1.8. It uses a fiber
under the covers and thus is only available on interpreters that support fibers.
On 1.8, you can use separate before_http_request
and after_http_request
hooks.
- Scenarios
-
- globally handle requests using an around_http_request hook
-
- Given
-
a file named "globally_handle_requests.rb" with:
include_http_adapter_for("http_lib") request_count = 0 start_sinatra_app(:port => 7777) do get('/') { "Response #{request_count += 1 }" } end require 'vcr' VCR.configure do |c| configuration c.cassette_library_dir = 'cassettes' c.around_http_request do |request| VCR.use_cassette('global', :record => :new_episodes, &request) end end puts "Response for request 1: " + response_body_for(:get, "http://localhost:7777/") puts "Response for request 2: " + response_body_for(:get, "http://localhost:7777/")
- When
-
I run
ruby globally_handle_requests.rb
- Then
-
it should pass with:
Response for request 1: Response 1 Response for request 2: Response 1
- And
- the file "cassettes/global.yml" should contain "body: Response 1"
Examples: configuration http_lib c.hook_into :fakeweb net/http c.hook_into :webmock net/http c.hook_into :webmock httpclient c.hook_into :webmock curb c.hook_into :typhoeus typhoeus c.hook_into :excon excon c.hook_into :faraday faraday (w/ net_http)
Last published over 7 years ago by myronmarston.