Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

Additional stubbing capabilities needed by VCR #207

Closed
myronmarston opened this Issue · 24 comments

3 participants

@myronmarston

@i0rek from our twitter conversation it sounded like you'd be making some changes here and potentially revamping the stubbing APIs in typhoeus. I got a message on the VCR mailing list last night asking about using Typhoeus 0.5.0-pre w/ VCR and it looks like the integration is broken because of the removal of a couple public APIs VCR relied upon. From the sound of things (e.g. in the twitter conversation and in #196), it sounds like you already plan to address this, but I wanted to chip in and outline the specific needs of VCR. You can see VCR's typhoeus integration here for more details.

Anyhow, here's a short list of what VCR needs:

  • A global "stub finder" hook -- In typhoeus 0.3 and 0.4 this was Typhoeus::Hydra.register_stub_finder. VCR needs this because it does it's own request matching (which allows for user-defined request matchers using lambdas). The block returns nil if the request should not be stubbed (in which case it continues for real) or a Typhoeus::Response object (for a stubbed response).
  • An "after request" hook -- In typhoeus 0.3 and 0.4 this was ::Typhoeus::Hydra.after_request_before_on_complete. VCR needs this to record new requests and to fire it's after_http_request hook. Note that it's important that for a single HTTP request, the request object yielded to this hook should be the same as the one yielded to the stub finder hook. VCR has some state about the request that needs to be carried between the two hooks and it injects it into the request object using an instance variable.
  • A means to detect if there is a stub registered for the given request using Typhoeus's stubbing API (but excluding VCR's usage of the stub finder hook). You can see how it's currently working on this line. This is used so that if the user has registered a stub with typhoeus, VCR allows it to continue to work.
  • A means to enable/disable whether or not connections are allowed. While VCR is active, it wants typhoeus to allow all HTTP connections (since VCR will handle them all somehow), but when VCR is turned off, it delegates to the configured typhoeus setting. It currently does this using a monkey patch, but I'd love to get away from it if possible. It's not as simple as VCR toggling the existing setting, though--when VCR is turned off, it should act however the user has configured typhoeus--but if VCR configured typhoeus the same way it would stomp the user's setting and there would be no way to know what they had configured it as.

I think that's it. Let me know if you have any questions or want help with this.

@i0rek
Owner

Hi @myronmarston,

thanks for looking at what I came up with so far. My plan was to first get webmock up and running with typhoeus 0.5.0.alpha and vcr afterwards. I'm almost done with webmock: 5 failing specs and will then digg into vcr. I'll make a pull request on webmock(and put a link in here), once my work is in a acceptable shape.

Btw. the correct version to look at for stubbing is 0.5.0.alpha.

1) This is totally missing right now, but I'll restore that. I only implemented everything necessay for webmock so far.
2) Typhoeus can now have multiple on_complete callbacks. I thought of something like request.on_complete.prepend {} to make sure your stuff gets executed first.
3) Will look into it.
4) I think I already have something for you: https://github.com/typhoeus/typhoeus/blob/v0.5.0.alpha/lib/typhoeus.rb#L67. You can pass a block which is executed as if the connection is not blocked without tampering with the users configuration.

I'll come back to you in case I have problems preparing a pull request for vcr.

@myronmarston

This is totally missing right now, but I'll restore that.

Sounds good.

Typhoeus can now have multiple on_complete callbacks. I thought of something like request.on_complete.prepend {} to make sure your stuff gets executed first.

Sounds good except for one thing--the form you've shown there is prepending an on_complete callback to an individual request. VCR needs to add a global hook for all requests -- often time the requests are constructed deep in production code where VCR does not have access. But in general I like the idea of simplifying to one hook, with a means to prepend it :).

Will look into it.

Sounds good. I'm pretty happy w/ the way it was working before, but if there's another way that's fine, too.

I think I already have something for you: https://github.com/typhoeus/typhoeus/blob/v0.5.0.alpha/lib/typhoeus.rb#L67. You can pass a block which is executed as if the connection is not blocked without tampering with the users configuration.

That looks fantastic, thanks!

@i0rek
Owner

I also introduced global callbacks, that means you have on_complete, on_success and on_failure not only available on a request, but also global. It would be Typhoeus.on_complete.prepend {} in your case. Sorry for the confusion.

@myronmarston

I also introduced global callbacks, that means you have on_complete, on_success and on_failure not only available on a request, but also global. It would be Typhoeus.on_complete.prepend {} in your case. Sorry for the confusion.

Sounds great. Typhoeus looks like it's getting some nice cleanup and improvements :).

@i0rek
Owner

Ok, now we have something more powerful than register_stub_finder: the before hook (36c4447). You can hook right away into hydra.queue and do what you want. When the hook returns nil/false the execution aborts, otherwise it continues.
Correct me @myronmarston if thats not enough!

That's also all we need to remove the webmock monkeypatch. /cc @bblimke

@myronmarston

It looks like that'll work, and it's definitely a nice API than the old one. Hard to say if it'll be everything VCR needs until we try it, though!

@i0rek
Owner

Its almost done: https://github.com/i0rek/vcr/tree/typhoeus_0.5.0. If you want to reproduce, you need my fork of webmock and faraday.
There are seven failing specs left:

Finished in 37.11 seconds
2049 examples, 7 failures, 1 pending

Failed examples:

rspec ./spec/support/shared_example_groups/hook_into_http_library.rb:575 # Typhoeus hook behaves like a hook into an HTTP library using Typhoeus when VCR.real_http_connections_allowed? is returning false when some requests are stubbed gets the stubbed responses when requests are made to http://example.com/foo, and does not record them
rspec ./spec/support/shared_example_groups/hook_into_http_library.rb:429 # Typhoeus hook behaves like a hook into an HTTP library using Typhoeus.stub_requests using specific match_attributes :headers returns the expected response for a {"X-Http-Header1"=>"val1"} request
rspec ./spec/support/shared_example_groups/hook_into_http_library.rb:429 # Typhoeus hook behaves like a hook into an HTTP library using Typhoeus.stub_requests using specific match_attributes :headers returns the expected response for a {"X-Http-Header1"=>"val2"} request
rspec ./spec/support/shared_example_groups/hook_into_http_library.rb:575 # Typhoeus hook behaves like a hook into an HTTP library using Typhoeus when VCR.real_http_connections_allowed? is returning true when some requests are stubbed gets the stubbed responses when requests are made to http://example.com/foo, and does not record them
rspec ./spec/support/shared_example_groups/hook_into_http_library.rb:58 # VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (net_http) plays back an empty body response exactly as it was recorded (e.g. nil vs empty string)
rspec ./spec/support/shared_example_groups/hook_into_http_library.rb:429 # WebMock hook behaves like a hook into an HTTP library using Typhoeus.stub_requests using specific match_attributes :headers returns the expected response for a {"X-Http-Header1"=>"val1"} request
rspec ./spec/support/shared_example_groups/hook_into_http_library.rb:429 # WebMock hook behaves like a hook into an HTTP library using Typhoeus.stub_requests using specific match_attributes :headers returns the expected response for a {"X-Http-Header1"=>"val2"} request

@myronmarston Could you have a look and perhaps give me a hint?

@myronmarston

Sure, I can take a stab at it. You mention needing your forks of things--can you update the Gemfile in your fork to lock those dependencies to your github forks so I can just bundle install and run the specs to see the errors?

@i0rek
Owner

Ok, done!

@myronmarston

@i0rek -- Sorry I haven't gotten to this yet...I still plan to. It's a priority for me for this coming week.

@myronmarston

I just checked out your branch and I'm getting 71 failures...any ideas what's changed?

Run options: include {:focus=>true}

All examples were filtered out; ignoring {:focus=>true}
..................................................................................................F...F............................................................................................................F.FF............................F.......................................................................................................*............................................................................................................................................................................................................................................................FFFFFFFFFFFF.FFFFFFFFF..F...F....F...F..FFFFFFF.FFFFFF......FFFFFFFF.....................FF...F...............................................................................................FF..FFFFFFFFFFF.............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................FF.............................................................................................................................................................................................................................................................................................................................................................................................................

Pending:
  FakeWeb hook behaves like a hook into an HTTP library using Net::HTTP plays back an empty body response exactly as it was recorded (e.g. nil vs empty string)
    # awaiting an external fix
    # ./spec/support/shared_example_groups/hook_into_http_library.rb:58

Failures:

  1) Excon hook when Excon's streaming API is used properly records and plays back the response
     Failure/Error: recorded.should eq(played_back)

       expected: ""
            got: "FOO!"

       (compared using ==)
     # ./spec/vcr/library_hooks/excon_spec.rb:81:in `block (3 levels) in <top (required)>'

  2) Excon hook when Excon raises an error due to an unexpected response status raises the same error class as excon itself raises
     Failure/Error: stubbed_error.class.should be(real_error.class)

       expected #<Class:2181507040> => Excon::Errors::SocketError
            got #<Class:2181501660> => Excon::Errors::NotFound

       Compared using equal?, which compares object identity,
       but expected and actual are not the same object. Use
       'actual.should eq(expected)' if you don't care about
       object identity in this example.


       Diff:
       @@ -1,2 +1,2 @@
       -Excon::Errors::SocketError
       +Excon::Errors::NotFound
     # ./spec/vcr/library_hooks/excon_spec.rb:141:in `block (3 levels) in <top (required)>'

  3) Typhoeus hook behaves like a hook into an HTTP library using Typhoeus when VCR.real_http_connections_allowed? is returning true when some requests are stubbed gets the stubbed responses when requests are made to http://example.com/foo, and does not record them
     Failure/Error: get_body_string(make_http_request(:get, 'http://example.com/foo')).should =~ /example\.com get response \d with path=foo/
       (VCR).record_http_interaction(#<struct VCR::HTTPInteraction request=#<struct VCR::Request method=:get, uri="http://example.com/foo", body="", headers={"User-Agent"=>["Typhoeus - https://github.com/typhoeus/typhoeus"]}>, response=#<struct VCR::Response status=#<struct VCR::ResponseStatus code=200, message="OK">, headers={"Last-Modified"=>["Tue, 15 Nov 2005 13:24:10 GMT"], "Connection"=>["Keep-Alive"], "Etag"=>["\"24ec5-1b6-4059a80bfd280\""], "Content-Type"=>["text/html; charset=UTF-8"], "Date"=>["Wed, 31 Mar 2010 02:43:23 GMT"], "Server"=>["Apache/2.2.3 (CentOS)"], "Content-Length"=>["438"], "Age"=>["3285"], "Accept-Ranges"=>["bytes"]}, body="example.com get response 1 with path=foo", http_version=nil>, recorded_at=2012-09-29 23:08:48 -0700>)
           expected: 0 times
           received: 1 time
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/library_hooks/typhoeus_spec.rb:22
     # ./lib/vcr/library_hooks/typhoeus.rb:77:in `block in <module:Typhoeus>'
     # ./lib/vcr/library_hooks/typhoeus.rb:86:in `block in <module:Typhoeus>'
     # ./spec/support/http_library_adapters.rb:170:in `block in make_http_request'
     # ./spec/support/http_library_adapters.rb:169:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:577:in `block (6 levels) in <top (required)>'

  4) Typhoeus hook behaves like a hook into an HTTP library using Typhoeus.stub_requests using specific match_attributes :headers returns the expected response for a {"X-Http-Header1"=>"val2"} request
     Failure/Error: make_request(:get, "http://wrong-domain.com/wrong/path", nil, headers)
     VCR::Errors::UnhandledHTTPRequestError:


       ================================================================================
       An HTTP request has been made that VCR does not know how to handle:
         GET http://wrong-domain.com/wrong/path

       There is currently no cassette in use. There are a few ways
       you can configure VCR to handle this request:

         * If you're surprised VCR is raising this error
           and want insight about how VCR attempted to handle the request,
           you can use the debug_logger configuraiton option to log more details [1].
         * If you want VCR to record this request and play it back during future test
           runs, you should wrap your test (or this portion of your test) in a
           `VCR.use_cassette` block [2].
         * If you only want VCR to handle requests made while a cassette is in use,
           configure `allow_http_connections_when_no_cassette = true`. VCR will
           ignore this request since it is made when there is no cassette [3].
         * If you want VCR to ignore this request (and others like it), you can
           set an `ignore_request` callback [4].

       [1] https://www.relishapp.com/myronmarston/vcr/v/2-2-4/docs/configuration/debug-logging
       [2] https://www.relishapp.com/myronmarston/vcr/v/2-2-4/docs/getting-started
       [3] https://www.relishapp.com/myronmarston/vcr/v/2-2-4/docs/configuration/allow-http-connections-when-no-cassette
       [4] https://www.relishapp.com/myronmarston/vcr/v/2-2-4/docs/configuration/ignore-request
       ================================================================================
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/library_hooks/typhoeus_spec.rb:22
     # ./lib/vcr/request_handler.rb:97:in `on_unhandled_request'
     # ./lib/vcr/library_hooks/typhoeus.rb:39:in `on_unhandled_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/library_hooks/typhoeus.rb:85:in `block in <module:Typhoeus>'
     # ./spec/support/http_library_adapters.rb:170:in `block in make_http_request'
     # ./spec/support/http_library_adapters.rb:169:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:472:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:430:in `block (3 levels) in matching_on'

  5) Typhoeus hook behaves like a hook into an HTTP library using Typhoeus.stub_requests using specific match_attributes :headers returns the expected response for a {"X-Http-Header1"=>"val1"} request
     Failure/Error: make_request(:get, "http://wrong-domain.com/wrong/path", nil, headers)
     VCR::Errors::UnhandledHTTPRequestError:


       ================================================================================
       An HTTP request has been made that VCR does not know how to handle:
         GET http://wrong-domain.com/wrong/path

       There is currently no cassette in use. There are a few ways
       you can configure VCR to handle this request:

         * If you're surprised VCR is raising this error
           and want insight about how VCR attempted to handle the request,
           you can use the debug_logger configuraiton option to log more details [1].
         * If you want VCR to record this request and play it back during future test
           runs, you should wrap your test (or this portion of your test) in a
           `VCR.use_cassette` block [2].
         * If you only want VCR to handle requests made while a cassette is in use,
           configure `allow_http_connections_when_no_cassette = true`. VCR will
           ignore this request since it is made when there is no cassette [3].
         * If you want VCR to ignore this request (and others like it), you can
           set an `ignore_request` callback [4].

       [1] https://www.relishapp.com/myronmarston/vcr/v/2-2-4/docs/configuration/debug-logging
       [2] https://www.relishapp.com/myronmarston/vcr/v/2-2-4/docs/getting-started
       [3] https://www.relishapp.com/myronmarston/vcr/v/2-2-4/docs/configuration/allow-http-connections-when-no-cassette
       [4] https://www.relishapp.com/myronmarston/vcr/v/2-2-4/docs/configuration/ignore-request
       ================================================================================
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/library_hooks/typhoeus_spec.rb:22
     # ./lib/vcr/request_handler.rb:97:in `on_unhandled_request'
     # ./lib/vcr/library_hooks/typhoeus.rb:39:in `on_unhandled_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/library_hooks/typhoeus.rb:85:in `block in <module:Typhoeus>'
     # ./spec/support/http_library_adapters.rb:170:in `block in make_http_request'
     # ./spec/support/http_library_adapters.rb:169:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:472:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:430:in `block (3 levels) in matching_on'

  6) Typhoeus hook behaves like a hook into an HTTP library using Typhoeus when VCR.real_http_connections_allowed? is returning false when some requests are stubbed gets the stubbed responses when requests are made to http://example.com/foo, and does not record them
     Failure/Error: get_body_string(make_http_request(:get, 'http://example.com/foo')).should =~ /example\.com get response \d with path=foo/
       (VCR).record_http_interaction(#<struct VCR::HTTPInteraction request=#<struct VCR::Request method=:get, uri="http://example.com/foo", body="", headers={"User-Agent"=>["Typhoeus - https://github.com/typhoeus/typhoeus"]}>, response=#<struct VCR::Response status=#<struct VCR::ResponseStatus code=200, message="OK">, headers={"Last-Modified"=>["Tue, 15 Nov 2005 13:24:10 GMT"], "Connection"=>["Keep-Alive"], "Etag"=>["\"24ec5-1b6-4059a80bfd280\""], "Content-Type"=>["text/html; charset=UTF-8"], "Date"=>["Wed, 31 Mar 2010 02:43:23 GMT"], "Server"=>["Apache/2.2.3 (CentOS)"], "Content-Length"=>["438"], "Age"=>["3285"], "Accept-Ranges"=>["bytes"]}, body="example.com get response 1 with path=foo", http_version=nil>, recorded_at=2012-09-29 23:08:48 -0700>)
           expected: 0 times
           received: 1 time
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/library_hooks/typhoeus_spec.rb:22
     # ./lib/vcr/library_hooks/typhoeus.rb:77:in `block in <module:Typhoeus>'
     # ./lib/vcr/library_hooks/typhoeus.rb:86:in `block in <module:Typhoeus>'
     # ./spec/support/http_library_adapters.rb:170:in `block in make_http_request'
     # ./spec/support/http_library_adapters.rb:169:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:577:in `block (6 levels) in <top (required)>'

  7) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) plays back an empty body response exactly as it was recorded (e.g. nil vs empty string)
     Failure/Error: get_body_object make_http_request(:get, "http://localhost:#{VCR::SinatraApp.port}/204")
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x000001035ea818>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:62:in `block (6 levels) in <top (required)>'
     # ./lib/vcr/util/variable_args_block_caller.rb:9:in `call'
     # ./lib/vcr/util/variable_args_block_caller.rb:9:in `call_block'
     # ./lib/vcr.rb:169:in `use_cassette'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:61:in `block (5 levels) in <top (required)>'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:66:in `call'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:66:in `block (4 levels) in <top (required)>'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:59:in `block (3 levels) in <top (required)>'

  8) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) does not query the http interaction list excessively
     Failure/Error: make_http_request(:get, "http://localhost:#{VCR::SinatraApp.port}/foo")
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000103612958>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:119:in `block (3 levels) in <top (required)>'

  9) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) making an HTTP request that responds with 1 Set-Cookie header(s) returns the same header value when recording and replaying
     Failure/Error: get_header 'Set-Cookie', make_http_request(:get, "http://localhost:#{VCR::SinatraApp.port}/set-cookie-headers/#{header_count}")
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x0000010337c068>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:26:in `block (6 levels) in <top (required)>'
     # ./lib/vcr/util/variable_args_block_caller.rb:9:in `call'
     # ./lib/vcr/util/variable_args_block_caller.rb:9:in `call_block'
     # ./lib/vcr.rb:169:in `use_cassette'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:25:in `block (5 levels) in <top (required)>'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:31:in `block (5 levels) in <top (required)>'

  10) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) making an HTTP request that responds with 2 Set-Cookie header(s) returns the same header value when recording and replaying
     Failure/Error: get_header 'Set-Cookie', make_http_request(:get, "http://localhost:#{VCR::SinatraApp.port}/set-cookie-headers/#{header_count}")
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000103439758>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:26:in `block (6 levels) in <top (required)>'
     # ./lib/vcr/util/variable_args_block_caller.rb:9:in `call'
     # ./lib/vcr/util/variable_args_block_caller.rb:9:in `call_block'
     # ./lib/vcr.rb:169:in `use_cassette'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:25:in `block (5 levels) in <top (required)>'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:31:in `block (5 levels) in <top (required)>'

  11) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks correctly assigns the correct type to both before and after request hooks, even if they are different
     Failure/Error: make_http_request(:get, "http://localhost:#{VCR::SinatraApp.port}/foo")
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000103499090>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:332:in `block (4 levels) in <top (required)>'

  12) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when there is an around_http_request hook returns the response from request.proceed
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x000001035e8068>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:212:in `block (6 levels) in <top (required)>'
     # ./lib/vcr/util/variable_args_block_caller.rb:9:in `call'
     # ./lib/vcr/util/variable_args_block_caller.rb:9:in `call_block'
     # ./lib/vcr.rb:169:in `use_cassette'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:211:in `block (5 levels) in <top (required)>'

  13) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when there is an around_http_request hook ensures that both around/before are invoked or neither
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x000001033c1d20>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:85:in `on_ignored_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:315:in `block (5 levels) in <top (required)>'

  14) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when there is an around_http_request hook can be used to use a cassette for a request
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x000001065c2630>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:228:in `block (5 levels) in <top (required)>'

  15) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when there is an around_http_request hook does not get a dead fiber error when multiple requests are made
     Failure/Error: 3.times { make_http_request(:get, request_url) }
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000108975398>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:273:in `block (6 levels) in <top (required)>'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:273:in `times'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:273:in `block (5 levels) in <top (required)>'

  16) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when there is an around_http_request hook yields the request to the block
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000108868ec8>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:198:in `block (6 levels) in <top (required)>'
     # ./lib/vcr/util/variable_args_block_caller.rb:9:in `call'
     # ./lib/vcr/util/variable_args_block_caller.rb:9:in `call_block'
     # ./lib/vcr.rb:169:in `use_cassette'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:197:in `block (5 levels) in <top (required)>'

  17) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when there is an around_http_request hook nests them inside each other, making the first declared hook the outermost
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x000001034bdb20>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:85:in `on_ignored_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:250:in `block (5 levels) in <top (required)>'

  18) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when there is an around_http_request hook allows the hook to be filtered
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000108e7cfd0>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:85:in `on_ignored_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:293:in `block (5 levels) in <top (required)>'

  19) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when the request is ignored behaves like request hooks the before_http_request hook is only called once per request
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000107958500>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:342
     # ./lib/vcr/middleware/faraday.rb:85:in `on_ignored_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:5:in `make_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:18:in `block (3 levels) in <top (required)>'

  20) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when the request is ignored behaves like request hooks the before_http_request hook yields the request
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000107955238>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:342
     # ./lib/vcr/middleware/faraday.rb:85:in `on_ignored_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:5:in `make_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:26:in `block (3 levels) in <top (required)>'

  21) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when the request is ignored behaves like request hooks the after_http_request hook is not called if the library hook is disabled
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000108e7de30>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:342
     # ./lib/vcr/middleware/faraday.rb:85:in `on_ignored_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:5:in `make_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:38:in `block (3 levels) in <top (required)>'

  22) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when the request is ignored behaves like request hooks the after_http_request hook is only called once per request
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x000001089bd648>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:342
     # ./lib/vcr/middleware/faraday.rb:85:in `on_ignored_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:5:in `make_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:18:in `block (3 levels) in <top (required)>'

  23) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when the request is ignored behaves like request hooks the #type of the yielded request given to the before_http_request hook is ignored
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000107af63f8>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:342
     # ./lib/vcr/middleware/faraday.rb:85:in `on_ignored_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:5:in `make_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:46:in `block (3 levels) in <top (required)>'

  24) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when the request is ignored behaves like request hooks the after_http_request hook yields the request
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x0000010792f150>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:342
     # ./lib/vcr/middleware/faraday.rb:85:in `on_ignored_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:5:in `make_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:26:in `block (3 levels) in <top (required)>'

  25) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when the request is ignored behaves like request hooks the before_http_request hook is not called if the library hook is disabled
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x0000010792fd08>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:342
     # ./lib/vcr/middleware/faraday.rb:85:in `on_ignored_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:5:in `make_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:38:in `block (3 levels) in <top (required)>'

  26) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when the request is ignored behaves like request hooks the #type of the yielded request given to the after_http_request hook is ignored
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x000001089c1748>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:342
     # ./lib/vcr/middleware/faraday.rb:85:in `on_ignored_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:5:in `make_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:46:in `block (3 levels) in <top (required)>'

  27) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when the request is ignored behaves like request hooks the after_http_request hook yields the response if there is one and the second block arg is given
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000108bd4eb8>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:342
     # ./lib/vcr/middleware/faraday.rb:85:in `on_ignored_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:5:in `make_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:55:in `block (2 levels) in <top (required)>'

  28) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when a stubbed response is played back for the request behaves like request hooks the after_http_request hook is not called if the library hook is disabled
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000107858510>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:388
     # ./lib/vcr/middleware/faraday.rb:85:in `on_ignored_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:5:in `make_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:38:in `block (3 levels) in <top (required)>'

  29) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when a stubbed response is played back for the request behaves like request hooks the before_http_request hook is not called if the library hook is disabled
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x0000010617c3f0>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:388
     # ./lib/vcr/middleware/faraday.rb:85:in `on_ignored_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:5:in `make_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:38:in `block (3 levels) in <top (required)>'

  30) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when the request is not allowed behaves like request hooks the after_http_request hook is not called if the library hook is disabled
     Failure/Error: make_request(:disabled)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x000001079553f0>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:392
     # ./lib/vcr/middleware/faraday.rb:85:in `on_ignored_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:401:in `make_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:38:in `block (3 levels) in <top (required)>'

  31) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when the request is not allowed behaves like request hooks the before_http_request hook is not called if the library hook is disabled
     Failure/Error: make_request(:disabled)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000106121220>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:392
     # ./lib/vcr/middleware/faraday.rb:85:in `on_ignored_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:401:in `make_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:38:in `block (3 levels) in <top (required)>'

  32) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when the request is recorded behaves like request hooks the before_http_request hook is only called once per request
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x0000010606dd88>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:356
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:5:in `make_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:18:in `block (3 levels) in <top (required)>'

  33) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when the request is recorded behaves like request hooks the before_http_request hook yields the request
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x000001065bf570>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:356
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:5:in `make_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:26:in `block (3 levels) in <top (required)>'

  34) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when the request is recorded behaves like request hooks the #type of the yielded request given to the after_http_request hook is recordable
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x000001089c4290>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:356
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:5:in `make_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:46:in `block (3 levels) in <top (required)>'

  35) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when the request is recorded behaves like request hooks the after_http_request hook is only called once per request
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000108bd7550>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:356
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:5:in `make_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:18:in `block (3 levels) in <top (required)>'

  36) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when the request is recorded behaves like request hooks the before_http_request hook is not called if the library hook is disabled
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000108875510>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:356
     # ./lib/vcr/middleware/faraday.rb:85:in `on_ignored_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:5:in `make_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:38:in `block (3 levels) in <top (required)>'

  37) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when the request is recorded behaves like request hooks the #type of the yielded request given to the before_http_request hook is recordable
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000106112fb8>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:356
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:5:in `make_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:46:in `block (3 levels) in <top (required)>'

  38) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when the request is recorded behaves like request hooks the after_http_request hook yields the request
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x000001089f11a0>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:356
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:5:in `make_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:26:in `block (3 levels) in <top (required)>'

  39) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when the request is recorded behaves like request hooks the after_http_request hook yields the response if there is one and the second block arg is given
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000107878748>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:356
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:5:in `make_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:55:in `block (2 levels) in <top (required)>'

  40) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when the request is recorded behaves like request hooks the after_http_request hook is not called if the library hook is disabled
     Failure/Error: make_http_request(:get, request_url)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000106392c48>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:356
     # ./lib/vcr/middleware/faraday.rb:85:in `on_ignored_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:5:in `make_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:38:in `block (3 levels) in <top (required)>'

  41) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) request hooks when the request is recorded behaves like request hooks the after_http_request hook can be used to eject a cassette after the request is recorded
     Failure/Error: make_request
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x0000010638ffe8>
     Shared Example Group: "request hooks" called from ./spec/support/shared_example_groups/hook_into_http_library.rb:356
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/request_hooks.rb:5:in `make_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:377:in `block (6 levels) in <top (required)>'

  42) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) a request to a URL with a complex escaped query param properly records and playsback a request with a URL with a complex escaped query param
     Failure/Error: get_body_string make_http_request(:get, "http://localhost:#{VCR::SinatraApp.port}/record-and-playback?#{query}")
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x000001088c6168>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:42:in `block (3 levels) in test_record_and_playback'
     # ./lib/vcr/util/variable_args_block_caller.rb:9:in `call'
     # ./lib/vcr/util/variable_args_block_caller.rb:9:in `call_block'
     # ./lib/vcr.rb:169:in `use_cassette'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:41:in `block (2 levels) in test_record_and_playback'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:47:in `block (2 levels) in test_record_and_playback'

  43) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) a request to a URL with spaces encoded as + properly records and playsback a request with a URL with spaces encoded as +
     Failure/Error: get_body_string make_http_request(:get, "http://localhost:#{VCR::SinatraApp.port}/record-and-playback?#{query}")
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000108e89ac8>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:42:in `block (3 levels) in test_record_and_playback'
     # ./lib/vcr/util/variable_args_block_caller.rb:9:in `call'
     # ./lib/vcr/util/variable_args_block_caller.rb:9:in `call_block'
     # ./lib/vcr.rb:169:in `use_cassette'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:41:in `block (2 levels) in test_record_and_playback'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:47:in `block (2 levels) in test_record_and_playback'

  44) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) a request to a URL with spaces encoded as %20 properly records and playsback a request with a URL with spaces encoded as %20
     Failure/Error: get_body_string make_http_request(:get, "http://localhost:#{VCR::SinatraApp.port}/record-and-playback?#{query}")
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000108975b40>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:42:in `block (3 levels) in test_record_and_playback'
     # ./lib/vcr/util/variable_args_block_caller.rb:9:in `call'
     # ./lib/vcr/util/variable_args_block_caller.rb:9:in `call_block'
     # ./lib/vcr.rb:169:in `use_cassette'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:41:in `block (2 levels) in test_record_and_playback'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:47:in `block (2 levels) in test_record_and_playback'

  45) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) when VCR.real_http_connections_allowed? is returning true allows real http requests
     Failure/Error: get_body_string(make_http_request(:get, url)).should eq('FOO!')
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000106053320>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:483:in `block in test_real_http_request'

  46) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) when VCR.real_http_connections_allowed? is returning true recording new http requests records the response headers
     Failure/Error: make_http_request(:post, url, "the body", { 'X-Http-Foo' => 'bar' })
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x0000010792b898>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:490:in `block (2 levels) in test_real_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:531:in `block (2 levels) in test_real_http_request'

  47) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) when VCR.real_http_connections_allowed? is returning true recording new http requests records the request method
     Failure/Error: make_http_request(:post, url, "the body", { 'X-Http-Foo' => 'bar' })
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x000001063b8920>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:490:in `block (2 levels) in test_real_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:506:in `block (2 levels) in test_real_http_request'

  48) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) when VCR.real_http_connections_allowed? is returning true recording new http requests records the request body
     Failure/Error: make_http_request(:post, url, "the body", { 'X-Http-Foo' => 'bar' })
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x000001089f2ca8>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:490:in `block (2 levels) in test_real_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:510:in `block (2 levels) in test_real_http_request'

  49) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) when VCR.real_http_connections_allowed? is returning true recording new http requests records the response body
     Failure/Error: make_http_request(:post, url, "the body", { 'X-Http-Foo' => 'bar' })
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x000001061162a8>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:490:in `block (2 levels) in test_real_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:527:in `block (2 levels) in test_real_http_request'

  50) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) when VCR.real_http_connections_allowed? is returning true recording new http requests records the response status code
     Failure/Error: make_http_request(:post, url, "the body", { 'X-Http-Foo' => 'bar' })
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000108e57be0>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:490:in `block (2 levels) in test_real_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:519:in `block (2 levels) in test_real_http_request'

  51) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) when VCR.real_http_connections_allowed? is returning true recording new http requests records the request headers
     Failure/Error: make_http_request(:post, url, "the body", { 'X-Http-Foo' => 'bar' })
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x0000010898c8e0>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:490:in `block (2 levels) in test_real_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:514:in `block (2 levels) in test_real_http_request'

  52) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) when VCR.real_http_connections_allowed? is returning true recording new http requests records the request uri
     Failure/Error: make_http_request(:post, url, "the body", { 'X-Http-Foo' => 'bar' })
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x0000010792dda0>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:100:in `on_recordable_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:490:in `block (2 levels) in test_real_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:502:in `block (2 levels) in test_real_http_request'

  53) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) when VCR.real_http_connections_allowed? is returning false when ignore_hosts is configured to "127.0.0.1", "localhost" allows requests to localhost
     Failure/Error: get_body_string(make_http_request(:get, "http://#{localhost_alias}:#{VCR::SinatraApp.port}/localhost_test")).should eq(localhost_response)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x000001019c7168>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:85:in `on_ignored_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:559:in `block (7 levels) in <top (required)>'

  54) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (typhoeus) when VCR.real_http_connections_allowed? is returning false when ignore_hosts is configured to "127.0.0.1", "localhost" allows requests to 127.0.0.1
     Failure/Error: get_body_string(make_http_request(:get, "http://#{localhost_alias}:#{VCR::SinatraApp.port}/localhost_test")).should eq(localhost_response)
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000103081fe8>
     Shared Example Group: "a hook into an HTTP library" called from ./spec/vcr/middleware/faraday_spec.rb:6
     # ./lib/vcr/middleware/faraday.rb:85:in `on_ignored_request'
     # ./lib/vcr/request_handler.rb:24:in `handle'
     # ./lib/vcr/middleware/faraday.rb:45:in `handle'
     # ./lib/vcr/middleware/faraday.rb:30:in `call'
     # ./spec/support/http_library_adapters.rb:229:in `make_http_request'
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:559:in `block (7 levels) in <top (required)>'

  55) VCR::Middleware::Faraday behaves like a hook into an HTTP library using Faraday (net_http) plays back an empty body response exactly as it was recorded (e.g. nil vs empty string) FIXED
     Expected pending 'awaiting an external fix' to fail. No Error was raised.
     # ./spec/support/shared_example_groups/hook_into_http_library.rb:59:in `block (3 levels) in <top (required)>'

  56) VCR::Middleware::Faraday when making parallel requests works correctly with multiple parallel requests
     Failure/Error: connection.in_parallel do
     NoMethodError:
       undefined method `response_header' for #<Typhoeus::Response:0x00000103494658>
     # ./spec/vcr/middleware/faraday_spec.rb:54:in `block (5 levels) in <top (required)>'
     # ./lib/vcr/util/variable_args_block_caller.rb:9:in `call'
     # ./lib/vcr/util/variable_args_block_caller.rb:9:in `call_block'
     # ./lib/vcr.rb:169:in `use_cassette'
     # ./spec/vcr/middleware/faraday_spec.rb:53:in `block (4 levels) in <top (required)>'
     # ./spec/vcr/middleware/faraday_spec.rb:50:in `map'
@i0rek
Owner

Oh, I'm sorry. I forgot to update faraday after I made some changes. Its fixed now: i0rek/faraday@69a2fa6.

@myronmarston

Thanks, I can confirm that fixed most of the failures. I plan to take a look at the remaining ones later this week.

@i0rek
Owner

Great!

@myronmarston

@i0rek -- I fixed the last few typhoeus spec failures here:

myronmarston/vcr@9796c11

There are still a couple spec failures but those are things that are either fixed in VCR master or are due to the new faraday version (which I'll take care of).

I'm also going to want to refactor this a bit so that Typhoeus 0.4 is still supported if it's loaded...I don't want to force VCR users to upgrade Typhoeus. I'll need some time to do that refactoring before doing a release--just a heads up.

BTW, how do you plan to coordinate the release, given that Faraday, WebMock and VCR all have dependencies on Typhoeus and have pending changes to maintain 0.5 compatibility?

@i0rek
Owner

Thank you very much for taking care of these failures!

I don't know howto release 0.5 to be honest. I though I could release it and let the Faraday and Webmock picking up the changes as they like. But supporting both Typhoeus versions seems like a better idea to me! Maybe @mislav and @bblimke can say what they prefer.

@bblimke

@i0rek there is an option to create two separate adapters in WebMock, for Typhoeus 0.4 and 0.5, but I'm not sure that's worth it.
I could just release WebMock 1.9 with Typhoeus 0.5 support, and if people want to use 0.4 they can always use WebMock 1.8.

@i0rek
Owner

@bblimke ok. thats easy...

@i0rek
Owner

@technoweenie suggested to create a faraday-typhoeus gem: https://github.com/technoweenie/faraday/pull/196#issuecomment-9115701. That sounds even better than supporting multiple versions to me. I wonder if that could work for you both too @myronmarston and @bblimke?

@myronmarston

I've considered having separate gems for each of VCR's library-specific hooks, but I think it'd add a good deal of maintenance burden to have extra gem(s) to maintain (especially for what amounts to a single file of code).

As long as Typhoeus provides an easy way to detect what version is loaded (you've got a version constant, right?) than I can just use that to conditionally load one of two files, to maintain 0.4 and 0.5+ compatibility. I don't think it'll be a problem.

@i0rek
Owner

Ok. Of course there is a version constant!

Typhoeus::VERSION
#=> "0.5.0.rc"
@i0rek
Owner

Closing becasue @myronmarston took over for finetuning: https://github.com/myronmarston/vcr/tree/typhoeus_0.5.0.

@i0rek i0rek closed this
@myronmarston

For those who are following this, I just released VCR 2.3.0 with Typhoeus 0.5.0 support.

@i0rek
Owner

Great, thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.