vcr 4.0.0 → 6.1.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.
- checksums.yaml +5 -5
- data/lib/vcr/cassette/erb_renderer.rb +4 -2
- data/lib/vcr/cassette/http_interaction_list.rb +14 -9
- data/lib/vcr/cassette/migrator.rb +5 -6
- data/lib/vcr/cassette/persisters/file_system.rb +9 -1
- data/lib/vcr/cassette/serializers/compressed.rb +2 -2
- data/lib/vcr/cassette/serializers/json.rb +14 -8
- data/lib/vcr/cassette/serializers/psych.rb +10 -2
- data/lib/vcr/cassette/serializers/syck.rb +7 -1
- data/lib/vcr/cassette/serializers/yaml.rb +14 -2
- data/lib/vcr/cassette/serializers.rb +10 -0
- data/lib/vcr/cassette.rb +41 -14
- data/lib/vcr/configuration.rb +17 -3
- data/lib/vcr/errors.rb +1 -12
- data/lib/vcr/library_hooks/excon.rb +8 -0
- data/lib/vcr/library_hooks/typhoeus.rb +94 -111
- data/lib/vcr/library_hooks/webmock.rb +2 -11
- data/lib/vcr/linked_cassette.rb +4 -4
- data/lib/vcr/middleware/excon.rb +1 -1
- data/lib/vcr/middleware/faraday.rb +5 -0
- data/lib/vcr/request_ignorer.rb +8 -1
- data/lib/vcr/request_matcher_registry.rb +3 -3
- data/lib/vcr/structs.rb +47 -31
- data/lib/vcr/test_frameworks/cucumber.rb +16 -5
- data/lib/vcr/test_frameworks/rspec.rb +34 -22
- data/lib/vcr/util/internet_connection.rb +15 -21
- data/lib/vcr/version.rb +2 -2
- data/lib/vcr.rb +44 -11
- metadata +50 -37
- data/lib/vcr/library_hooks/typhoeus_0.4.rb +0 -103
data/lib/vcr/version.rb
CHANGED
@@ -10,7 +10,7 @@ module VCR
|
|
10
10
|
# * `parts` [Array<Integer>] List of the version parts.
|
11
11
|
def version
|
12
12
|
@version ||= begin
|
13
|
-
string = '
|
13
|
+
string = +'6.1.0'
|
14
14
|
|
15
15
|
def string.parts
|
16
16
|
split('.').map { |p| p.to_i }
|
@@ -28,7 +28,7 @@ module VCR
|
|
28
28
|
parts[2]
|
29
29
|
end
|
30
30
|
|
31
|
-
string
|
31
|
+
string.freeze
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
data/lib/vcr.rb
CHANGED
@@ -52,7 +52,7 @@ module VCR
|
|
52
52
|
# Inserts the named cassette using the given cassette options.
|
53
53
|
# New HTTP interactions, if allowed by the cassette's `:record` option, will
|
54
54
|
# be recorded to the cassette. The cassette's existing HTTP interactions
|
55
|
-
# will be used to stub requests, unless prevented by the
|
55
|
+
# will be used to stub requests, unless prevented by the cassette's
|
56
56
|
# `:record` option.
|
57
57
|
#
|
58
58
|
# @example
|
@@ -107,6 +107,12 @@ module VCR
|
|
107
107
|
# @option options :persist_with [Symbol] Which cassette persister to
|
108
108
|
# use. Defaults to :file_system. You can also register and use a
|
109
109
|
# custom persister.
|
110
|
+
# @option options :persister_options [Hash] Pass options to the
|
111
|
+
# persister specified in `persist_with`. Currently available options for the file_system persister:
|
112
|
+
# - `:downcase_cassette_names`: when `true`, names of cassettes will be
|
113
|
+
# normalized in lowercase before reading and writing, which can avoid
|
114
|
+
# confusion when using both case-sensitive and case-insensitive file
|
115
|
+
# systems.
|
110
116
|
# @option options :preserve_exact_body_bytes [Boolean] Whether or not
|
111
117
|
# to base64 encode the bytes of the requests and responses for this cassette
|
112
118
|
# when serializing it. See also `VCR::Configuration#preserve_exact_body_bytes`.
|
@@ -186,6 +192,9 @@ module VCR
|
|
186
192
|
|
187
193
|
begin
|
188
194
|
call_block(block, cassette)
|
195
|
+
rescue StandardError
|
196
|
+
cassette.run_failed!
|
197
|
+
raise
|
189
198
|
ensure
|
190
199
|
eject_cassette
|
191
200
|
end
|
@@ -194,18 +203,21 @@ module VCR
|
|
194
203
|
# Inserts multiple cassettes the given names
|
195
204
|
#
|
196
205
|
# @example
|
197
|
-
#
|
198
|
-
#
|
199
|
-
#
|
200
|
-
#
|
201
|
-
#
|
202
|
-
#
|
203
|
-
#
|
206
|
+
# cassettes = [
|
207
|
+
# { name: 'github' },
|
208
|
+
# { name: 'apple', options: { erb: true } }
|
209
|
+
# ]
|
210
|
+
# VCR.use_cassettes(cassettes) do
|
211
|
+
# # make multiple HTTP requests
|
212
|
+
# end
|
204
213
|
def use_cassettes(cassettes, &block)
|
205
|
-
return use_cassette(cassettes.last[:name]) { block.call } if cassettes.length == 1
|
206
214
|
cassette = cassettes.pop
|
207
|
-
use_cassette(cassette[:name], cassette[:options]) do
|
208
|
-
|
215
|
+
use_cassette(cassette[:name], cassette[:options] || {}) do
|
216
|
+
if cassettes.empty?
|
217
|
+
block.call
|
218
|
+
else
|
219
|
+
use_cassettes(cassettes, &block)
|
220
|
+
end
|
209
221
|
end
|
210
222
|
end
|
211
223
|
|
@@ -254,6 +266,7 @@ module VCR
|
|
254
266
|
# @see #turn_off!
|
255
267
|
# @see #turn_on!
|
256
268
|
# @see #turned_on?
|
269
|
+
# @see #turned_on
|
257
270
|
def turned_off(options = {})
|
258
271
|
turn_off!(options)
|
259
272
|
|
@@ -289,11 +302,28 @@ module VCR
|
|
289
302
|
set_context_value(:turned_off, true)
|
290
303
|
end
|
291
304
|
|
305
|
+
# Turns on VCR, for the duration of a block.
|
306
|
+
# @param (see #turn_off!)
|
307
|
+
# @return [void]
|
308
|
+
# @see #turn_off!
|
309
|
+
# @see #turned_off
|
310
|
+
# @see #turned_on?
|
311
|
+
def turned_on(options = {})
|
312
|
+
turn_on!
|
313
|
+
|
314
|
+
begin
|
315
|
+
yield
|
316
|
+
ensure
|
317
|
+
turn_off!(options)
|
318
|
+
end
|
319
|
+
end
|
320
|
+
|
292
321
|
# Turns on VCR, if it has previously been turned off.
|
293
322
|
# @return [void]
|
294
323
|
# @see #turn_off!
|
295
324
|
# @see #turned_off
|
296
325
|
# @see #turned_on?
|
326
|
+
# @see #turned_on
|
297
327
|
def turn_on!
|
298
328
|
set_context_value(:turned_off, false)
|
299
329
|
end
|
@@ -305,6 +335,9 @@ module VCR
|
|
305
335
|
# @see #turn_off!
|
306
336
|
# @see #turned_off
|
307
337
|
def turned_on?
|
338
|
+
linked_context = current_context[:linked_context]
|
339
|
+
return !linked_context[:turned_off] if linked_context
|
340
|
+
|
308
341
|
!context_value(:turned_off)
|
309
342
|
end
|
310
343
|
|
metadata
CHANGED
@@ -1,14 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vcr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 6.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Myron Marston
|
8
|
-
|
8
|
+
- Kurtis Rainbolt-Greene
|
9
|
+
- Olle Jonsson
|
10
|
+
autorequire:
|
9
11
|
bindir: bin
|
10
12
|
cert_chain: []
|
11
|
-
date:
|
13
|
+
date: 2022-03-13 00:00:00.000000000 Z
|
12
14
|
dependencies:
|
13
15
|
- !ruby/object:Gem::Dependency
|
14
16
|
name: bundler
|
@@ -16,14 +18,14 @@ dependencies:
|
|
16
18
|
requirements:
|
17
19
|
- - "~>"
|
18
20
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
21
|
+
version: '2.0'
|
20
22
|
type: :development
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
23
25
|
requirements:
|
24
26
|
- - "~>"
|
25
27
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
28
|
+
version: '2.0'
|
27
29
|
- !ruby/object:Gem::Dependency
|
28
30
|
name: rspec
|
29
31
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,28 +46,28 @@ dependencies:
|
|
44
46
|
requirements:
|
45
47
|
- - "~>"
|
46
48
|
- !ruby/object:Gem::Version
|
47
|
-
version: 3.
|
49
|
+
version: 3.4.4
|
48
50
|
type: :development
|
49
51
|
prerelease: false
|
50
52
|
version_requirements: !ruby/object:Gem::Requirement
|
51
53
|
requirements:
|
52
54
|
- - "~>"
|
53
55
|
- !ruby/object:Gem::Version
|
54
|
-
version: 3.
|
56
|
+
version: 3.4.4
|
55
57
|
- !ruby/object:Gem::Dependency
|
56
58
|
name: rake
|
57
59
|
requirement: !ruby/object:Gem::Requirement
|
58
60
|
requirements:
|
59
|
-
- - "
|
61
|
+
- - ">="
|
60
62
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
63
|
+
version: 12.3.3
|
62
64
|
type: :development
|
63
65
|
prerelease: false
|
64
66
|
version_requirements: !ruby/object:Gem::Requirement
|
65
67
|
requirements:
|
66
|
-
- - "
|
68
|
+
- - ">="
|
67
69
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
70
|
+
version: 12.3.3
|
69
71
|
- !ruby/object:Gem::Dependency
|
70
72
|
name: pry
|
71
73
|
requirement: !ruby/object:Gem::Requirement
|
@@ -151,63 +153,75 @@ dependencies:
|
|
151
153
|
- !ruby/object:Gem::Version
|
152
154
|
version: '0'
|
153
155
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
156
|
+
name: hashdiff
|
155
157
|
requirement: !ruby/object:Gem::Requirement
|
156
158
|
requirements:
|
157
|
-
- - "
|
159
|
+
- - ">="
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: 1.0.0.beta1
|
162
|
+
- - "<"
|
158
163
|
- !ruby/object:Gem::Version
|
159
|
-
version: 2.0.
|
164
|
+
version: 2.0.0
|
160
165
|
type: :development
|
161
166
|
prerelease: false
|
162
167
|
version_requirements: !ruby/object:Gem::Requirement
|
163
168
|
requirements:
|
164
|
-
- - "
|
169
|
+
- - ">="
|
165
170
|
- !ruby/object:Gem::Version
|
166
|
-
version:
|
171
|
+
version: 1.0.0.beta1
|
172
|
+
- - "<"
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: 2.0.0
|
167
175
|
- !ruby/object:Gem::Dependency
|
168
|
-
name:
|
176
|
+
name: cucumber
|
169
177
|
requirement: !ruby/object:Gem::Requirement
|
170
178
|
requirements:
|
171
179
|
- - "~>"
|
172
180
|
- !ruby/object:Gem::Version
|
173
|
-
version: 0
|
181
|
+
version: '7.0'
|
174
182
|
type: :development
|
175
183
|
prerelease: false
|
176
184
|
version_requirements: !ruby/object:Gem::Requirement
|
177
185
|
requirements:
|
178
186
|
- - "~>"
|
179
187
|
- !ruby/object:Gem::Version
|
180
|
-
version: 0
|
188
|
+
version: '7.0'
|
181
189
|
- !ruby/object:Gem::Dependency
|
182
|
-
name:
|
190
|
+
name: aruba
|
183
191
|
requirement: !ruby/object:Gem::Requirement
|
184
192
|
requirements:
|
185
193
|
- - "~>"
|
186
194
|
- !ruby/object:Gem::Version
|
187
|
-
version: 0.
|
195
|
+
version: 0.14.14
|
188
196
|
type: :development
|
189
197
|
prerelease: false
|
190
198
|
version_requirements: !ruby/object:Gem::Requirement
|
191
199
|
requirements:
|
192
200
|
- - "~>"
|
193
201
|
- !ruby/object:Gem::Version
|
194
|
-
version: 0.
|
202
|
+
version: 0.14.14
|
195
203
|
- !ruby/object:Gem::Dependency
|
196
|
-
name:
|
204
|
+
name: faraday
|
197
205
|
requirement: !ruby/object:Gem::Requirement
|
198
206
|
requirements:
|
199
207
|
- - ">="
|
200
208
|
- !ruby/object:Gem::Version
|
201
|
-
version:
|
209
|
+
version: 0.11.0
|
210
|
+
- - "<"
|
211
|
+
- !ruby/object:Gem::Version
|
212
|
+
version: 2.0.0
|
202
213
|
type: :development
|
203
214
|
prerelease: false
|
204
215
|
version_requirements: !ruby/object:Gem::Requirement
|
205
216
|
requirements:
|
206
217
|
- - ">="
|
207
218
|
- !ruby/object:Gem::Version
|
208
|
-
version:
|
219
|
+
version: 0.11.0
|
220
|
+
- - "<"
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: 2.0.0
|
209
223
|
- !ruby/object:Gem::Dependency
|
210
|
-
name:
|
224
|
+
name: httpclient
|
211
225
|
requirement: !ruby/object:Gem::Requirement
|
212
226
|
requirements:
|
213
227
|
- - ">="
|
@@ -221,21 +235,21 @@ dependencies:
|
|
221
235
|
- !ruby/object:Gem::Version
|
222
236
|
version: '0'
|
223
237
|
- !ruby/object:Gem::Dependency
|
224
|
-
name:
|
238
|
+
name: excon
|
225
239
|
requirement: !ruby/object:Gem::Requirement
|
226
240
|
requirements:
|
227
241
|
- - ">="
|
228
242
|
- !ruby/object:Gem::Version
|
229
|
-
version:
|
243
|
+
version: 0.62.0
|
230
244
|
type: :development
|
231
245
|
prerelease: false
|
232
246
|
version_requirements: !ruby/object:Gem::Requirement
|
233
247
|
requirements:
|
234
248
|
- - ">="
|
235
249
|
- !ruby/object:Gem::Version
|
236
|
-
version:
|
250
|
+
version: 0.62.0
|
237
251
|
- !ruby/object:Gem::Dependency
|
238
|
-
name:
|
252
|
+
name: timecop
|
239
253
|
requirement: !ruby/object:Gem::Requirement
|
240
254
|
requirements:
|
241
255
|
- - ">="
|
@@ -307,7 +321,7 @@ dependencies:
|
|
307
321
|
description: Record your test suite's HTTP interactions and replay them during future
|
308
322
|
test runs for fast, deterministic, accurate tests.
|
309
323
|
email:
|
310
|
-
-
|
324
|
+
- kurtis@rainbolt-greene.online
|
311
325
|
executables: []
|
312
326
|
extensions: []
|
313
327
|
extra_rdoc_files: []
|
@@ -332,7 +346,6 @@ files:
|
|
332
346
|
- lib/vcr/library_hooks/excon.rb
|
333
347
|
- lib/vcr/library_hooks/faraday.rb
|
334
348
|
- lib/vcr/library_hooks/typhoeus.rb
|
335
|
-
- lib/vcr/library_hooks/typhoeus_0.4.rb
|
336
349
|
- lib/vcr/library_hooks/webmock.rb
|
337
350
|
- lib/vcr/linked_cassette.rb
|
338
351
|
- lib/vcr/middleware/excon.rb
|
@@ -354,9 +367,10 @@ files:
|
|
354
367
|
- lib/vcr/version.rb
|
355
368
|
homepage: https://relishapp.com/vcr/vcr/docs
|
356
369
|
licenses:
|
370
|
+
- Hippocratic-2.1
|
357
371
|
- MIT
|
358
372
|
metadata: {}
|
359
|
-
post_install_message:
|
373
|
+
post_install_message:
|
360
374
|
rdoc_options: []
|
361
375
|
require_paths:
|
362
376
|
- lib
|
@@ -364,16 +378,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
364
378
|
requirements:
|
365
379
|
- - ">="
|
366
380
|
- !ruby/object:Gem::Version
|
367
|
-
version:
|
381
|
+
version: '2.6'
|
368
382
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
369
383
|
requirements:
|
370
384
|
- - ">="
|
371
385
|
- !ruby/object:Gem::Version
|
372
386
|
version: '0'
|
373
387
|
requirements: []
|
374
|
-
|
375
|
-
|
376
|
-
signing_key:
|
388
|
+
rubygems_version: 3.2.7
|
389
|
+
signing_key:
|
377
390
|
specification_version: 4
|
378
391
|
summary: Record your test suite's HTTP interactions and replay them during future
|
379
392
|
test runs for fast, deterministic, accurate tests.
|
@@ -1,103 +0,0 @@
|
|
1
|
-
VCR::VersionChecker.new('Typhoeus', Typhoeus::VERSION, '0.3.2').check_version!
|
2
|
-
|
3
|
-
module VCR
|
4
|
-
class LibraryHooks
|
5
|
-
# @private
|
6
|
-
module Typhoeus
|
7
|
-
# @private
|
8
|
-
class RequestHandler < ::VCR::RequestHandler
|
9
|
-
attr_reader :request
|
10
|
-
def initialize(request)
|
11
|
-
@request = request
|
12
|
-
end
|
13
|
-
|
14
|
-
def vcr_request
|
15
|
-
@vcr_request ||= VCR::Request.new \
|
16
|
-
request.method,
|
17
|
-
request.url,
|
18
|
-
request.body,
|
19
|
-
request.headers
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def externally_stubbed?
|
25
|
-
::Typhoeus::Hydra.stubs.detect { |stub| stub.matches?(request) }
|
26
|
-
end
|
27
|
-
|
28
|
-
def set_typed_request_for_after_hook(*args)
|
29
|
-
super
|
30
|
-
request.instance_variable_set(:@__typed_vcr_request, @after_hook_typed_request)
|
31
|
-
end
|
32
|
-
|
33
|
-
def on_unhandled_request
|
34
|
-
invoke_after_request_hook(nil)
|
35
|
-
super
|
36
|
-
end
|
37
|
-
|
38
|
-
def on_stubbed_by_vcr_request
|
39
|
-
::Typhoeus::Response.new \
|
40
|
-
:http_version => stubbed_response.http_version,
|
41
|
-
:code => stubbed_response.status.code,
|
42
|
-
:status_message => stubbed_response.status.message,
|
43
|
-
:headers_hash => stubbed_response_headers,
|
44
|
-
:body => stubbed_response.body
|
45
|
-
end
|
46
|
-
|
47
|
-
def stubbed_response_headers
|
48
|
-
@stubbed_response_headers ||= {}.tap do |hash|
|
49
|
-
stubbed_response.headers.each do |key, values|
|
50
|
-
hash[key] = values.size == 1 ? values.first : values
|
51
|
-
end if stubbed_response.headers
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
# @private
|
57
|
-
def self.vcr_response_from(response)
|
58
|
-
VCR::Response.new \
|
59
|
-
VCR::ResponseStatus.new(response.code, response.status_message),
|
60
|
-
response.headers_hash,
|
61
|
-
response.body,
|
62
|
-
response.http_version
|
63
|
-
end
|
64
|
-
|
65
|
-
::Typhoeus::Hydra.after_request_before_on_complete do |request|
|
66
|
-
unless VCR.library_hooks.disabled?(:typhoeus)
|
67
|
-
vcr_response = vcr_response_from(request.response)
|
68
|
-
typed_vcr_request = request.send(:remove_instance_variable, :@__typed_vcr_request)
|
69
|
-
|
70
|
-
unless request.response.mock?
|
71
|
-
http_interaction = VCR::HTTPInteraction.new(typed_vcr_request, vcr_response)
|
72
|
-
VCR.record_http_interaction(http_interaction)
|
73
|
-
end
|
74
|
-
|
75
|
-
VCR.configuration.invoke_hook(:after_http_request, typed_vcr_request, vcr_response)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
::Typhoeus::Hydra.register_stub_finder do |request|
|
80
|
-
VCR::LibraryHooks::Typhoeus::RequestHandler.new(request).handle
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
# @private
|
87
|
-
module Typhoeus
|
88
|
-
class << Hydra
|
89
|
-
# ensure HTTP requests are always allowed; VCR takes care of disallowing
|
90
|
-
# them at the appropriate times in its hook
|
91
|
-
def allow_net_connect_with_vcr?(*args)
|
92
|
-
VCR.turned_on? ? true : allow_net_connect_without_vcr?
|
93
|
-
end
|
94
|
-
|
95
|
-
alias allow_net_connect_without_vcr? allow_net_connect?
|
96
|
-
alias allow_net_connect? allow_net_connect_with_vcr?
|
97
|
-
end unless Hydra.respond_to?(:allow_net_connect_with_vcr?)
|
98
|
-
end
|
99
|
-
|
100
|
-
VCR.configuration.after_library_hooks_loaded do
|
101
|
-
::Kernel.warn "WARNING: VCR's Typhoeus 0.4 integration is deprecated and will be removed in VCR 3.0."
|
102
|
-
end
|
103
|
-
|