vcr 4.0.0 → 6.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,31 +1,25 @@
1
1
  module VCR
2
2
  # Ruby 1.8 provides Ping.pingecho, but it was removed in 1.9.
3
- # So we try requiring it, and if that fails, define it ourselves.
4
- begin
5
- require 'ping'
6
- Ping = ::Ping
7
- rescue LoadError
8
- # This is copied, verbatim, from Ruby 1.8.7's ping.rb.
9
- require 'timeout'
10
- require "socket"
3
+ # This is copied, verbatim, from Ruby 1.8.7's ping.rb.
4
+ require 'timeout'
5
+ require "socket"
11
6
 
12
- # @private
13
- module Ping
14
- def pingecho(host, timeout=5, service="echo")
15
- begin
16
- Timeout.timeout(timeout) do
17
- s = TCPSocket.new(host, service)
18
- s.close
19
- end
20
- rescue Errno::ECONNREFUSED
21
- return true
22
- rescue Timeout::Error, StandardError
23
- return false
7
+ # @private
8
+ module Ping
9
+ def pingecho(host, timeout=5, service="echo")
10
+ begin
11
+ Timeout.timeout(timeout) do
12
+ s = TCPSocket.new(host, service)
13
+ s.close
24
14
  end
15
+ rescue Errno::ECONNREFUSED
25
16
  return true
17
+ rescue Timeout::Error, StandardError
18
+ return false
26
19
  end
27
- module_function :pingecho
20
+ return true
28
21
  end
22
+ module_function :pingecho
29
23
  end
30
24
 
31
25
  # @private
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 = '4.0.0'
13
+ string = +'6.2.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 cassete's
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
- # cassettes = [
198
- # { name: 'github' },
199
- # { name: 'apple', options: { erb: true } }
200
- # ]
201
- # VCR.use_cassettes() do
202
- # # make multiple HTTP requests
203
- # end
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
- use_cassettes(cassettes, &block)
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.0.0
4
+ version: 6.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Myron Marston
8
- autorequire:
8
+ - Kurtis Rainbolt-Greene
9
+ - Olle Jonsson
10
+ autorequire:
9
11
  bindir: bin
10
12
  cert_chain: []
11
- date: 2017-12-04 00:00:00.000000000 Z
13
+ date: 2023-06-26 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: '1.3'
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: '1.3'
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.1.4
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.1.4
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: '10.1'
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: '10.1'
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: cucumber
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.2
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: 2.0.2
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: aruba
176
+ name: cucumber
169
177
  requirement: !ruby/object:Gem::Requirement
170
178
  requirements:
171
179
  - - "~>"
172
180
  - !ruby/object:Gem::Version
173
- version: 0.5.3
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.5.3
188
+ version: '7.0'
181
189
  - !ruby/object:Gem::Dependency
182
- name: faraday
190
+ name: aruba
183
191
  requirement: !ruby/object:Gem::Requirement
184
192
  requirements:
185
193
  - - "~>"
186
194
  - !ruby/object:Gem::Version
187
- version: 0.11.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.11.0
202
+ version: 0.14.14
195
203
  - !ruby/object:Gem::Dependency
196
- name: httpclient
204
+ name: faraday
197
205
  requirement: !ruby/object:Gem::Requirement
198
206
  requirements:
199
207
  - - ">="
200
208
  - !ruby/object:Gem::Version
201
- version: '0'
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: '0'
219
+ version: 0.11.0
220
+ - - "<"
221
+ - !ruby/object:Gem::Version
222
+ version: 2.0.0
209
223
  - !ruby/object:Gem::Dependency
210
- name: excon
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: timecop
238
+ name: excon
225
239
  requirement: !ruby/object:Gem::Requirement
226
240
  requirements:
227
241
  - - ">="
228
242
  - !ruby/object:Gem::Version
229
- version: '0'
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: '0'
250
+ version: 0.62.0
237
251
  - !ruby/object:Gem::Dependency
238
- name: multi_json
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
- - myron.marston@gmail.com
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
@@ -352,11 +365,12 @@ files:
352
365
  - lib/vcr/util/variable_args_block_caller.rb
353
366
  - lib/vcr/util/version_checker.rb
354
367
  - lib/vcr/version.rb
355
- homepage: https://relishapp.com/vcr/vcr/docs
368
+ homepage: https://benoittgt.github.io/vcr
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: 1.9.3
381
+ version: '2.7'
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
- rubyforge_project:
375
- rubygems_version: 2.6.13
376
- signing_key:
388
+ rubygems_version: 3.4.14
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
-