vcr 1.10.3 → 1.11.1
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.
- data/.travis.yml +3 -2
- data/CHANGELOG.md +14 -1
- data/Gemfile +2 -1
- data/Rakefile +6 -2
- data/features/configuration/stub_with.feature +0 -30
- data/lib/vcr.rb +3 -1
- data/lib/vcr/http_stubbing_adapters/common.rb +96 -1
- data/lib/vcr/http_stubbing_adapters/excon.rb +3 -79
- data/lib/vcr/http_stubbing_adapters/fakeweb.rb +1 -1
- data/lib/vcr/http_stubbing_adapters/faraday.rb +6 -79
- data/lib/vcr/http_stubbing_adapters/typhoeus.rb +9 -1
- data/lib/vcr/http_stubbing_adapters/webmock.rb +3 -3
- data/lib/vcr/middleware/faraday.rb +1 -2
- data/lib/vcr/version.rb +1 -1
- data/spec/monkey_patches.rb +40 -24
- data/spec/spec_helper.rb +1 -17
- data/spec/support/vcr_localhost_server.rb +1 -1
- data/spec/vcr/cassette_spec.rb +2 -2
- data/spec/vcr/extensions/net_http_response_spec.rb +2 -2
- data/spec/vcr/extensions/net_http_spec.rb +1 -1
- data/spec/vcr/http_stubbing_adapters/excon_spec.rb +1 -1
- data/spec/vcr/http_stubbing_adapters/fakeweb_spec.rb +1 -1
- data/spec/vcr/http_stubbing_adapters/faraday_spec.rb +2 -9
- data/spec/vcr/http_stubbing_adapters/typhoeus_spec.rb +8 -1
- data/spec/vcr/http_stubbing_adapters/webmock_spec.rb +4 -4
- data/spec/vcr_spec.rb +6 -0
- data/vcr.gemspec +1 -1
- metadata +46 -48
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,19 @@
|
|
1
1
|
## In git
|
2
2
|
|
3
|
-
[Full Changelog](http://github.com/myronmarston/vcr/compare/v1.
|
3
|
+
[Full Changelog](http://github.com/myronmarston/vcr/compare/v1.11.1...master)
|
4
|
+
|
5
|
+
## 1.11.1 (August 18, 2011)
|
6
|
+
|
7
|
+
[Full Changelog](http://github.com/myronmarston/vcr/compare/v1.11.0...v1.11.1)
|
8
|
+
|
9
|
+
* Yanked 1.11.0 and rebuilt gem on 1.8.7 to deal with syck/psych
|
10
|
+
incompatibilties in gemspec.
|
11
|
+
|
12
|
+
## 1.11.0 (August 18, 2011)
|
13
|
+
|
14
|
+
[Full Changelog](http://github.com/myronmarston/vcr/compare/v1.10.3...v1.11.0)
|
15
|
+
|
16
|
+
* Updates to work with WebMock 1.7.0.
|
4
17
|
|
5
18
|
## 1.10.3 (July 21, 2011)
|
6
19
|
|
data/Gemfile
CHANGED
@@ -30,6 +30,7 @@ group :extras do
|
|
30
30
|
|
31
31
|
platforms :mri_18 do
|
32
32
|
gem 'ruby-debug'
|
33
|
+
gem 'linecache', '0.43' # later versions do not work on 1.8.6
|
33
34
|
end
|
34
35
|
|
35
36
|
platforms :mri_19 do
|
@@ -37,5 +38,5 @@ group :extras do
|
|
37
38
|
gem 'ruby-debug19'
|
38
39
|
gem 'ruby-debug-base19', RUBY_VERSION == '1.9.1' ? '0.11.23' : '~> 0.11.24'
|
39
40
|
end
|
40
|
-
end
|
41
|
+
end unless ENV['CI']
|
41
42
|
|
data/Rakefile
CHANGED
@@ -44,7 +44,7 @@ namespace :ci do
|
|
44
44
|
end
|
45
45
|
|
46
46
|
desc "Run a ci build"
|
47
|
-
task :build => [:setup, :spec
|
47
|
+
task :build => [:setup, :spec]
|
48
48
|
end
|
49
49
|
|
50
50
|
def ensure_relish_doc_symlinked(filename)
|
@@ -78,7 +78,11 @@ task :prep_relish_release do
|
|
78
78
|
ENV['NEW_RELISH_RELEASE'] = 'true'
|
79
79
|
end
|
80
80
|
|
81
|
-
task :
|
81
|
+
task :require_ruby_18 do
|
82
|
+
raise "This must be run on Ruby 1.8" unless RUBY_VERSION =~ /^1\.8/
|
83
|
+
end
|
84
|
+
|
85
|
+
task :release => [:require_ruby_18, :prep_relish_release, :relish]
|
82
86
|
|
83
87
|
# For gem-test: http://gem-testers.org/
|
84
88
|
task :test => :spec
|
@@ -41,36 +41,6 @@ Feature: stub_with
|
|
41
41
|
additional features of WebMock) you can change the `stub_with` configuration
|
42
42
|
option and it'll work with no other changes required.
|
43
43
|
|
44
|
-
Scenario Outline: stub_with loads the given HTTP stubbing library
|
45
|
-
Given a file named "vcr_stub_with.rb" with:
|
46
|
-
"""
|
47
|
-
require 'vcr'
|
48
|
-
|
49
|
-
VCR.config do |c|
|
50
|
-
c.stub_with <stub_with>
|
51
|
-
end
|
52
|
-
|
53
|
-
puts "FakeWeb Loaded: #{!!defined?(FakeWeb)}"
|
54
|
-
puts "WebMock Loaded: #{!!defined?(WebMock)}"
|
55
|
-
puts "Typhoeus Loaded: #{!!defined?(Typhoeus)}"
|
56
|
-
puts "Excon Loaded: #{!!defined?(Excon)}"
|
57
|
-
"""
|
58
|
-
When I run "ruby vcr_stub_with.rb"
|
59
|
-
Then the output should contain:
|
60
|
-
"""
|
61
|
-
FakeWeb Loaded: <fakeweb_loaded>
|
62
|
-
WebMock Loaded: <webmock_loaded>
|
63
|
-
Typhoeus Loaded: <typhoeus_loaded>
|
64
|
-
Excon Loaded: <excon_loaded>
|
65
|
-
"""
|
66
|
-
|
67
|
-
Examples:
|
68
|
-
| stub_with | fakeweb_loaded | webmock_loaded | typhoeus_loaded | excon_loaded |
|
69
|
-
| :fakeweb | true | false | false | false |
|
70
|
-
| :webmock | false | true | false | false |
|
71
|
-
| :typhoeus | false | false | true | false |
|
72
|
-
| :excon | false | false | false | true |
|
73
|
-
|
74
44
|
Scenario Outline: Record and replay a request using each supported stubbing/http library combination
|
75
45
|
Given a file named "stubbing_http_lib_combo.rb" with:
|
76
46
|
"""
|
data/lib/vcr.rb
CHANGED
@@ -99,7 +99,9 @@ module VCR
|
|
99
99
|
|
100
100
|
adapters = VCR::Config.http_stubbing_libraries.map { |l| adapter_for(l) }
|
101
101
|
raise ArgumentError.new("The http stubbing library is not configured.") if adapters.empty?
|
102
|
-
HttpStubbingAdapters::MultiObjectProxy.for(*adapters)
|
102
|
+
adapter = HttpStubbingAdapters::MultiObjectProxy.for(*adapters)
|
103
|
+
adapter.after_adapters_loaded
|
104
|
+
adapter
|
103
105
|
end
|
104
106
|
end
|
105
107
|
|
@@ -37,6 +37,10 @@ module VCR
|
|
37
37
|
[nil, self].include? VCR::HttpStubbingAdapters::Common.exclusively_enabled_adapter
|
38
38
|
end
|
39
39
|
|
40
|
+
def after_adapters_loaded
|
41
|
+
# no-op
|
42
|
+
end
|
43
|
+
|
40
44
|
def exclusively_enabled
|
41
45
|
VCR::HttpStubbingAdapters::Common.exclusively_enabled_adapter = self
|
42
46
|
|
@@ -64,12 +68,89 @@ module VCR
|
|
64
68
|
self.http_connections_allowed = VCR::Config.allow_http_connections_when_no_cassette?
|
65
69
|
end
|
66
70
|
|
67
|
-
def
|
71
|
+
def raise_no_checkpoint_error(cassette)
|
68
72
|
raise ArgumentError.new("No checkpoint for #{cassette.inspect} could be found")
|
69
73
|
end
|
70
74
|
|
75
|
+
attr_writer :http_connections_allowed
|
76
|
+
|
77
|
+
def http_connections_allowed?
|
78
|
+
!!@http_connections_allowed
|
79
|
+
end
|
80
|
+
|
81
|
+
def ignored_hosts=(hosts)
|
82
|
+
@ignored_hosts = hosts
|
83
|
+
end
|
84
|
+
|
85
|
+
def uri_should_be_ignored?(uri)
|
86
|
+
uri = URI.parse(uri) unless uri.respond_to?(:host)
|
87
|
+
ignored_hosts.include?(uri.host)
|
88
|
+
end
|
89
|
+
|
90
|
+
def stub_requests(http_interactions, match_attributes)
|
91
|
+
match_attributes_stack << match_attributes
|
92
|
+
grouped_responses(http_interactions, match_attributes).each do |request_matcher, responses|
|
93
|
+
request_matcher = request_matcher_with_normalized_uri(request_matcher)
|
94
|
+
queue = stub_queues[request_matcher]
|
95
|
+
responses.each { |res| queue << res }
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def create_stubs_checkpoint(cassette)
|
100
|
+
checkpoints[cassette] = stub_queue_dup
|
101
|
+
end
|
102
|
+
|
103
|
+
def restore_stubs_checkpoint(cassette)
|
104
|
+
match_attributes_stack.pop
|
105
|
+
@stub_queues = checkpoints.delete(cassette) || raise_no_checkpoint_error(cassette)
|
106
|
+
end
|
107
|
+
|
108
|
+
def stubbed_response_for(request)
|
109
|
+
return nil unless match_attributes_stack.any?
|
110
|
+
request_matcher = request.matcher(match_attributes_stack.last)
|
111
|
+
queue = stub_queues[request_matcher]
|
112
|
+
return queue.shift if queue.size > 1
|
113
|
+
queue.first
|
114
|
+
end
|
115
|
+
|
116
|
+
def reset!
|
117
|
+
instance_variables.each do |ivar|
|
118
|
+
remove_instance_variable(ivar)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
71
122
|
private
|
72
123
|
|
124
|
+
def ignored_hosts
|
125
|
+
@ignored_hosts ||= []
|
126
|
+
end
|
127
|
+
|
128
|
+
def checkpoints
|
129
|
+
@checkpoints ||= {}
|
130
|
+
end
|
131
|
+
|
132
|
+
def stub_queues
|
133
|
+
@stub_queues ||= hash_of_arrays
|
134
|
+
end
|
135
|
+
|
136
|
+
def match_attributes_stack
|
137
|
+
@match_attributes_stack ||= []
|
138
|
+
end
|
139
|
+
|
140
|
+
def stub_queue_dup
|
141
|
+
dup = hash_of_arrays
|
142
|
+
|
143
|
+
stub_queues.each do |k, v|
|
144
|
+
dup[k] = v.dup
|
145
|
+
end
|
146
|
+
|
147
|
+
dup
|
148
|
+
end
|
149
|
+
|
150
|
+
def hash_of_arrays
|
151
|
+
Hash.new { |h, k| h[k] = [] }
|
152
|
+
end
|
153
|
+
|
73
154
|
def compare_version
|
74
155
|
major, minor, patch = parse_version(version)
|
75
156
|
min_major, min_minor, min_patch = parse_version(self::MINIMUM_VERSION)
|
@@ -102,6 +183,20 @@ module VCR
|
|
102
183
|
|
103
184
|
responses
|
104
185
|
end
|
186
|
+
|
187
|
+
def normalize_uri(uri)
|
188
|
+
uri # adapters can override this
|
189
|
+
end
|
190
|
+
|
191
|
+
def request_matcher_with_normalized_uri(matcher)
|
192
|
+
normalized_uri = normalize_uri(matcher.request.uri)
|
193
|
+
return matcher unless matcher.request.uri != normalized_uri
|
194
|
+
|
195
|
+
request = matcher.request.dup
|
196
|
+
request.uri = normalized_uri
|
197
|
+
|
198
|
+
RequestMatcher.new(request, matcher.match_attributes)
|
199
|
+
end
|
105
200
|
end
|
106
201
|
end
|
107
202
|
end
|
@@ -11,87 +11,11 @@ module VCR
|
|
11
11
|
MINIMUM_VERSION = '0.6.5'
|
12
12
|
MAXIMUM_VERSION = '0.6'
|
13
13
|
|
14
|
-
attr_writer :http_connections_allowed
|
15
|
-
|
16
|
-
def http_connections_allowed?
|
17
|
-
!!@http_connections_allowed
|
18
|
-
end
|
19
|
-
|
20
|
-
def ignored_hosts=(hosts)
|
21
|
-
@ignored_hosts = hosts
|
22
|
-
end
|
23
|
-
|
24
|
-
def uri_should_be_ignored?(uri)
|
25
|
-
uri = URI.parse(uri) unless uri.respond_to?(:host)
|
26
|
-
ignored_hosts.include?(uri.host)
|
27
|
-
end
|
28
|
-
|
29
|
-
def stub_requests(http_interactions, match_attributes)
|
30
|
-
match_attributes_stack << match_attributes
|
31
|
-
grouped_responses(http_interactions, match_attributes).each do |request_matcher, responses|
|
32
|
-
queue = stub_queues[request_matcher]
|
33
|
-
responses.each { |res| queue << res }
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def create_stubs_checkpoint(cassette)
|
38
|
-
checkpoints[cassette] = stub_queue_dup
|
39
|
-
end
|
40
|
-
|
41
|
-
def restore_stubs_checkpoint(cassette)
|
42
|
-
match_attributes_stack.pop
|
43
|
-
@stub_queues = checkpoints.delete(cassette) || super
|
44
|
-
end
|
45
|
-
|
46
|
-
def stubbed_response_for(request)
|
47
|
-
return nil unless match_attributes_stack.any?
|
48
|
-
request_matcher = request.matcher(match_attributes_stack.last)
|
49
|
-
queue = stub_queues[request_matcher]
|
50
|
-
return queue.shift if queue.size > 1
|
51
|
-
queue.first
|
52
|
-
end
|
53
|
-
|
54
|
-
def reset!
|
55
|
-
instance_variables.each do |ivar|
|
56
|
-
remove_instance_variable(ivar)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
14
|
private
|
61
15
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
def ignored_hosts
|
67
|
-
@ignored_hosts ||= []
|
68
|
-
end
|
69
|
-
|
70
|
-
def checkpoints
|
71
|
-
@checkpoints ||= {}
|
72
|
-
end
|
73
|
-
|
74
|
-
def stub_queues
|
75
|
-
@stub_queues ||= hash_of_arrays
|
76
|
-
end
|
77
|
-
|
78
|
-
def match_attributes_stack
|
79
|
-
@match_attributes_stack ||= []
|
80
|
-
end
|
81
|
-
|
82
|
-
def stub_queue_dup
|
83
|
-
dup = hash_of_arrays
|
84
|
-
|
85
|
-
stub_queues.each do |k, v|
|
86
|
-
dup[k] = v.dup
|
87
|
-
end
|
88
|
-
|
89
|
-
dup
|
90
|
-
end
|
91
|
-
|
92
|
-
def hash_of_arrays
|
93
|
-
Hash.new { |h, k| h[k] = [] }
|
94
|
-
end
|
16
|
+
def version
|
17
|
+
::Excon::VERSION
|
18
|
+
end
|
95
19
|
|
96
20
|
class RequestHandler
|
97
21
|
attr_reader :params
|
@@ -44,7 +44,7 @@ module VCR
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def restore_stubs_checkpoint(cassette)
|
47
|
-
::FakeWeb::Registry.instance.uri_map = checkpoints.delete(cassette) ||
|
47
|
+
::FakeWeb::Registry.instance.uri_map = checkpoints.delete(cassette) || raise_no_checkpoint_error(cassette)
|
48
48
|
end
|
49
49
|
|
50
50
|
def request_stubbed?(request, match_attributes)
|
@@ -9,89 +9,16 @@ module VCR
|
|
9
9
|
MINIMUM_VERSION = '0.6.0'
|
10
10
|
MAXIMUM_VERSION = '0.6'
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
def http_connections_allowed?
|
15
|
-
!!@http_connections_allowed
|
16
|
-
end
|
17
|
-
|
18
|
-
def ignored_hosts=(hosts)
|
19
|
-
@ignored_hosts = hosts
|
20
|
-
end
|
21
|
-
|
22
|
-
def uri_should_be_ignored?(uri)
|
23
|
-
uri = URI.parse(uri) unless uri.respond_to?(:host)
|
24
|
-
ignored_hosts.include?(uri.host)
|
25
|
-
end
|
26
|
-
|
27
|
-
def stub_requests(http_interactions, match_attributes)
|
28
|
-
grouped_responses(http_interactions, match_attributes).each do |request_matcher, responses|
|
29
|
-
matcher = request_matcher_with_normalized_uri(request_matcher)
|
30
|
-
queue = stub_queues[matcher]
|
31
|
-
responses.each { |res| queue << res }
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def create_stubs_checkpoint(cassette)
|
36
|
-
checkpoints[cassette] = stub_queue_dup
|
37
|
-
end
|
38
|
-
|
39
|
-
def restore_stubs_checkpoint(cassette)
|
40
|
-
@stub_queues = checkpoints.delete(cassette) || super
|
41
|
-
end
|
12
|
+
private
|
42
13
|
|
43
|
-
def
|
44
|
-
|
45
|
-
return queue.shift if queue.size > 1
|
46
|
-
queue.first
|
14
|
+
def version
|
15
|
+
::Faraday::VERSION
|
47
16
|
end
|
48
17
|
|
49
|
-
def
|
50
|
-
|
51
|
-
|
52
|
-
end
|
18
|
+
def normalize_uri(uri)
|
19
|
+
# faraday normalizes +'s to %20's
|
20
|
+
uri.gsub('+', '%20')
|
53
21
|
end
|
54
|
-
|
55
|
-
private
|
56
|
-
|
57
|
-
def version
|
58
|
-
::Faraday::VERSION
|
59
|
-
end
|
60
|
-
|
61
|
-
def ignored_hosts
|
62
|
-
@ignored_hosts ||= []
|
63
|
-
end
|
64
|
-
|
65
|
-
def checkpoints
|
66
|
-
@checkpoints ||= {}
|
67
|
-
end
|
68
|
-
|
69
|
-
def stub_queues
|
70
|
-
@stub_queues ||= hash_of_arrays
|
71
|
-
end
|
72
|
-
|
73
|
-
def stub_queue_dup
|
74
|
-
dup = hash_of_arrays
|
75
|
-
|
76
|
-
stub_queues.each do |k, v|
|
77
|
-
dup[k] = v.dup
|
78
|
-
end
|
79
|
-
|
80
|
-
dup
|
81
|
-
end
|
82
|
-
|
83
|
-
def hash_of_arrays
|
84
|
-
Hash.new { |h, k| h[k] = [] }
|
85
|
-
end
|
86
|
-
|
87
|
-
def request_matcher_with_normalized_uri(matcher)
|
88
|
-
return matcher unless matcher.uri.is_a?(String) && matcher.uri.include?('+')
|
89
|
-
|
90
|
-
request = matcher.request.dup
|
91
|
-
request.uri = request.uri.gsub('+', '%20')
|
92
|
-
|
93
|
-
RequestMatcher.new(request, matcher.match_attributes)
|
94
|
-
end
|
95
22
|
end
|
96
23
|
end
|
97
24
|
end
|
@@ -44,7 +44,15 @@ module VCR
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def restore_stubs_checkpoint(cassette)
|
47
|
-
::Typhoeus::Hydra.stubs = checkpoints.delete(cassette) ||
|
47
|
+
::Typhoeus::Hydra.stubs = checkpoints.delete(cassette) || raise_no_checkpoint_error(cassette)
|
48
|
+
end
|
49
|
+
|
50
|
+
def after_adapters_loaded
|
51
|
+
# ensure WebMock's Typhoeus adapter does not conflict with us here
|
52
|
+
# (i.e. to double record requests or whatever).
|
53
|
+
if defined?(::WebMock::HttpLibAdapters::TyphoeusAdapter)
|
54
|
+
::WebMock::HttpLibAdapters::TyphoeusAdapter.disable!
|
55
|
+
end
|
48
56
|
end
|
49
57
|
|
50
58
|
private
|
@@ -6,8 +6,8 @@ module VCR
|
|
6
6
|
include VCR::HttpStubbingAdapters::Common
|
7
7
|
extend self
|
8
8
|
|
9
|
-
MINIMUM_VERSION = '1.
|
10
|
-
MAXIMUM_VERSION = '1.
|
9
|
+
MINIMUM_VERSION = '1.7.0'
|
10
|
+
MAXIMUM_VERSION = '1.7'
|
11
11
|
|
12
12
|
def http_connections_allowed=(value)
|
13
13
|
@http_connections_allowed = value
|
@@ -39,7 +39,7 @@ module VCR
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def restore_stubs_checkpoint(cassette)
|
42
|
-
::WebMock::StubRegistry.instance.request_stubs = checkpoints.delete(cassette) ||
|
42
|
+
::WebMock::StubRegistry.instance.request_stubs = checkpoints.delete(cassette) || raise_no_checkpoint_error(cassette)
|
43
43
|
end
|
44
44
|
|
45
45
|
private
|
@@ -11,11 +11,10 @@ module VCR
|
|
11
11
|
VCR::HttpStubbingAdapters::Faraday.exclusively_enabled do
|
12
12
|
VCR.use_cassette(*cassette_arguments(env)) do |cassette|
|
13
13
|
request = request_for(env)
|
14
|
-
request_matcher = request.matcher(cassette.match_requests_on)
|
15
14
|
|
16
15
|
if VCR::HttpStubbingAdapters::Faraday.uri_should_be_ignored?(request.uri)
|
17
16
|
@app.call(env)
|
18
|
-
elsif response = VCR::HttpStubbingAdapters::Faraday.stubbed_response_for(
|
17
|
+
elsif response = VCR::HttpStubbingAdapters::Faraday.stubbed_response_for(request)
|
19
18
|
headers = env[:response_headers] ||= ::Faraday::Utils::Headers.new
|
20
19
|
headers.update response.headers if response.headers
|
21
20
|
env.update :status => response.status.code, :body => response.body
|
data/lib/vcr/version.rb
CHANGED
data/spec/monkey_patches.rb
CHANGED
@@ -12,9 +12,14 @@ module MonkeyPatches
|
|
12
12
|
|
13
13
|
def enable!(scope)
|
14
14
|
case scope
|
15
|
-
when :
|
16
|
-
|
17
|
-
|
15
|
+
when :fakeweb
|
16
|
+
realias_all :with_fakeweb
|
17
|
+
enable!(:vcr) # fakeweb adapter relies upon VCR's Net::HTTP monkey patch
|
18
|
+
when :webmock
|
19
|
+
::WebMock::HttpLibAdapters::NetHttpAdapter.enable!
|
20
|
+
::WebMock::HttpLibAdapters::TyphoeusAdapter.enable! unless RUBY_INTERPRETER == :jruby
|
21
|
+
$original_webmock_callbacks.each do |cb|
|
22
|
+
::WebMock::CallbackRegistry.add_callback(cb[:options], cb[:block])
|
18
23
|
end
|
19
24
|
when :vcr
|
20
25
|
realias Net::HTTP, :request, :with_vcr
|
@@ -22,15 +27,13 @@ module MonkeyPatches
|
|
22
27
|
end
|
23
28
|
end
|
24
29
|
|
25
|
-
def
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
realias Net::HTTP, :request, :without_vcr
|
33
|
-
else raise ArgumentError.new("Unexpected scope: #{scope}")
|
30
|
+
def disable_all!
|
31
|
+
realias_all :without_monkeypatches
|
32
|
+
|
33
|
+
if defined?(::WebMock)
|
34
|
+
::WebMock::HttpLibAdapters::NetHttpAdapter.disable!
|
35
|
+
::WebMock::HttpLibAdapters::TyphoeusAdapter.disable! unless RUBY_INTERPRETER == :jruby
|
36
|
+
::WebMock::CallbackRegistry.reset
|
34
37
|
end
|
35
38
|
end
|
36
39
|
|
@@ -45,13 +48,7 @@ module MonkeyPatches
|
|
45
48
|
|
46
49
|
def capture_method_definition(klass, method, original)
|
47
50
|
klass.class_eval do
|
48
|
-
monkeypatch_methods = [
|
49
|
-
:with_vcr, :without_vcr,
|
50
|
-
:with_fakeweb, :without_fakeweb,
|
51
|
-
:with_webmock, :without_webmock
|
52
|
-
].select do |m|
|
53
|
-
method_defined?(:"#{method}_#{m}")
|
54
|
-
end
|
51
|
+
monkeypatch_methods = [:vcr, :fakeweb].select { |m| method_defined?(:"#{method}_with_#{m}") }
|
55
52
|
|
56
53
|
if original
|
57
54
|
if monkeypatch_methods.size > 0
|
@@ -78,6 +75,12 @@ module MonkeyPatches
|
|
78
75
|
def realias(klass, method, alias_extension)
|
79
76
|
klass.class_eval { alias_method method, :"#{method}_#{alias_extension}" }
|
80
77
|
end
|
78
|
+
|
79
|
+
def realias_all(alias_extension)
|
80
|
+
MONKEY_PATCHES.each do |mp|
|
81
|
+
realias mp.first, mp.last, alias_extension
|
82
|
+
end
|
83
|
+
end
|
81
84
|
end
|
82
85
|
|
83
86
|
# Require all the HTTP libraries--these must be required before WebMock
|
@@ -91,13 +94,26 @@ if RUBY_INTERPRETER == :mri
|
|
91
94
|
require 'typhoeus'
|
92
95
|
end
|
93
96
|
|
94
|
-
# The FakeWeb adapter must be required after WebMock's so
|
95
|
-
# that VCR's Net::HTTP monkey patch is loaded last.
|
96
|
-
# This allows us to disable it (i.e. by realiasing to
|
97
|
-
# the version of Net::HTTP's methods before it was loaded)
|
98
|
-
require 'vcr/http_stubbing_adapters/webmock'
|
99
97
|
require 'vcr/http_stubbing_adapters/fakeweb'
|
100
98
|
|
101
99
|
# All Net::HTTP monkey patches have now been loaded, so capture the
|
102
100
|
# appropriate method definitions so we can disable them later.
|
103
101
|
MonkeyPatches.init
|
102
|
+
|
103
|
+
# Disable FakeWeb/VCR Net::HTTP patches before WebMock
|
104
|
+
# subclasses Net::HTTP and inherits them...
|
105
|
+
MonkeyPatches.disable_all!
|
106
|
+
|
107
|
+
require 'vcr/http_stubbing_adapters/webmock'
|
108
|
+
$original_webmock_callbacks = ::WebMock::CallbackRegistry.callbacks
|
109
|
+
|
110
|
+
# disable all by default; we'll enable specific ones when we need them
|
111
|
+
MonkeyPatches.disable_all!
|
112
|
+
|
113
|
+
RSpec.configure do |config|
|
114
|
+
[:fakeweb, :webmock, :vcr].each do |scope|
|
115
|
+
config.before(:all, :with_monkey_patches => scope) { MonkeyPatches.enable!(scope) }
|
116
|
+
config.after(:all, :with_monkey_patches => scope) { MonkeyPatches.disable_all! }
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
data/spec/spec_helper.rb
CHANGED
@@ -41,7 +41,7 @@ end
|
|
41
41
|
|
42
42
|
RSpec.configure do |config|
|
43
43
|
config.color_enabled = true
|
44
|
-
config.debug = (using_git && RUBY_INTERPRETER == :mri && RUBY_VERSION != '1.9.1')
|
44
|
+
config.debug = (using_git && RUBY_INTERPRETER == :mri && RUBY_VERSION != '1.9.1' && !ENV['CI'])
|
45
45
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
46
46
|
|
47
47
|
tmp_dir = File.expand_path('../../tmp/cassette_library_dir', __FILE__)
|
@@ -78,22 +78,6 @@ RSpec.configure do |config|
|
|
78
78
|
$stderr = @orig_std_err
|
79
79
|
end
|
80
80
|
|
81
|
-
config.before(:all, :without_webmock_callbacks => true) do
|
82
|
-
@original_webmock_callbacks = ::WebMock::CallbackRegistry.callbacks
|
83
|
-
::WebMock::CallbackRegistry.reset
|
84
|
-
end
|
85
|
-
|
86
|
-
config.after(:all, :without_webmock_callbacks => true) do
|
87
|
-
@original_webmock_callbacks.each do |cb|
|
88
|
-
::WebMock::CallbackRegistry.add_callback(cb[:options], cb[:block])
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
[:all, :vcr].each do |scope|
|
93
|
-
config.before(:each, :without_monkey_patches => scope) { MonkeyPatches.disable!(scope) }
|
94
|
-
config.after(:each, :without_monkey_patches => scope) { MonkeyPatches.enable!(scope) }
|
95
|
-
end
|
96
|
-
|
97
81
|
config.filter_run :focus => true
|
98
82
|
config.run_all_when_everything_filtered = true
|
99
83
|
|
@@ -41,7 +41,7 @@ module VCR
|
|
41
41
|
def boot
|
42
42
|
# Use WEBrick since it's part of the ruby standard library and is available on all ruby interpreters.
|
43
43
|
options = { :Port => port }
|
44
|
-
options.merge!(:AccessLog => [], :Logger => WEBrick::BasicLog.new(StringIO.new)) unless ENV['
|
44
|
+
options.merge!(:AccessLog => [], :Logger => WEBrick::BasicLog.new(StringIO.new)) unless ENV['VERBOSE_SERVER']
|
45
45
|
Rack::Handler::WEBrick.run(Identify.new(@rack_app), options)
|
46
46
|
end
|
47
47
|
|
data/spec/vcr/cassette_spec.rb
CHANGED
@@ -449,7 +449,7 @@ describe VCR::Cassette do
|
|
449
449
|
end
|
450
450
|
|
451
451
|
it "matches old requests to new ones using the cassette's match attributes" do
|
452
|
-
pending("Need to fix this to work with Psych", :if => defined?(::Psych)
|
452
|
+
pending("Need to fix this to work with Psych", :if => defined?(::Psych)) do
|
453
453
|
[
|
454
454
|
old_interaction_1, old_interaction_2, old_interaction_3,
|
455
455
|
new_interaction_1, new_interaction_2, new_interaction_3
|
@@ -459,7 +459,7 @@ describe VCR::Cassette do
|
|
459
459
|
|
460
460
|
subject.eject
|
461
461
|
end
|
462
|
-
end
|
462
|
+
end unless ENV['CI']
|
463
463
|
else
|
464
464
|
it 'saves the old interactions followed by the new ones to disk' do
|
465
465
|
subject.eject
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe VCR::Net::HTTPResponse
|
3
|
+
describe VCR::Net::HTTPResponse do
|
4
4
|
def self.it_allows_the_body_to_be_read(expected_regex)
|
5
5
|
it 'allows the body to be read using #body' do
|
6
6
|
response.body.to_s.should =~ expected_regex
|
@@ -54,7 +54,7 @@ describe VCR::Net::HTTPResponse, :without_monkey_patches => :all do
|
|
54
54
|
http = Net::HTTP.new('localhost', VCR::SinatraApp.port)
|
55
55
|
res = http.send(http_verb_method, '/', &block)
|
56
56
|
res.should_not be_a(VCR::Net::HTTPResponse)
|
57
|
-
res.should_not be_a(::
|
57
|
+
res.should_not be_a(::Net::WebMockHTTPResponse)
|
58
58
|
res
|
59
59
|
end
|
60
60
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe "Net::HTTP Extensions", :
|
3
|
+
describe "Net::HTTP Extensions", :with_monkey_patches => :vcr do
|
4
4
|
before(:all) { VCR::SinatraApp.port } # ensure the server is started before instantiating any Net::HTTP instances
|
5
5
|
|
6
6
|
let(:uri) { URI.parse("http://localhost:#{VCR::SinatraApp.port}/") }
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe VCR::HttpStubbingAdapters::FakeWeb, :
|
3
|
+
describe VCR::HttpStubbingAdapters::FakeWeb, :with_monkey_patches => :fakeweb do
|
4
4
|
it_behaves_like 'an http stubbing adapter', ['net/http'], [:method, :uri, :host, :path], :needs_net_http_extension
|
5
5
|
|
6
6
|
it_performs('version checking',
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe VCR::HttpStubbingAdapters::Faraday
|
3
|
+
describe VCR::HttpStubbingAdapters::Faraday do
|
4
4
|
it_behaves_like 'an http stubbing adapter',
|
5
5
|
%w[ faraday-typhoeus faraday-net_http faraday-patron ],
|
6
6
|
[:method, :uri, :host, :path, :body, :headers],
|
@@ -27,8 +27,7 @@ describe VCR::HttpStubbingAdapters::Faraday, :without_monkey_patches => :all do
|
|
27
27
|
let(:match_attributes) { [:method, :uri] }
|
28
28
|
|
29
29
|
def stubbed_response_for(request)
|
30
|
-
|
31
|
-
subject.stubbed_response_for(matcher)
|
30
|
+
subject.stubbed_response_for(request)
|
32
31
|
end
|
33
32
|
|
34
33
|
before(:each) do
|
@@ -72,12 +71,6 @@ describe VCR::HttpStubbingAdapters::Faraday, :without_monkey_patches => :all do
|
|
72
71
|
subject.restore_stubs_checkpoint(cassette_1)
|
73
72
|
test_stubbed_responses
|
74
73
|
end
|
75
|
-
|
76
|
-
it 'restores the queues to the checkpoint state when a queue has been used' do
|
77
|
-
stubbed_response_for(request_1)
|
78
|
-
subject.restore_stubs_checkpoint(cassette_1)
|
79
|
-
test_stubbed_responses
|
80
|
-
end
|
81
74
|
end
|
82
75
|
end
|
83
76
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe VCR::HttpStubbingAdapters::Typhoeus
|
3
|
+
describe VCR::HttpStubbingAdapters::Typhoeus do
|
4
4
|
before(:each) do
|
5
5
|
::Typhoeus::Hydra.stubs = []
|
6
6
|
::Typhoeus::Hydra.allow_net_connect = true
|
@@ -21,5 +21,12 @@ describe VCR::HttpStubbingAdapters::Typhoeus, :without_monkey_patches => :vcr do
|
|
21
21
|
Typhoeus::VERSION = version
|
22
22
|
end
|
23
23
|
end
|
24
|
+
|
25
|
+
describe ".after_adapters_loaded" do
|
26
|
+
it 'disables the webmock typhoeus adapter so it does not conflict with our typhoeus adapter' do
|
27
|
+
::WebMock::HttpLibAdapters::TyphoeusAdapter.should_receive(:disable!)
|
28
|
+
described_class.after_adapters_loaded
|
29
|
+
end
|
30
|
+
end
|
24
31
|
end unless RUBY_PLATFORM == 'java'
|
25
32
|
|
@@ -1,14 +1,14 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe VCR::HttpStubbingAdapters::WebMock, :
|
3
|
+
describe VCR::HttpStubbingAdapters::WebMock, :with_monkey_patches => :webmock do
|
4
4
|
it_behaves_like 'an http stubbing adapter',
|
5
5
|
%w[net/http patron httpclient em-http-request curb],
|
6
6
|
[:method, :uri, :host, :path, :body, :headers]
|
7
7
|
|
8
8
|
it_performs('version checking',
|
9
|
-
:valid => %w[ 1.
|
10
|
-
:too_low => %w[ 0.9.9 0.9.10 0.1.30 1.0.30 1.
|
11
|
-
:too_high => %w[ 1.
|
9
|
+
:valid => %w[ 1.7.0 1.7.99 ],
|
10
|
+
:too_low => %w[ 0.9.9 0.9.10 0.1.30 1.0.30 1.6.9 ],
|
11
|
+
:too_high => %w[ 1.8.0 1.10.0 2.0.0 ]
|
12
12
|
) do
|
13
13
|
def stub_version(version)
|
14
14
|
WebMock.stub(:version).and_return(version)
|
data/spec/vcr_spec.rb
CHANGED
@@ -156,6 +156,12 @@ describe VCR do
|
|
156
156
|
end
|
157
157
|
end
|
158
158
|
|
159
|
+
it 'calls #after_adapters_loaded on the configured stubbing adapter' do
|
160
|
+
VCR::HttpStubbingAdapters::FakeWeb.should_receive(:after_adapters_loaded)
|
161
|
+
VCR::Config.stub_with :fakeweb
|
162
|
+
VCR.http_stubbing_adapter
|
163
|
+
end
|
164
|
+
|
159
165
|
it 'raises an error if both :fakeweb and :webmock are configured' do
|
160
166
|
VCR::Config.stub_with :fakeweb, :webmock
|
161
167
|
|
data/vcr.gemspec
CHANGED
metadata
CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 1.
|
8
|
+
- 11
|
9
|
+
- 1
|
10
|
+
version: 1.11.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Myron Marston
|
@@ -15,8 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
19
|
-
default_executable:
|
18
|
+
date: 2011-08-19 00:00:00 Z
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
21
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
@@ -30,10 +29,10 @@ dependencies:
|
|
30
29
|
- 7
|
31
30
|
- 2
|
32
31
|
version: 0.7.2
|
33
|
-
requirement: *id001
|
34
|
-
prerelease: false
|
35
32
|
name: faraday
|
36
33
|
type: :development
|
34
|
+
prerelease: false
|
35
|
+
requirement: *id001
|
37
36
|
- !ruby/object:Gem::Dependency
|
38
37
|
version_requirements: &id002 !ruby/object:Gem::Requirement
|
39
38
|
none: false
|
@@ -46,10 +45,10 @@ dependencies:
|
|
46
45
|
- 3
|
47
46
|
- 0
|
48
47
|
version: 1.3.0
|
49
|
-
requirement: *id002
|
50
|
-
prerelease: false
|
51
48
|
name: fakeweb
|
52
49
|
type: :development
|
50
|
+
prerelease: false
|
51
|
+
requirement: *id002
|
53
52
|
- !ruby/object:Gem::Dependency
|
54
53
|
version_requirements: &id003 !ruby/object:Gem::Requirement
|
55
54
|
none: false
|
@@ -63,10 +62,10 @@ dependencies:
|
|
63
62
|
- 5
|
64
63
|
- 2
|
65
64
|
version: 2.1.5.2
|
66
|
-
requirement: *id003
|
67
|
-
prerelease: false
|
68
65
|
name: httpclient
|
69
66
|
type: :development
|
67
|
+
prerelease: false
|
68
|
+
requirement: *id003
|
70
69
|
- !ruby/object:Gem::Dependency
|
71
70
|
version_requirements: &id004 !ruby/object:Gem::Requirement
|
72
71
|
none: false
|
@@ -79,10 +78,10 @@ dependencies:
|
|
79
78
|
- 8
|
80
79
|
- 7
|
81
80
|
version: 0.8.7
|
82
|
-
requirement: *id004
|
83
|
-
prerelease: false
|
84
81
|
name: rake
|
85
82
|
type: :development
|
83
|
+
prerelease: false
|
84
|
+
requirement: *id004
|
86
85
|
- !ruby/object:Gem::Dependency
|
87
86
|
version_requirements: &id005 !ruby/object:Gem::Requirement
|
88
87
|
none: false
|
@@ -95,10 +94,10 @@ dependencies:
|
|
95
94
|
- 3
|
96
95
|
- 5
|
97
96
|
version: 0.3.5
|
98
|
-
requirement: *id005
|
99
|
-
prerelease: false
|
100
97
|
name: timecop
|
101
98
|
type: :development
|
99
|
+
prerelease: false
|
100
|
+
requirement: *id005
|
102
101
|
- !ruby/object:Gem::Dependency
|
103
102
|
version_requirements: &id006 !ruby/object:Gem::Requirement
|
104
103
|
none: false
|
@@ -111,10 +110,10 @@ dependencies:
|
|
111
110
|
- 2
|
112
111
|
- 6
|
113
112
|
version: 2.2.6
|
114
|
-
requirement: *id006
|
115
|
-
prerelease: false
|
116
113
|
name: addressable
|
117
114
|
type: :development
|
115
|
+
prerelease: false
|
116
|
+
requirement: *id006
|
118
117
|
- !ruby/object:Gem::Dependency
|
119
118
|
version_requirements: &id007 !ruby/object:Gem::Requirement
|
120
119
|
none: false
|
@@ -127,10 +126,10 @@ dependencies:
|
|
127
126
|
- 9
|
128
127
|
- 2
|
129
128
|
version: 2.9.2
|
130
|
-
requirement: *id007
|
131
|
-
prerelease: false
|
132
129
|
name: shoulda
|
133
130
|
type: :development
|
131
|
+
prerelease: false
|
132
|
+
requirement: *id007
|
134
133
|
- !ruby/object:Gem::Dependency
|
135
134
|
version_requirements: &id008 !ruby/object:Gem::Requirement
|
136
135
|
none: false
|
@@ -142,10 +141,10 @@ dependencies:
|
|
142
141
|
- 2
|
143
142
|
- 6
|
144
143
|
version: "2.6"
|
145
|
-
requirement: *id008
|
146
|
-
prerelease: false
|
147
144
|
name: rspec
|
148
145
|
type: :development
|
146
|
+
prerelease: false
|
147
|
+
requirement: *id008
|
149
148
|
- !ruby/object:Gem::Dependency
|
150
149
|
version_requirements: &id009 !ruby/object:Gem::Requirement
|
151
150
|
none: false
|
@@ -158,10 +157,10 @@ dependencies:
|
|
158
157
|
- 1
|
159
158
|
- 0
|
160
159
|
version: 1.1.0
|
161
|
-
requirement: *id009
|
162
|
-
prerelease: false
|
163
160
|
name: rack
|
164
161
|
type: :development
|
162
|
+
prerelease: false
|
163
|
+
requirement: *id009
|
165
164
|
- !ruby/object:Gem::Dependency
|
166
165
|
version_requirements: &id010 !ruby/object:Gem::Requirement
|
167
166
|
none: false
|
@@ -174,10 +173,10 @@ dependencies:
|
|
174
173
|
- 2
|
175
174
|
- 4
|
176
175
|
version: 0.2.4
|
177
|
-
requirement: *id010
|
178
|
-
prerelease: false
|
179
176
|
name: aruba
|
180
177
|
type: :development
|
178
|
+
prerelease: false
|
179
|
+
requirement: *id010
|
181
180
|
- !ruby/object:Gem::Dependency
|
182
181
|
version_requirements: &id011 !ruby/object:Gem::Requirement
|
183
182
|
none: false
|
@@ -190,10 +189,10 @@ dependencies:
|
|
190
189
|
- 1
|
191
190
|
- 0
|
192
191
|
version: 1.1.0
|
193
|
-
requirement: *id011
|
194
|
-
prerelease: false
|
195
192
|
name: sinatra
|
196
193
|
type: :development
|
194
|
+
prerelease: false
|
195
|
+
requirement: *id011
|
197
196
|
- !ruby/object:Gem::Dependency
|
198
197
|
version_requirements: &id012 !ruby/object:Gem::Requirement
|
199
198
|
none: false
|
@@ -206,10 +205,10 @@ dependencies:
|
|
206
205
|
- 0
|
207
206
|
- 7
|
208
207
|
version: 1.0.7
|
209
|
-
requirement: *id012
|
210
|
-
prerelease: false
|
211
208
|
name: bundler
|
212
209
|
type: :development
|
210
|
+
prerelease: false
|
211
|
+
requirement: *id012
|
213
212
|
- !ruby/object:Gem::Dependency
|
214
213
|
version_requirements: &id013 !ruby/object:Gem::Requirement
|
215
214
|
none: false
|
@@ -222,10 +221,10 @@ dependencies:
|
|
222
221
|
- 6
|
223
222
|
- 5
|
224
223
|
version: 0.6.5
|
225
|
-
requirement: *id013
|
226
|
-
prerelease: false
|
227
224
|
name: excon
|
228
225
|
type: :development
|
226
|
+
prerelease: false
|
227
|
+
requirement: *id013
|
229
228
|
- !ruby/object:Gem::Dependency
|
230
229
|
version_requirements: &id014 !ruby/object:Gem::Requirement
|
231
230
|
none: false
|
@@ -238,26 +237,26 @@ dependencies:
|
|
238
237
|
- 9
|
239
238
|
- 4
|
240
239
|
version: 0.9.4
|
241
|
-
requirement: *id014
|
242
|
-
prerelease: false
|
243
240
|
name: cucumber
|
244
241
|
type: :development
|
242
|
+
prerelease: false
|
243
|
+
requirement: *id014
|
245
244
|
- !ruby/object:Gem::Dependency
|
246
245
|
version_requirements: &id015 !ruby/object:Gem::Requirement
|
247
246
|
none: false
|
248
247
|
requirements:
|
249
248
|
- - ~>
|
250
249
|
- !ruby/object:Gem::Version
|
251
|
-
hash:
|
250
|
+
hash: 3
|
252
251
|
segments:
|
253
252
|
- 1
|
254
|
-
-
|
253
|
+
- 7
|
255
254
|
- 4
|
256
|
-
version: 1.
|
257
|
-
requirement: *id015
|
258
|
-
prerelease: false
|
255
|
+
version: 1.7.4
|
259
256
|
name: webmock
|
260
257
|
type: :development
|
258
|
+
prerelease: false
|
259
|
+
requirement: *id015
|
261
260
|
- !ruby/object:Gem::Dependency
|
262
261
|
version_requirements: &id016 !ruby/object:Gem::Requirement
|
263
262
|
none: false
|
@@ -270,10 +269,10 @@ dependencies:
|
|
270
269
|
- 7
|
271
270
|
- 8
|
272
271
|
version: 0.7.8
|
273
|
-
requirement: *id016
|
274
|
-
prerelease: false
|
275
272
|
name: curb
|
276
273
|
type: :development
|
274
|
+
prerelease: false
|
275
|
+
requirement: *id016
|
277
276
|
- !ruby/object:Gem::Dependency
|
278
277
|
version_requirements: &id017 !ruby/object:Gem::Requirement
|
279
278
|
none: false
|
@@ -286,10 +285,10 @@ dependencies:
|
|
286
285
|
- 4
|
287
286
|
- 9
|
288
287
|
version: 0.4.9
|
289
|
-
requirement: *id017
|
290
|
-
prerelease: false
|
291
288
|
name: patron
|
292
289
|
type: :development
|
290
|
+
prerelease: false
|
291
|
+
requirement: *id017
|
293
292
|
- !ruby/object:Gem::Dependency
|
294
293
|
version_requirements: &id018 !ruby/object:Gem::Requirement
|
295
294
|
none: false
|
@@ -302,10 +301,10 @@ dependencies:
|
|
302
301
|
- 3
|
303
302
|
- 0
|
304
303
|
version: 0.3.0
|
305
|
-
requirement: *id018
|
306
|
-
prerelease: false
|
307
304
|
name: em-http-request
|
308
305
|
type: :development
|
306
|
+
prerelease: false
|
307
|
+
requirement: *id018
|
309
308
|
- !ruby/object:Gem::Dependency
|
310
309
|
version_requirements: &id019 !ruby/object:Gem::Requirement
|
311
310
|
none: false
|
@@ -318,10 +317,10 @@ dependencies:
|
|
318
317
|
- 2
|
319
318
|
- 1
|
320
319
|
version: 0.2.1
|
321
|
-
requirement: *id019
|
322
|
-
prerelease: false
|
323
320
|
name: typhoeus
|
324
321
|
type: :development
|
322
|
+
prerelease: false
|
323
|
+
requirement: *id019
|
325
324
|
description: VCR provides a simple API to record and replay your test suite's HTTP interactions. It works with a variety of HTTP client libraries, HTTP stubbing libraries and testing frameworks.
|
326
325
|
email: myron.marston@gmail.com
|
327
326
|
executables: []
|
@@ -485,7 +484,6 @@ files:
|
|
485
484
|
- spec/vcr/version_spec.rb
|
486
485
|
- spec/vcr_spec.rb
|
487
486
|
- vcr.gemspec
|
488
|
-
has_rdoc: true
|
489
487
|
homepage: http://github.com/myronmarston/vcr
|
490
488
|
licenses: []
|
491
489
|
|
@@ -519,7 +517,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
519
517
|
requirements: []
|
520
518
|
|
521
519
|
rubyforge_project:
|
522
|
-
rubygems_version: 1.6
|
520
|
+
rubygems_version: 1.8.6
|
523
521
|
signing_key:
|
524
522
|
specification_version: 3
|
525
523
|
summary: Record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate tests.
|