vcr 1.10.0 → 1.10.2

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml CHANGED
@@ -1,11 +1,6 @@
1
1
  script: "bundle exec rake ci:build"
2
2
  rvm:
3
- - 1.8.6
4
3
  - 1.8.7
5
- - 1.9.1
6
4
  - 1.9.2
7
- - ree
8
- - jruby
9
- - rbx
10
5
  env:
11
6
  - CI=true
data/CHANGELOG.md CHANGED
@@ -1,6 +1,24 @@
1
1
  ## In git
2
2
 
3
- [Full Changelog](http://github.com/myronmarston/vcr/compare/v1.10.0...master)
3
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v1.10.2...master)
4
+
5
+ ## 1.10.2 (July 16, 2011)
6
+
7
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v1.10.1...v1.10.2)
8
+
9
+ * Yanked 1.10.1 and rebuilt gem on 1.8.7 to deal with syck/psych
10
+ incompatibilties in gemspec.
11
+
12
+ ## 1.10.1 (July 16, 2011)
13
+
14
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v1.10.0...v1.10.1)
15
+
16
+ * Fix typo in error message [Bradley](https://github.com/bradleyisotope).
17
+ * Fix excon adapter to properly handle queries specified as a hash.
18
+ * Fix excon adapter to stub a response with a hash as excon expects
19
+ [Wesley Beary](https://github.com/geemus).
20
+ * Fix excon adapter so that it records a response even when excon raises
21
+ an error due to an unexpected response.
4
22
 
5
23
  ## 1.10.0 (May 18, 2011)
6
24
 
data/Rakefile CHANGED
@@ -70,11 +70,15 @@ task :relish do
70
70
  end
71
71
 
72
72
  require 'vcr/version'
73
- sh "relish versions:add myronmarston/vcr:#{VCR.version}"
73
+ sh "relish versions:add myronmarston/vcr:#{VCR.version}" if ENV['NEW_RELISH_RELEASE']
74
74
  sh "relish push vcr:#{VCR.version}"
75
75
  end
76
76
 
77
- task :release => :relish
77
+ task :prep_relish_release do
78
+ ENV['NEW_RELISH_RELEASE'] = 'true'
79
+ end
80
+
81
+ task :release => [:prep_relish_release, :relish]
78
82
 
79
83
  # For gem-test: http://gem-testers.org/
80
84
  task :test => :spec
@@ -2,7 +2,7 @@ Feature: Filter sensitive data
2
2
 
3
3
  The `filter_sensitive_data` configuration option can be used to prevent
4
4
  sensitive data from being written to your cassette files. This may be
5
- important if you commit your cassettes files to source controla and do
5
+ important if you commit your cassettes files to source control and do
6
6
  not want your sensitive data exposed. Pass the following arguments to
7
7
  `filter_sensitive_data`:
8
8
 
@@ -146,7 +146,7 @@ Feature: Net::HTTP
146
146
  c.cassette_library_dir = 'cassettes'
147
147
  end
148
148
 
149
- uri = URI("https://gist.github.com/raw/fb555cb593f3349d53af/6921dd638337d3f6a51b0e02e7f30e3c414f70d6/vcr_gist")
149
+ uri = URI("https://raw.github.com/gist/fb555cb593f3349d53af/6921dd638337d3f6a51b0e02e7f30e3c414f70d6/vcr_gist")
150
150
 
151
151
  VCR.use_cassette('https', :record => :new_episodes) do
152
152
  http = Net::HTTP.new(uri.host, uri.port)
data/lib/vcr.rb CHANGED
@@ -58,7 +58,7 @@ module VCR
58
58
  cassette
59
59
  elsif !ignore_cassettes?
60
60
  message = "VCR is turned off. You must turn it on before you can insert a cassette. " +
61
- "Or you can use the `:ignore_cassette => true` option to completely ignore cassette insertions."
61
+ "Or you can use the `:ignore_cassettes => true` option to completely ignore cassette insertions."
62
62
  raise TurnedOffError.new(message)
63
63
  end
64
64
  end
@@ -8,7 +8,7 @@ module VCR
8
8
 
9
9
  class HttpConnectionNotAllowedError < StandardError; end
10
10
 
11
- MINIMUM_VERSION = '0.6.2'
11
+ MINIMUM_VERSION = '0.6.5'
12
12
  MAXIMUM_VERSION = '0.6'
13
13
 
14
14
  attr_writer :http_connections_allowed
@@ -119,24 +119,40 @@ module VCR
119
119
  end
120
120
 
121
121
  def stubbed_response
122
- unless defined?(@stubbed_response)
123
- @stubbed_response = VCR::HttpStubbingAdapters::Excon.stubbed_response_for(vcr_request)
124
-
125
- if @stubbed_response && @stubbed_response.headers
126
- @stubbed_response.headers = normalized_headers(@stubbed_response.headers)
122
+ @stubbed_response ||= begin
123
+ if stubbed_response = VCR::HttpStubbingAdapters::Excon.stubbed_response_for(vcr_request)
124
+ {
125
+ :body => stubbed_response.body,
126
+ :headers => normalized_headers(stubbed_response.headers || {}),
127
+ :status => stubbed_response.status.code
128
+ }
127
129
  end
128
130
  end
129
-
130
- @stubbed_response
131
131
  end
132
132
 
133
133
  def http_connections_allowed?
134
134
  VCR::HttpStubbingAdapters::Excon.http_connections_allowed?
135
135
  end
136
136
 
137
+ def response_from_excon_error(error)
138
+ if error.respond_to?(:response)
139
+ error.response
140
+ elsif error.respond_to?(:socket_error)
141
+ response_from_excon_error(error.socket_error)
142
+ else
143
+ warn "WARNING: VCR could not extract a response from Excon error (#{error.inspect})"
144
+ end
145
+ end
146
+
137
147
  def perform_real_request
138
148
  connection = ::Excon.new(uri)
139
- response = connection.request(params.merge(:mock => false))
149
+
150
+ response = begin
151
+ connection.request(params.merge(:mock => false))
152
+ rescue ::Excon::Errors::Error => e
153
+ yield response_from_excon_error(e) if block_given?
154
+ raise e
155
+ end
140
156
 
141
157
  yield response if block_given?
142
158
 
@@ -153,10 +169,27 @@ module VCR
153
169
  end
154
170
 
155
171
  def uri
156
- @uri ||= begin
157
- uri = "#{params[:scheme]}://#{params[:host]}:#{params[:port]}#{params[:path]}"
158
- uri << "?#{params[:query]}" if params[:query]
159
- uri
172
+ @uri ||= "#{params[:scheme]}://#{params[:host]}:#{params[:port]}#{params[:path]}#{query}"
173
+ end
174
+
175
+ def query
176
+ @query ||= case params[:query]
177
+ when String
178
+ "?#{params[:query]}"
179
+ when Hash
180
+ qry = '?'
181
+ for key, values in params[:query]
182
+ if values.nil?
183
+ qry << key.to_s << '&'
184
+ else
185
+ for value in [*values]
186
+ qry << key.to_s << '=' << CGI.escape(value.to_s) << '&'
187
+ end
188
+ end
189
+ end
190
+ qry.chop! # remove trailing '&'
191
+ else
192
+ ''
160
193
  end
161
194
  end
162
195
 
data/lib/vcr/version.rb CHANGED
@@ -3,7 +3,7 @@ module VCR
3
3
 
4
4
  def version
5
5
  @version ||= begin
6
- string = '1.10.0'
6
+ string = '1.10.2'
7
7
 
8
8
  def string.parts
9
9
  split('.').map { |p| p.to_i }
@@ -6,6 +6,10 @@ module VCR
6
6
  "GET to root"
7
7
  end
8
8
 
9
+ get '/search' do
10
+ "query: #{params[:q]}"
11
+ end
12
+
9
13
  get '/localhost_test' do
10
14
  "Localhost response"
11
15
  end
@@ -7,8 +7,8 @@ describe VCR::HttpStubbingAdapters::Excon, :without_monkey_patches => :vcr do
7
7
  :status_message_not_exposed
8
8
 
9
9
  it_performs('version checking',
10
- :valid => %w[ 0.6.2 0.6.99 ],
11
- :too_low => %w[ 0.5.99 0.6.1 ],
10
+ :valid => %w[ 0.6.5 0.6.99 ],
11
+ :too_low => %w[ 0.5.99 0.6.4 ],
12
12
  :too_high => %w[ 0.7.0 1.0.0 ]
13
13
  ) do
14
14
  before(:each) { @orig_version = Excon::VERSION }
@@ -19,5 +19,55 @@ describe VCR::HttpStubbingAdapters::Excon, :without_monkey_patches => :vcr do
19
19
  Excon::VERSION = version
20
20
  end
21
21
  end
22
+
23
+ context "when the query is specified as a hash option" do
24
+ let(:excon) { ::Excon.new("http://localhost:#{VCR::SinatraApp.port}/search") }
25
+
26
+ it 'properly records and plays back the response' do
27
+ described_class.http_connections_allowed = true
28
+ recorded, played_back = [1, 2].map do
29
+ VCR.use_cassette('excon_query', :record => :once) do
30
+ excon.request(:method => :get, :query => { :q => 'Tolkien' }).body
31
+ end
32
+ end
33
+
34
+ recorded.should == played_back
35
+ recorded.should == 'query: Tolkien'
36
+ end
37
+ end
38
+
39
+ context "when Excon's streaming API is used" do
40
+ it 'properly records and plays back the response' do
41
+ described_class.http_connections_allowed = true
42
+ recorded, played_back = [1, 2].map do
43
+ chunks = []
44
+
45
+ VCR.use_cassette('excon_streaming', :record => :once) do
46
+ Excon.get("http://localhost:#{VCR::SinatraApp.port}/foo") do |chunk, remaining_bytes, total_bytes|
47
+ chunks << chunk
48
+ end
49
+ end
50
+
51
+ chunks.join
52
+ end
53
+
54
+ recorded.should == played_back
55
+ recorded.should == "FOO!"
56
+ end
57
+ end
58
+
59
+ context 'when Excon raises an error due to an unexpected response status' do
60
+ it 'still records properly' do
61
+ described_class.http_connections_allowed = true
62
+
63
+ VCR.should_receive(:record_http_interaction) do |interaction|
64
+ interaction.response.status.code.should == 404
65
+ end
66
+
67
+ expect {
68
+ Excon.get("http://localhost:#{VCR::SinatraApp.port}/not_found", :expects => 200)
69
+ }.to raise_error(Excon::Errors::Error)
70
+ end
71
+ end
22
72
  end
23
73
 
data/vcr.gemspec CHANGED
@@ -30,9 +30,9 @@ Gem::Specification.new do |s|
30
30
  'webmock' => '~> 1.6.4',
31
31
  'addressable' => '~> 2.2.6',
32
32
 
33
- 'faraday' => '~> 0.6.0',
33
+ 'faraday' => '~> 0.7.2',
34
34
  'httpclient' => '~> 2.1.5.2',
35
- 'excon' => '~> 0.6.2',
35
+ 'excon' => '~> 0.6.5',
36
36
 
37
37
  'timecop' => '~> 0.3.5',
38
38
  'rack' => '1.1.0',
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vcr
3
3
  version: !ruby/object:Gem::Version
4
- hash: 63
4
+ hash: 59
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 10
9
- - 0
10
- version: 1.10.0
9
+ - 2
10
+ version: 1.10.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Myron Marston
@@ -15,11 +15,11 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-05-19 00:00:00 Z
18
+ date: 2011-07-16 00:00:00 -07:00
19
+ default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
- type: :development
22
- requirement: &id001 !ruby/object:Gem::Requirement
22
+ version_requirements: &id001 !ruby/object:Gem::Requirement
23
23
  none: false
24
24
  requirements:
25
25
  - - ~>
@@ -27,15 +27,15 @@ dependencies:
27
27
  hash: 7
28
28
  segments:
29
29
  - 0
30
- - 6
31
- - 0
32
- version: 0.6.0
33
- version_requirements: *id001
34
- name: faraday
30
+ - 7
31
+ - 2
32
+ version: 0.7.2
33
+ requirement: *id001
35
34
  prerelease: false
36
- - !ruby/object:Gem::Dependency
35
+ name: faraday
37
36
  type: :development
38
- requirement: &id002 !ruby/object:Gem::Requirement
37
+ - !ruby/object:Gem::Dependency
38
+ version_requirements: &id002 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -46,12 +46,12 @@ dependencies:
46
46
  - 3
47
47
  - 0
48
48
  version: 1.3.0
49
- version_requirements: *id002
50
- name: fakeweb
49
+ requirement: *id002
51
50
  prerelease: false
52
- - !ruby/object:Gem::Dependency
51
+ name: fakeweb
53
52
  type: :development
54
- requirement: &id003 !ruby/object:Gem::Requirement
53
+ - !ruby/object:Gem::Dependency
54
+ version_requirements: &id003 !ruby/object:Gem::Requirement
55
55
  none: false
56
56
  requirements:
57
57
  - - ~>
@@ -63,12 +63,12 @@ dependencies:
63
63
  - 5
64
64
  - 2
65
65
  version: 2.1.5.2
66
- version_requirements: *id003
67
- name: httpclient
66
+ requirement: *id003
68
67
  prerelease: false
69
- - !ruby/object:Gem::Dependency
68
+ name: httpclient
70
69
  type: :development
71
- requirement: &id004 !ruby/object:Gem::Requirement
70
+ - !ruby/object:Gem::Dependency
71
+ version_requirements: &id004 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -79,12 +79,12 @@ dependencies:
79
79
  - 8
80
80
  - 7
81
81
  version: 0.8.7
82
- version_requirements: *id004
83
- name: rake
82
+ requirement: *id004
84
83
  prerelease: false
85
- - !ruby/object:Gem::Dependency
84
+ name: rake
86
85
  type: :development
87
- requirement: &id005 !ruby/object:Gem::Requirement
86
+ - !ruby/object:Gem::Dependency
87
+ version_requirements: &id005 !ruby/object:Gem::Requirement
88
88
  none: false
89
89
  requirements:
90
90
  - - ~>
@@ -95,12 +95,12 @@ dependencies:
95
95
  - 3
96
96
  - 5
97
97
  version: 0.3.5
98
- version_requirements: *id005
99
- name: timecop
98
+ requirement: *id005
100
99
  prerelease: false
101
- - !ruby/object:Gem::Dependency
100
+ name: timecop
102
101
  type: :development
103
- requirement: &id006 !ruby/object:Gem::Requirement
102
+ - !ruby/object:Gem::Dependency
103
+ version_requirements: &id006 !ruby/object:Gem::Requirement
104
104
  none: false
105
105
  requirements:
106
106
  - - ~>
@@ -111,12 +111,12 @@ dependencies:
111
111
  - 2
112
112
  - 6
113
113
  version: 2.2.6
114
- version_requirements: *id006
115
- name: addressable
114
+ requirement: *id006
116
115
  prerelease: false
117
- - !ruby/object:Gem::Dependency
116
+ name: addressable
118
117
  type: :development
119
- requirement: &id007 !ruby/object:Gem::Requirement
118
+ - !ruby/object:Gem::Dependency
119
+ version_requirements: &id007 !ruby/object:Gem::Requirement
120
120
  none: false
121
121
  requirements:
122
122
  - - ~>
@@ -127,12 +127,12 @@ dependencies:
127
127
  - 9
128
128
  - 2
129
129
  version: 2.9.2
130
- version_requirements: *id007
131
- name: shoulda
130
+ requirement: *id007
132
131
  prerelease: false
133
- - !ruby/object:Gem::Dependency
132
+ name: shoulda
134
133
  type: :development
135
- requirement: &id008 !ruby/object:Gem::Requirement
134
+ - !ruby/object:Gem::Dependency
135
+ version_requirements: &id008 !ruby/object:Gem::Requirement
136
136
  none: false
137
137
  requirements:
138
138
  - - ~>
@@ -142,12 +142,12 @@ dependencies:
142
142
  - 2
143
143
  - 6
144
144
  version: "2.6"
145
- version_requirements: *id008
146
- name: rspec
145
+ requirement: *id008
147
146
  prerelease: false
148
- - !ruby/object:Gem::Dependency
147
+ name: rspec
149
148
  type: :development
150
- requirement: &id009 !ruby/object:Gem::Requirement
149
+ - !ruby/object:Gem::Dependency
150
+ version_requirements: &id009 !ruby/object:Gem::Requirement
151
151
  none: false
152
152
  requirements:
153
153
  - - "="
@@ -158,12 +158,12 @@ dependencies:
158
158
  - 1
159
159
  - 0
160
160
  version: 1.1.0
161
- version_requirements: *id009
162
- name: rack
161
+ requirement: *id009
163
162
  prerelease: false
164
- - !ruby/object:Gem::Dependency
163
+ name: rack
165
164
  type: :development
166
- requirement: &id010 !ruby/object:Gem::Requirement
165
+ - !ruby/object:Gem::Dependency
166
+ version_requirements: &id010 !ruby/object:Gem::Requirement
167
167
  none: false
168
168
  requirements:
169
169
  - - "="
@@ -174,12 +174,12 @@ dependencies:
174
174
  - 2
175
175
  - 4
176
176
  version: 0.2.4
177
- version_requirements: *id010
178
- name: aruba
177
+ requirement: *id010
179
178
  prerelease: false
180
- - !ruby/object:Gem::Dependency
179
+ name: aruba
181
180
  type: :development
182
- requirement: &id011 !ruby/object:Gem::Requirement
181
+ - !ruby/object:Gem::Dependency
182
+ version_requirements: &id011 !ruby/object:Gem::Requirement
183
183
  none: false
184
184
  requirements:
185
185
  - - ~>
@@ -190,12 +190,12 @@ dependencies:
190
190
  - 1
191
191
  - 0
192
192
  version: 1.1.0
193
- version_requirements: *id011
194
- name: sinatra
193
+ requirement: *id011
195
194
  prerelease: false
196
- - !ruby/object:Gem::Dependency
195
+ name: sinatra
197
196
  type: :development
198
- requirement: &id012 !ruby/object:Gem::Requirement
197
+ - !ruby/object:Gem::Dependency
198
+ version_requirements: &id012 !ruby/object:Gem::Requirement
199
199
  none: false
200
200
  requirements:
201
201
  - - ~>
@@ -206,28 +206,28 @@ dependencies:
206
206
  - 0
207
207
  - 7
208
208
  version: 1.0.7
209
- version_requirements: *id012
210
- name: bundler
209
+ requirement: *id012
211
210
  prerelease: false
212
- - !ruby/object:Gem::Dependency
211
+ name: bundler
213
212
  type: :development
214
- requirement: &id013 !ruby/object:Gem::Requirement
213
+ - !ruby/object:Gem::Dependency
214
+ version_requirements: &id013 !ruby/object:Gem::Requirement
215
215
  none: false
216
216
  requirements:
217
217
  - - ~>
218
218
  - !ruby/object:Gem::Version
219
- hash: 3
219
+ hash: 13
220
220
  segments:
221
221
  - 0
222
222
  - 6
223
- - 2
224
- version: 0.6.2
225
- version_requirements: *id013
226
- name: excon
223
+ - 5
224
+ version: 0.6.5
225
+ requirement: *id013
227
226
  prerelease: false
228
- - !ruby/object:Gem::Dependency
227
+ name: excon
229
228
  type: :development
230
- requirement: &id014 !ruby/object:Gem::Requirement
229
+ - !ruby/object:Gem::Dependency
230
+ version_requirements: &id014 !ruby/object:Gem::Requirement
231
231
  none: false
232
232
  requirements:
233
233
  - - ~>
@@ -238,12 +238,12 @@ dependencies:
238
238
  - 9
239
239
  - 4
240
240
  version: 0.9.4
241
- version_requirements: *id014
242
- name: cucumber
241
+ requirement: *id014
243
242
  prerelease: false
244
- - !ruby/object:Gem::Dependency
243
+ name: cucumber
245
244
  type: :development
246
- requirement: &id015 !ruby/object:Gem::Requirement
245
+ - !ruby/object:Gem::Dependency
246
+ version_requirements: &id015 !ruby/object:Gem::Requirement
247
247
  none: false
248
248
  requirements:
249
249
  - - ~>
@@ -254,12 +254,12 @@ dependencies:
254
254
  - 6
255
255
  - 4
256
256
  version: 1.6.4
257
- version_requirements: *id015
258
- name: webmock
257
+ requirement: *id015
259
258
  prerelease: false
260
- - !ruby/object:Gem::Dependency
259
+ name: webmock
261
260
  type: :development
262
- requirement: &id016 !ruby/object:Gem::Requirement
261
+ - !ruby/object:Gem::Dependency
262
+ version_requirements: &id016 !ruby/object:Gem::Requirement
263
263
  none: false
264
264
  requirements:
265
265
  - - "="
@@ -270,12 +270,12 @@ dependencies:
270
270
  - 7
271
271
  - 8
272
272
  version: 0.7.8
273
- version_requirements: *id016
274
- name: curb
273
+ requirement: *id016
275
274
  prerelease: false
276
- - !ruby/object:Gem::Dependency
275
+ name: curb
277
276
  type: :development
278
- requirement: &id017 !ruby/object:Gem::Requirement
277
+ - !ruby/object:Gem::Dependency
278
+ version_requirements: &id017 !ruby/object:Gem::Requirement
279
279
  none: false
280
280
  requirements:
281
281
  - - "="
@@ -286,12 +286,12 @@ dependencies:
286
286
  - 4
287
287
  - 9
288
288
  version: 0.4.9
289
- version_requirements: *id017
290
- name: patron
289
+ requirement: *id017
291
290
  prerelease: false
292
- - !ruby/object:Gem::Dependency
291
+ name: patron
293
292
  type: :development
294
- requirement: &id018 !ruby/object:Gem::Requirement
293
+ - !ruby/object:Gem::Dependency
294
+ version_requirements: &id018 !ruby/object:Gem::Requirement
295
295
  none: false
296
296
  requirements:
297
297
  - - ~>
@@ -302,12 +302,12 @@ dependencies:
302
302
  - 3
303
303
  - 0
304
304
  version: 0.3.0
305
- version_requirements: *id018
306
- name: em-http-request
305
+ requirement: *id018
307
306
  prerelease: false
308
- - !ruby/object:Gem::Dependency
307
+ name: em-http-request
309
308
  type: :development
310
- requirement: &id019 !ruby/object:Gem::Requirement
309
+ - !ruby/object:Gem::Dependency
310
+ version_requirements: &id019 !ruby/object:Gem::Requirement
311
311
  none: false
312
312
  requirements:
313
313
  - - ~>
@@ -318,9 +318,10 @@ dependencies:
318
318
  - 2
319
319
  - 1
320
320
  version: 0.2.1
321
- version_requirements: *id019
322
- name: typhoeus
321
+ requirement: *id019
323
322
  prerelease: false
323
+ name: typhoeus
324
+ type: :development
324
325
  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.
325
326
  email: myron.marston@gmail.com
326
327
  executables: []
@@ -484,6 +485,7 @@ files:
484
485
  - spec/vcr/version_spec.rb
485
486
  - spec/vcr_spec.rb
486
487
  - vcr.gemspec
488
+ has_rdoc: true
487
489
  homepage: http://github.com/myronmarston/vcr
488
490
  licenses: []
489
491
 
@@ -517,7 +519,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
517
519
  requirements: []
518
520
 
519
521
  rubyforge_project:
520
- rubygems_version: 1.8.2
522
+ rubygems_version: 1.6.0
521
523
  signing_key:
522
524
  specification_version: 3
523
525
  summary: Record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate tests.