vcr 3.0.2 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. checksums.yaml +5 -5
  2. data/lib/vcr.rb +33 -1
  3. data/lib/vcr/cassette.rb +47 -12
  4. data/lib/vcr/cassette/http_interaction_list.rb +14 -9
  5. data/lib/vcr/cassette/migrator.rb +0 -5
  6. data/lib/vcr/cassette/persisters/file_system.rb +9 -1
  7. data/lib/vcr/cassette/serializers/compressed.rb +2 -2
  8. data/lib/vcr/cassette/serializers/json.rb +7 -7
  9. data/lib/vcr/cassette/serializers/psych.rb +3 -1
  10. data/lib/vcr/cassette/serializers/yaml.rb +3 -1
  11. data/lib/vcr/configuration.rb +20 -8
  12. data/lib/vcr/deprecations.rb +0 -62
  13. data/lib/vcr/errors.rb +17 -12
  14. data/lib/vcr/library_hooks/excon.rb +8 -0
  15. data/lib/vcr/library_hooks/typhoeus.rb +37 -8
  16. data/lib/vcr/linked_cassette.rb +4 -4
  17. data/lib/vcr/middleware/faraday.rb +10 -1
  18. data/lib/vcr/request_ignorer.rb +4 -1
  19. data/lib/vcr/request_matcher_registry.rb +1 -1
  20. data/lib/vcr/structs.rb +48 -32
  21. data/lib/vcr/test_frameworks/cucumber.rb +4 -4
  22. data/lib/vcr/test_frameworks/rspec.rb +12 -3
  23. data/lib/vcr/util/hooks.rb +1 -0
  24. data/lib/vcr/util/internet_connection.rb +15 -21
  25. data/lib/vcr/version.rb +1 -1
  26. metadata +36 -263
  27. data/features/CHANGELOG.md +0 -1
  28. data/features/CONTRIBUTING.md +0 -1
  29. data/features/LICENSE.md +0 -1
  30. data/features/README.md +0 -1
  31. data/features/Upgrade.md +0 -1
  32. data/features/about_these_examples.md +0 -18
  33. data/features/cassettes/allow_unused_http_interactions.feature +0 -100
  34. data/features/cassettes/automatic_re_recording.feature +0 -72
  35. data/features/cassettes/decompress.feature +0 -74
  36. data/features/cassettes/dynamic_erb.feature +0 -100
  37. data/features/cassettes/exclusive.feature +0 -126
  38. data/features/cassettes/format.feature +0 -411
  39. data/features/cassettes/freezing_time.feature +0 -68
  40. data/features/cassettes/naming.feature +0 -28
  41. data/features/cassettes/no_cassette.feature +0 -152
  42. data/features/cassettes/update_content_length_header.feature +0 -112
  43. data/features/configuration/allow_http_connections_when_no_cassette.feature +0 -55
  44. data/features/configuration/cassette_library_dir.feature +0 -31
  45. data/features/configuration/debug_logging.feature +0 -58
  46. data/features/configuration/default_cassette_options.feature +0 -100
  47. data/features/configuration/filter_sensitive_data.feature +0 -153
  48. data/features/configuration/hook_into.feature +0 -172
  49. data/features/configuration/ignore_request.feature +0 -192
  50. data/features/configuration/preserve_exact_body_bytes.feature +0 -108
  51. data/features/configuration/query_parser.feature +0 -84
  52. data/features/configuration/uri_parser.feature +0 -93
  53. data/features/getting_started.md +0 -82
  54. data/features/hooks/after_http_request.feature +0 -58
  55. data/features/hooks/around_http_request.feature +0 -57
  56. data/features/hooks/before_http_request.feature +0 -63
  57. data/features/hooks/before_playback.feature +0 -184
  58. data/features/hooks/before_record.feature +0 -172
  59. data/features/http_libraries/em_http_request.feature +0 -250
  60. data/features/http_libraries/net_http.feature +0 -179
  61. data/features/middleware/faraday.feature +0 -56
  62. data/features/middleware/rack.feature +0 -92
  63. data/features/record_modes/all.feature +0 -82
  64. data/features/record_modes/new_episodes.feature +0 -79
  65. data/features/record_modes/none.feature +0 -72
  66. data/features/record_modes/once.feature +0 -95
  67. data/features/request_matching/README.md +0 -30
  68. data/features/request_matching/body.feature +0 -91
  69. data/features/request_matching/body_as_json.feature +0 -90
  70. data/features/request_matching/custom_matcher.feature +0 -135
  71. data/features/request_matching/headers.feature +0 -85
  72. data/features/request_matching/host.feature +0 -95
  73. data/features/request_matching/identical_request_sequence.feature +0 -89
  74. data/features/request_matching/method.feature +0 -96
  75. data/features/request_matching/path.feature +0 -96
  76. data/features/request_matching/playback_repeats.feature +0 -98
  77. data/features/request_matching/query.feature +0 -97
  78. data/features/request_matching/uri.feature +0 -94
  79. data/features/request_matching/uri_without_param.feature +0 -101
  80. data/features/step_definitions/cli_steps.rb +0 -199
  81. data/features/support/env.rb +0 -46
  82. data/features/support/http_lib_filters.rb +0 -46
  83. data/features/test_frameworks/cucumber.feature +0 -211
  84. data/features/test_frameworks/rspec_macro.feature +0 -81
  85. data/features/test_frameworks/rspec_metadata.feature +0 -150
  86. data/features/test_frameworks/test_unit.feature +0 -49
  87. data/lib/vcr/extensions/net_http_response.rb +0 -36
  88. data/lib/vcr/library_hooks/fakeweb.rb +0 -197
  89. data/spec/acceptance/concurrency_spec.rb +0 -51
  90. data/spec/acceptance/threading_spec.rb +0 -34
  91. data/spec/fixtures/cassette_spec/1_x_cassette.yml +0 -110
  92. data/spec/fixtures/cassette_spec/empty.yml +0 -0
  93. data/spec/fixtures/cassette_spec/example.yml +0 -111
  94. data/spec/fixtures/cassette_spec/with_localhost_requests.yml +0 -111
  95. data/spec/fixtures/fake_example_responses.yml +0 -110
  96. data/spec/fixtures/match_requests_on.yml +0 -187
  97. data/spec/lib/vcr/cassette/erb_renderer_spec.rb +0 -53
  98. data/spec/lib/vcr/cassette/http_interaction_list_spec.rb +0 -295
  99. data/spec/lib/vcr/cassette/migrator_spec.rb +0 -196
  100. data/spec/lib/vcr/cassette/persisters/file_system_spec.rb +0 -75
  101. data/spec/lib/vcr/cassette/persisters_spec.rb +0 -39
  102. data/spec/lib/vcr/cassette/serializers_spec.rb +0 -182
  103. data/spec/lib/vcr/cassette_spec.rb +0 -618
  104. data/spec/lib/vcr/configuration_spec.rb +0 -326
  105. data/spec/lib/vcr/deprecations_spec.rb +0 -85
  106. data/spec/lib/vcr/errors_spec.rb +0 -178
  107. data/spec/lib/vcr/extensions/net_http_response_spec.rb +0 -86
  108. data/spec/lib/vcr/library_hooks/excon_spec.rb +0 -104
  109. data/spec/lib/vcr/library_hooks/fakeweb_spec.rb +0 -169
  110. data/spec/lib/vcr/library_hooks/faraday_spec.rb +0 -68
  111. data/spec/lib/vcr/library_hooks/typhoeus_0.4_spec.rb +0 -36
  112. data/spec/lib/vcr/library_hooks/typhoeus_spec.rb +0 -162
  113. data/spec/lib/vcr/library_hooks/webmock_spec.rb +0 -117
  114. data/spec/lib/vcr/library_hooks_spec.rb +0 -51
  115. data/spec/lib/vcr/middleware/faraday_spec.rb +0 -181
  116. data/spec/lib/vcr/middleware/rack_spec.rb +0 -115
  117. data/spec/lib/vcr/request_ignorer_spec.rb +0 -70
  118. data/spec/lib/vcr/request_matcher_registry_spec.rb +0 -345
  119. data/spec/lib/vcr/structs_spec.rb +0 -732
  120. data/spec/lib/vcr/test_frameworks/cucumber_spec.rb +0 -107
  121. data/spec/lib/vcr/test_frameworks/rspec_spec.rb +0 -94
  122. data/spec/lib/vcr/util/hooks_spec.rb +0 -158
  123. data/spec/lib/vcr/util/internet_connection_spec.rb +0 -37
  124. data/spec/lib/vcr/util/version_checker_spec.rb +0 -31
  125. data/spec/lib/vcr/version_spec.rb +0 -27
  126. data/spec/lib/vcr_spec.rb +0 -354
  127. data/spec/monkey_patches.rb +0 -186
  128. data/spec/spec_helper.rb +0 -63
  129. data/spec/support/configuration_stubbing.rb +0 -8
  130. data/spec/support/cucumber_helpers.rb +0 -39
  131. data/spec/support/fixnum_extension.rb +0 -10
  132. data/spec/support/http_library_adapters.rb +0 -289
  133. data/spec/support/limited_uri.rb +0 -21
  134. data/spec/support/ruby_interpreter.rb +0 -7
  135. data/spec/support/shared_example_groups/excon.rb +0 -63
  136. data/spec/support/shared_example_groups/hook_into_http_library.rb +0 -594
  137. data/spec/support/shared_example_groups/request_hooks.rb +0 -59
  138. data/spec/support/sinatra_app.rb +0 -86
  139. data/spec/support/vcr_localhost_server.rb +0 -76
  140. data/spec/support/vcr_stub_helpers.rb +0 -17
@@ -1,59 +0,0 @@
1
- shared_examples_for "request hooks" do |library_hook_name, request_type|
2
- let(:request_url) { "http://localhost:#{VCR::SinatraApp.port}/foo" }
3
-
4
- def make_request(disabled = false)
5
- make_http_request(:get, request_url)
6
- end
7
-
8
- def assert_expected_response(response)
9
- expect(response.status.code).to eq(200)
10
- expect(response.body).to eq('FOO!')
11
- end
12
-
13
- [:before_http_request, :after_http_request].each do |hook|
14
- specify "the #{hook} hook is only called once per request" do
15
- call_count = 0
16
- VCR.configuration.send(hook) { |r| call_count += 1 }
17
-
18
- make_request
19
- expect(call_count).to eq(1)
20
- end
21
-
22
- specify "the #{hook} hook yields the request" do
23
- request = nil
24
- VCR.configuration.send(hook) { |r| request = r }
25
-
26
- make_request
27
- expect(request.method).to be(:get)
28
- expect(request.uri).to eq(request_url)
29
- end
30
-
31
- specify "the #{hook} hook is not called if the library hook is disabled" do
32
- expect(VCR.library_hooks).to respond_to(:disabled?)
33
- allow(VCR.library_hooks).to receive(:disabled?).and_return(true)
34
-
35
- hook_called = false
36
- VCR.configuration.send(hook) { |r| hook_called = true }
37
-
38
- make_request(:disabled)
39
- expect(hook_called).to be false
40
- end
41
-
42
- specify "the #type of the yielded request given to the #{hook} hook is #{request_type}" do
43
- request = nil
44
- VCR.configuration.send(hook) { |r| request = r }
45
-
46
- make_request
47
- expect(request.type).to be(request_type)
48
- end
49
- end
50
-
51
- specify "the after_http_request hook yields the response if there is one and the second block arg is given" do
52
- response = nil
53
- VCR.configuration.after_http_request { |req, res| response = res }
54
-
55
- make_request
56
- assert_expected_response(response)
57
- end
58
- end
59
-
@@ -1,86 +0,0 @@
1
- require 'sinatra'
2
-
3
- module VCR
4
- class SinatraApp < ::Sinatra::Base
5
- disable :protection
6
-
7
- get '/' do
8
- "GET to root"
9
- end
10
-
11
- get '/search' do
12
- "query: #{params[:q]}"
13
- end
14
-
15
- get '/localhost_test' do
16
- "Localhost response"
17
- end
18
-
19
- get '/foo' do
20
- "FOO!"
21
- end
22
-
23
- get '/redirect-to-root' do
24
- redirect to('/')
25
- end
26
-
27
- post '/foo' do
28
- "FOO!"
29
- end
30
-
31
- post '/return-request-body' do
32
- request.body
33
- end
34
-
35
- get '/set-cookie-headers/1' do
36
- headers 'Set-Cookie' => 'foo'
37
- 'header set'
38
- end
39
-
40
- get '/set-cookie-headers/2' do
41
- headers 'Set-Cookie' => %w[ bar foo ]
42
- 'header set'
43
- end
44
-
45
- get '/204' do
46
- status 204
47
- end
48
-
49
- get '/404_not_200' do
50
- status 404
51
- '404 not 200'
52
- end
53
-
54
- # we use a global counter so that every response is different;
55
- # this ensures that the test demonstrates that the response
56
- # is being played back (and not running a 2nd real request)
57
- $record_and_playback_response_count ||= 0
58
- get '/record-and-playback' do
59
- "Response #{$record_and_playback_response_count += 1}"
60
- end
61
-
62
- post '/record-and-playback' do
63
- "Response #{$record_and_playback_response_count += 1}"
64
- end
65
-
66
- @_boot_failed = false
67
-
68
- class << self
69
- def port
70
- server.port
71
- end
72
-
73
- def server
74
- raise "Sinatra app failed to boot." if @_boot_failed
75
- @server ||= begin
76
- VCR::LocalhostServer.new(new)
77
- rescue
78
- @_boot_failed = true
79
- raise
80
- end
81
- end
82
-
83
- alias boot server
84
- end
85
- end
86
- end
@@ -1,76 +0,0 @@
1
- require 'rack'
2
- require 'rack/handler/webrick'
3
- require 'net/http'
4
-
5
- # The code for this is inspired by Capybara's server:
6
- # http://github.com/jnicklas/capybara/blob/0.3.9/lib/capybara/server.rb
7
- module VCR
8
- class LocalhostServer
9
- READY_MESSAGE = "VCR server ready"
10
-
11
- class Identify
12
- def initialize(app)
13
- @app = app
14
- end
15
-
16
- def call(env)
17
- if env["PATH_INFO"] == "/__identify__"
18
- [200, {}, [VCR::LocalhostServer::READY_MESSAGE]]
19
- else
20
- @app.call(env)
21
- end
22
- end
23
- end
24
-
25
- attr_reader :port
26
-
27
- def initialize(rack_app, port = nil)
28
- @port = port || find_available_port
29
- @rack_app = rack_app
30
- concurrently { boot }
31
- wait_until(30, "Boot failed.") { booted? }
32
- end
33
-
34
- private
35
-
36
- def find_available_port
37
- server = TCPServer.new('127.0.0.1', 0)
38
- server.addr[1]
39
- ensure
40
- server.close if server
41
- end
42
-
43
- def boot
44
- # Use WEBrick since it's part of the ruby standard library and is available on all ruby interpreters.
45
- options = { :Port => port, :ShutdownSocketWithoutClose => true }
46
- options.merge!(:AccessLog => [], :Logger => WEBrick::BasicLog.new(StringIO.new)) unless ENV['VERBOSE_SERVER']
47
- Rack::Handler::WEBrick.run(Identify.new(@rack_app), options)
48
- end
49
-
50
- def booted?
51
- res = ::Net::HTTP.get_response("localhost", '/__identify__', port)
52
- if res.is_a?(::Net::HTTPSuccess) or res.is_a?(::Net::HTTPRedirection)
53
- return res.body == READY_MESSAGE
54
- end
55
- rescue Errno::ECONNREFUSED, Errno::EBADF
56
- return false
57
- end
58
-
59
- def concurrently
60
- # JRuby doesn't support forking.
61
- # Rubinius does, but there's a weird issue with the booted? check not working,
62
- # so we're just using a thread for now.
63
- Thread.new { yield }
64
- end
65
-
66
- def wait_until(timeout, error_message, &block)
67
- start_time = Time.now
68
-
69
- while true
70
- return if yield
71
- raise TimeoutError.new(error_message) if (Time.now - start_time) > timeout
72
- sleep(0.01)
73
- end
74
- end
75
- end
76
- end
@@ -1,17 +0,0 @@
1
- module VCRStubHelpers
2
- def interactions_from(file)
3
- hashes = YAML.load_file(File.join(VCR::SPEC_ROOT, 'fixtures', file))['http_interactions']
4
- hashes.map { |h| VCR::HTTPInteraction.from_hash(h) }
5
- end
6
-
7
- def stub_requests(*args)
8
- allow(VCR).to receive(:http_interactions).and_return(VCR::Cassette::HTTPInteractionList.new(*args))
9
- end
10
-
11
- def http_interaction(url, response_body = "FOO!", status_code = 200)
12
- request = VCR::Request.new(:get, request_url)
13
- response_status = VCR::ResponseStatus.new(status_code)
14
- response = VCR::Response.new(response_status, nil, response_body, '1.1')
15
- VCR::HTTPInteraction.new(request, response)
16
- end
17
- end