vcr 3.0.3 → 6.2.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 (146) hide show
  1. checksums.yaml +5 -5
  2. data/lib/vcr/cassette/erb_renderer.rb +4 -2
  3. data/lib/vcr/cassette/http_interaction_list.rb +14 -9
  4. data/lib/vcr/cassette/migrator.rb +5 -6
  5. data/lib/vcr/cassette/persisters/file_system.rb +9 -1
  6. data/lib/vcr/cassette/serializers/compressed.rb +2 -2
  7. data/lib/vcr/cassette/serializers/json.rb +14 -8
  8. data/lib/vcr/cassette/serializers/psych.rb +10 -2
  9. data/lib/vcr/cassette/serializers/syck.rb +7 -1
  10. data/lib/vcr/cassette/serializers/yaml.rb +14 -2
  11. data/lib/vcr/cassette/serializers.rb +10 -0
  12. data/lib/vcr/cassette.rb +63 -16
  13. data/lib/vcr/configuration.rb +21 -8
  14. data/lib/vcr/deprecations.rb +0 -62
  15. data/lib/vcr/errors.rb +17 -12
  16. data/lib/vcr/library_hooks/excon.rb +8 -0
  17. data/lib/vcr/library_hooks/typhoeus.rb +91 -79
  18. data/lib/vcr/library_hooks/webmock.rb +2 -11
  19. data/lib/vcr/linked_cassette.rb +4 -4
  20. data/lib/vcr/middleware/excon.rb +1 -1
  21. data/lib/vcr/middleware/faraday.rb +29 -2
  22. data/lib/vcr/request_ignorer.rb +8 -1
  23. data/lib/vcr/request_matcher_registry.rb +3 -3
  24. data/lib/vcr/structs.rb +48 -32
  25. data/lib/vcr/test_frameworks/cucumber.rb +16 -5
  26. data/lib/vcr/test_frameworks/rspec.rb +34 -22
  27. data/lib/vcr/util/hooks.rb +1 -0
  28. data/lib/vcr/util/internet_connection.rb +15 -21
  29. data/lib/vcr/version.rb +2 -2
  30. data/lib/vcr.rb +52 -2
  31. metadata +45 -272
  32. data/features/CHANGELOG.md +0 -710
  33. data/features/CONTRIBUTING.md +0 -26
  34. data/features/LICENSE.md +0 -20
  35. data/features/README.md +0 -339
  36. data/features/Upgrade.md +0 -289
  37. data/features/about_these_examples.md +0 -18
  38. data/features/cassettes/allow_unused_http_interactions.feature +0 -100
  39. data/features/cassettes/automatic_re_recording.feature +0 -72
  40. data/features/cassettes/decompress.feature +0 -74
  41. data/features/cassettes/dynamic_erb.feature +0 -100
  42. data/features/cassettes/exclusive.feature +0 -126
  43. data/features/cassettes/format.feature +0 -411
  44. data/features/cassettes/freezing_time.feature +0 -68
  45. data/features/cassettes/naming.feature +0 -28
  46. data/features/cassettes/no_cassette.feature +0 -152
  47. data/features/cassettes/update_content_length_header.feature +0 -112
  48. data/features/configuration/allow_http_connections_when_no_cassette.feature +0 -55
  49. data/features/configuration/cassette_library_dir.feature +0 -31
  50. data/features/configuration/debug_logging.feature +0 -58
  51. data/features/configuration/default_cassette_options.feature +0 -100
  52. data/features/configuration/filter_sensitive_data.feature +0 -153
  53. data/features/configuration/hook_into.feature +0 -172
  54. data/features/configuration/ignore_request.feature +0 -192
  55. data/features/configuration/preserve_exact_body_bytes.feature +0 -108
  56. data/features/configuration/query_parser.feature +0 -84
  57. data/features/configuration/uri_parser.feature +0 -93
  58. data/features/getting_started.md +0 -82
  59. data/features/hooks/after_http_request.feature +0 -58
  60. data/features/hooks/around_http_request.feature +0 -57
  61. data/features/hooks/before_http_request.feature +0 -63
  62. data/features/hooks/before_playback.feature +0 -184
  63. data/features/hooks/before_record.feature +0 -172
  64. data/features/http_libraries/em_http_request.feature +0 -250
  65. data/features/http_libraries/net_http.feature +0 -179
  66. data/features/middleware/faraday.feature +0 -56
  67. data/features/middleware/rack.feature +0 -92
  68. data/features/record_modes/all.feature +0 -82
  69. data/features/record_modes/new_episodes.feature +0 -79
  70. data/features/record_modes/none.feature +0 -72
  71. data/features/record_modes/once.feature +0 -95
  72. data/features/request_matching/README.md +0 -30
  73. data/features/request_matching/body.feature +0 -91
  74. data/features/request_matching/body_as_json.feature +0 -90
  75. data/features/request_matching/custom_matcher.feature +0 -135
  76. data/features/request_matching/headers.feature +0 -85
  77. data/features/request_matching/host.feature +0 -95
  78. data/features/request_matching/identical_request_sequence.feature +0 -89
  79. data/features/request_matching/method.feature +0 -96
  80. data/features/request_matching/path.feature +0 -96
  81. data/features/request_matching/playback_repeats.feature +0 -98
  82. data/features/request_matching/query.feature +0 -97
  83. data/features/request_matching/uri.feature +0 -94
  84. data/features/request_matching/uri_without_param.feature +0 -101
  85. data/features/step_definitions/cli_steps.rb +0 -199
  86. data/features/support/env.rb +0 -46
  87. data/features/support/http_lib_filters.rb +0 -46
  88. data/features/test_frameworks/cucumber.feature +0 -211
  89. data/features/test_frameworks/rspec_macro.feature +0 -81
  90. data/features/test_frameworks/rspec_metadata.feature +0 -150
  91. data/features/test_frameworks/test_unit.feature +0 -49
  92. data/lib/vcr/extensions/net_http_response.rb +0 -36
  93. data/lib/vcr/library_hooks/fakeweb.rb +0 -197
  94. data/lib/vcr/library_hooks/typhoeus_0.4.rb +0 -103
  95. data/spec/acceptance/concurrency_spec.rb +0 -51
  96. data/spec/acceptance/threading_spec.rb +0 -34
  97. data/spec/fixtures/cassette_spec/1_x_cassette.yml +0 -110
  98. data/spec/fixtures/cassette_spec/empty.yml +0 -0
  99. data/spec/fixtures/cassette_spec/example.yml +0 -111
  100. data/spec/fixtures/cassette_spec/with_localhost_requests.yml +0 -111
  101. data/spec/fixtures/fake_example_responses.yml +0 -110
  102. data/spec/fixtures/match_requests_on.yml +0 -187
  103. data/spec/lib/vcr/cassette/erb_renderer_spec.rb +0 -53
  104. data/spec/lib/vcr/cassette/http_interaction_list_spec.rb +0 -295
  105. data/spec/lib/vcr/cassette/migrator_spec.rb +0 -196
  106. data/spec/lib/vcr/cassette/persisters/file_system_spec.rb +0 -75
  107. data/spec/lib/vcr/cassette/persisters_spec.rb +0 -39
  108. data/spec/lib/vcr/cassette/serializers_spec.rb +0 -182
  109. data/spec/lib/vcr/cassette_spec.rb +0 -618
  110. data/spec/lib/vcr/configuration_spec.rb +0 -326
  111. data/spec/lib/vcr/deprecations_spec.rb +0 -85
  112. data/spec/lib/vcr/errors_spec.rb +0 -178
  113. data/spec/lib/vcr/extensions/net_http_response_spec.rb +0 -86
  114. data/spec/lib/vcr/library_hooks/excon_spec.rb +0 -104
  115. data/spec/lib/vcr/library_hooks/fakeweb_spec.rb +0 -169
  116. data/spec/lib/vcr/library_hooks/faraday_spec.rb +0 -68
  117. data/spec/lib/vcr/library_hooks/typhoeus_0.4_spec.rb +0 -36
  118. data/spec/lib/vcr/library_hooks/typhoeus_spec.rb +0 -162
  119. data/spec/lib/vcr/library_hooks/webmock_spec.rb +0 -117
  120. data/spec/lib/vcr/library_hooks_spec.rb +0 -51
  121. data/spec/lib/vcr/middleware/faraday_spec.rb +0 -181
  122. data/spec/lib/vcr/middleware/rack_spec.rb +0 -115
  123. data/spec/lib/vcr/request_ignorer_spec.rb +0 -70
  124. data/spec/lib/vcr/request_matcher_registry_spec.rb +0 -345
  125. data/spec/lib/vcr/structs_spec.rb +0 -732
  126. data/spec/lib/vcr/test_frameworks/cucumber_spec.rb +0 -107
  127. data/spec/lib/vcr/test_frameworks/rspec_spec.rb +0 -94
  128. data/spec/lib/vcr/util/hooks_spec.rb +0 -158
  129. data/spec/lib/vcr/util/internet_connection_spec.rb +0 -37
  130. data/spec/lib/vcr/util/version_checker_spec.rb +0 -31
  131. data/spec/lib/vcr/version_spec.rb +0 -27
  132. data/spec/lib/vcr_spec.rb +0 -354
  133. data/spec/monkey_patches.rb +0 -186
  134. data/spec/spec_helper.rb +0 -63
  135. data/spec/support/configuration_stubbing.rb +0 -8
  136. data/spec/support/cucumber_helpers.rb +0 -39
  137. data/spec/support/fixnum_extension.rb +0 -10
  138. data/spec/support/http_library_adapters.rb +0 -289
  139. data/spec/support/limited_uri.rb +0 -21
  140. data/spec/support/ruby_interpreter.rb +0 -7
  141. data/spec/support/shared_example_groups/excon.rb +0 -63
  142. data/spec/support/shared_example_groups/hook_into_http_library.rb +0 -594
  143. data/spec/support/shared_example_groups/request_hooks.rb +0 -59
  144. data/spec/support/sinatra_app.rb +0 -86
  145. data/spec/support/vcr_localhost_server.rb +0 -76
  146. data/spec/support/vcr_stub_helpers.rb +0 -17
@@ -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