vcr 5.0.0 → 5.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vcr.rb +6 -0
- data/lib/vcr/cassette.rb +25 -3
- data/lib/vcr/cassette/serializers/psych.rb +3 -1
- data/lib/vcr/cassette/serializers/yaml.rb +3 -1
- data/lib/vcr/configuration.rb +1 -0
- data/lib/vcr/structs.rb +1 -1
- data/lib/vcr/test_frameworks/rspec.rb +12 -3
- data/lib/vcr/version.rb +1 -1
- metadata +28 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 07fd7ce84552274d7b4da982cb81c3952f41745280274b236a8f4b2d22f99c14
|
4
|
+
data.tar.gz: 52291714128b6cf2ae583098b0e8c25acb1335826bfbbd6f4db778bf11996533
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fdcf18897a729f367411a486747e318c870e92c8eb5c234ed1948123501938ccd7966b129ef99658cca62ec0d6762b2fc339c1064527c6de731eed1bfdf53c72
|
7
|
+
data.tar.gz: 945c7b6cbae5a31ad56d142488dedb69d2554ea2367a157e9693b7771be9fec9e12b74236c3e853b9ab05ffba416bc489055264048b4896efa9030767394a7bb
|
data/lib/vcr.rb
CHANGED
@@ -186,6 +186,9 @@ module VCR
|
|
186
186
|
|
187
187
|
begin
|
188
188
|
call_block(block, cassette)
|
189
|
+
rescue StandardError
|
190
|
+
cassette.run_failed!
|
191
|
+
raise
|
189
192
|
ensure
|
190
193
|
eject_cassette
|
191
194
|
end
|
@@ -308,6 +311,9 @@ module VCR
|
|
308
311
|
# @see #turn_off!
|
309
312
|
# @see #turned_off
|
310
313
|
def turned_on?
|
314
|
+
linked_context = current_context[:linked_context]
|
315
|
+
return !linked_context[:turned_off] if linked_context
|
316
|
+
|
311
317
|
!context_value(:turned_off)
|
312
318
|
end
|
313
319
|
|
data/lib/vcr/cassette.rb
CHANGED
@@ -24,6 +24,13 @@ module VCR
|
|
24
24
|
# plays them back, or does both.
|
25
25
|
attr_reader :record_mode
|
26
26
|
|
27
|
+
# @return [Boolean] The cassette's record_on_error mode. When the code that uses the cassette
|
28
|
+
# raises an error (for example a test failure) and record_on_error is set to false, no
|
29
|
+
# cassette will be recorded. This is useful when you are TDD'ing an API integration: when
|
30
|
+
# an error is raised that often means your request is invalid, so you don't want the cassette
|
31
|
+
# to be recorded.
|
32
|
+
attr_reader :record_on_error
|
33
|
+
|
27
34
|
# @return [Array<Symbol, #call>] List of request matchers. Used to find a response from an
|
28
35
|
# existing HTTP interaction to play back.
|
29
36
|
attr_reader :match_requests_on
|
@@ -66,13 +73,28 @@ module VCR
|
|
66
73
|
# @param (see VCR#eject_casssette)
|
67
74
|
# @see VCR#eject_cassette
|
68
75
|
def eject(options = {})
|
69
|
-
write_recorded_interactions_to_disk
|
76
|
+
write_recorded_interactions_to_disk if should_write_recorded_interactions_to_disk?
|
70
77
|
|
71
78
|
if should_assert_no_unused_interactions? && !options[:skip_no_unused_interactions_assertion]
|
72
79
|
http_interactions.assert_no_unused_interactions!
|
73
80
|
end
|
74
81
|
end
|
75
82
|
|
83
|
+
# @private
|
84
|
+
def run_failed!
|
85
|
+
@run_failed = true
|
86
|
+
end
|
87
|
+
|
88
|
+
# @private
|
89
|
+
def run_failed?
|
90
|
+
@run_failed = false unless defined?(@run_failed)
|
91
|
+
@run_failed
|
92
|
+
end
|
93
|
+
|
94
|
+
def should_write_recorded_interactions_to_disk?
|
95
|
+
!run_failed? || record_on_error
|
96
|
+
end
|
97
|
+
|
76
98
|
# @private
|
77
99
|
def http_interactions
|
78
100
|
# Without this mutex, under threaded access, an HTTPInteractionList will overwrite
|
@@ -151,7 +173,7 @@ module VCR
|
|
151
173
|
|
152
174
|
def assert_valid_options!
|
153
175
|
invalid_options = @options.keys - [
|
154
|
-
:record, :erb, :match_requests_on, :re_record_interval, :tag, :tags,
|
176
|
+
:record, :record_on_error, :erb, :match_requests_on, :re_record_interval, :tag, :tags,
|
155
177
|
:update_content_length_header, :allow_playback_repeats, :allow_unused_http_interactions,
|
156
178
|
:exclusive, :serialize_with, :preserve_exact_body_bytes, :decode_compressed_response,
|
157
179
|
:recompress_response, :persist_with, :clean_outdated_http_interactions
|
@@ -163,7 +185,7 @@ module VCR
|
|
163
185
|
end
|
164
186
|
|
165
187
|
def extract_options
|
166
|
-
[:erb, :match_requests_on, :re_record_interval, :clean_outdated_http_interactions,
|
188
|
+
[:record_on_error, :erb, :match_requests_on, :re_record_interval, :clean_outdated_http_interactions,
|
167
189
|
:allow_playback_repeats, :allow_unused_http_interactions, :exclusive].each do |name|
|
168
190
|
instance_variable_set("@#{name}", @options[name])
|
169
191
|
end
|
@@ -28,7 +28,9 @@ module VCR
|
|
28
28
|
# @return [String] the YAML string
|
29
29
|
def serialize(hash)
|
30
30
|
handle_encoding_errors do
|
31
|
-
::Psych.dump(hash)
|
31
|
+
result = ::Psych.dump(hash)
|
32
|
+
result.gsub!(": \n", ": null\n") # set canonical null value in order to avoid trailing whitespaces
|
33
|
+
result
|
32
34
|
end
|
33
35
|
end
|
34
36
|
|
@@ -30,7 +30,9 @@ module VCR
|
|
30
30
|
# @return [String] the YAML string
|
31
31
|
def serialize(hash)
|
32
32
|
handle_encoding_errors do
|
33
|
-
::YAML.dump(hash)
|
33
|
+
result = ::YAML.dump(hash)
|
34
|
+
result.gsub!(": \n", ": null\n") # set canonical null value in order to avoid trailing whitespaces
|
35
|
+
result
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
data/lib/vcr/configuration.rb
CHANGED
@@ -492,6 +492,7 @@ module VCR
|
|
492
492
|
@rspec_metadata_configured = false
|
493
493
|
@default_cassette_options = {
|
494
494
|
:record => :once,
|
495
|
+
:record_on_error => true,
|
495
496
|
:match_requests_on => RequestMatcherRegistry::DEFAULT_MATCHERS,
|
496
497
|
:allow_unused_http_interactions => true,
|
497
498
|
:serialize_with => :yaml,
|
data/lib/vcr/structs.rb
CHANGED
@@ -62,7 +62,7 @@ module VCR
|
|
62
62
|
super
|
63
63
|
|
64
64
|
if body && !body.is_a?(String)
|
65
|
-
raise ArgumentError, "#{self.class} initialized with an invalid body: #{body.inspect}."
|
65
|
+
raise ArgumentError, "#{self.class} initialized with an invalid (non-String) body of class #{body.class}: #{body.inspect}."
|
66
66
|
end
|
67
67
|
|
68
68
|
# Ensure that the body is a raw string, in case the string instance
|
@@ -32,10 +32,19 @@ module VCR
|
|
32
32
|
config.before(:each, when_tagged_with_vcr) do |ex|
|
33
33
|
example = ex.respond_to?(:metadata) ? ex : ex.example
|
34
34
|
|
35
|
+
cassette_name = nil
|
35
36
|
options = example.metadata[:vcr]
|
36
|
-
options =
|
37
|
-
|
38
|
-
|
37
|
+
options = case options
|
38
|
+
when Hash #=> vcr: { cassette_name: 'foo' }
|
39
|
+
options.dup
|
40
|
+
when String #=> vcr: 'bar'
|
41
|
+
cassette_name = options.dup
|
42
|
+
{}
|
43
|
+
else #=> :vcr or vcr: true
|
44
|
+
{}
|
45
|
+
end
|
46
|
+
|
47
|
+
cassette_name ||= options.delete(:cassette_name) ||
|
39
48
|
vcr_cassette_name_for[example.metadata]
|
40
49
|
VCR.insert_cassette(cassette_name, options)
|
41
50
|
end
|
data/lib/vcr/version.rb
CHANGED
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: 5.
|
4
|
+
version: 5.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Myron Marston
|
8
|
+
- Kurtis Rainbolt-Greene
|
9
|
+
- Olle Jonsson
|
8
10
|
autorequire:
|
9
11
|
bindir: bin
|
10
12
|
cert_chain: []
|
11
|
-
date:
|
13
|
+
date: 2020-02-05 00:00:00.000000000 Z
|
12
14
|
dependencies:
|
13
15
|
- !ruby/object:Gem::Dependency
|
14
16
|
name: bundler
|
@@ -150,6 +152,26 @@ dependencies:
|
|
150
152
|
- - ">="
|
151
153
|
- !ruby/object:Gem::Version
|
152
154
|
version: '0'
|
155
|
+
- !ruby/object:Gem::Dependency
|
156
|
+
name: hashdiff
|
157
|
+
requirement: !ruby/object:Gem::Requirement
|
158
|
+
requirements:
|
159
|
+
- - ">="
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: 1.0.0.beta1
|
162
|
+
- - "<"
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: 2.0.0
|
165
|
+
type: :development
|
166
|
+
prerelease: false
|
167
|
+
version_requirements: !ruby/object:Gem::Requirement
|
168
|
+
requirements:
|
169
|
+
- - ">="
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: 1.0.0.beta1
|
172
|
+
- - "<"
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: 2.0.0
|
153
175
|
- !ruby/object:Gem::Dependency
|
154
176
|
name: cucumber
|
155
177
|
requirement: !ruby/object:Gem::Requirement
|
@@ -170,14 +192,14 @@ dependencies:
|
|
170
192
|
requirements:
|
171
193
|
- - "~>"
|
172
194
|
- !ruby/object:Gem::Version
|
173
|
-
version: 0.
|
195
|
+
version: 0.14.12
|
174
196
|
type: :development
|
175
197
|
prerelease: false
|
176
198
|
version_requirements: !ruby/object:Gem::Requirement
|
177
199
|
requirements:
|
178
200
|
- - "~>"
|
179
201
|
- !ruby/object:Gem::Version
|
180
|
-
version: 0.
|
202
|
+
version: 0.14.12
|
181
203
|
- !ruby/object:Gem::Dependency
|
182
204
|
name: faraday
|
183
205
|
requirement: !ruby/object:Gem::Requirement
|
@@ -307,7 +329,7 @@ dependencies:
|
|
307
329
|
description: Record your test suite's HTTP interactions and replay them during future
|
308
330
|
test runs for fast, deterministic, accurate tests.
|
309
331
|
email:
|
310
|
-
-
|
332
|
+
- kurtis@rainbolt-greene.online
|
311
333
|
executables: []
|
312
334
|
extensions: []
|
313
335
|
extra_rdoc_files: []
|
@@ -354,7 +376,7 @@ files:
|
|
354
376
|
- lib/vcr/version.rb
|
355
377
|
homepage: https://relishapp.com/vcr/vcr/docs
|
356
378
|
licenses:
|
357
|
-
- MIT
|
379
|
+
- MIT-Hippocratic-1.2
|
358
380
|
metadata: {}
|
359
381
|
post_install_message:
|
360
382
|
rdoc_options: []
|