vcr 1.1.2 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. data/.gitignore +1 -1
  2. data/.gitmodules +3 -0
  3. data/CHANGELOG.md +58 -1
  4. data/Gemfile +2 -4
  5. data/Gemfile.lock +26 -49
  6. data/README.md +92 -23
  7. data/Rakefile +6 -3
  8. data/features/fixtures/vcr_cassettes/1.9.1/record_all.yml +62 -0
  9. data/features/fixtures/vcr_cassettes/not_1.9.1/record_all.yml +61 -0
  10. data/features/http_client.feature +2 -2
  11. data/features/net_http.feature +15 -4
  12. data/features/record_response.feature +36 -7
  13. data/features/replay_recorded_response.feature +8 -8
  14. data/features/rspec.feature +100 -0
  15. data/features/step_definitions/net_http_steps.rb +13 -1
  16. data/features/step_definitions/vcr_steps.rb +26 -16
  17. data/features/support/env.rb +13 -5
  18. data/features/webmock.feature +4 -4
  19. data/lib/vcr.rb +5 -5
  20. data/lib/vcr/cassette.rb +55 -19
  21. data/lib/vcr/extensions/net_http.rb +2 -4
  22. data/lib/vcr/http_stubbing_adapters/fakeweb.rb +0 -4
  23. data/lib/vcr/http_stubbing_adapters/webmock.rb +2 -9
  24. data/lib/vcr/internet_connection.rb +13 -0
  25. data/lib/vcr/ping.rb +26 -0
  26. data/lib/vcr/rspec.rb +39 -0
  27. data/lib/vcr/version.rb +1 -1
  28. data/spec/cassette_spec.rb +160 -69
  29. data/spec/config_spec.rb +1 -1
  30. data/spec/cucumber_tags_spec.rb +3 -2
  31. data/spec/deprecations_spec.rb +1 -1
  32. data/spec/extensions/net_http_response_spec.rb +2 -4
  33. data/spec/extensions/net_http_spec.rb +3 -1
  34. data/spec/fixtures/1.9.1/cassette_spec/with_localhost_requests.yml +23 -0
  35. data/spec/fixtures/not_1.9.1/cassette_spec/with_localhost_requests.yml +23 -0
  36. data/spec/http_stubbing_adapters/fakeweb_spec.rb +3 -9
  37. data/spec/http_stubbing_adapters/webmock_spec.rb +7 -18
  38. data/spec/internet_connection_spec.rb +19 -0
  39. data/spec/monkey_patches.rb +45 -6
  40. data/spec/request_matcher_spec.rb +1 -1
  41. data/spec/rspec_spec.rb +46 -0
  42. data/spec/spec_helper.rb +6 -11
  43. data/spec/structs_spec.rb +1 -1
  44. data/spec/support/fixnum_extension.rb +10 -0
  45. data/spec/support/http_library_adapters.rb +31 -2
  46. data/spec/support/ruby_interpreter.rb +7 -0
  47. data/spec/support/vcr_localhost_server.rb +86 -44
  48. data/spec/support/webmock_macros.rb +14 -0
  49. data/spec/vcr_spec.rb +1 -1
  50. data/spec/version_spec.rb +1 -1
  51. data/vcr.gemspec +10 -6
  52. metadata +155 -39
data/.gitignore CHANGED
@@ -24,4 +24,4 @@ pkg
24
24
  features/fixtures/vcr_cassettes/**/temp/
25
25
  *.rbc
26
26
  .bundle
27
-
27
+ tmp
data/.gitmodules ADDED
@@ -0,0 +1,3 @@
1
+ [submodule "vendor/rspec-1"]
2
+ path = vendor/rspec-1
3
+ url = git://github.com/myronmarston/rspec-1.git
data/CHANGELOG.md CHANGED
@@ -1,7 +1,28 @@
1
- #Changelog
1
+ # Changelog
2
+
3
+ ## 1.2.0 (October 13, 2010)
4
+
5
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v1.1.2...v1.2.0)
6
+
7
+ * Improved the `:all` record mode so that it keeps previously recorded interactions that do not match the
8
+ new recorded interactions. Previously, all of the previously recorded interactions were deleted.
9
+ * Added `:re_record_interval` cassette option. This option causes a cassette to be re-recorded when the
10
+ existing file is older than the specified interval.
11
+ * Improved RSpec support. Added #use_vcr_cassette RSpec macro method that sets up a cassette for an RSpec
12
+ example group.
13
+ * Fixed VCR/Net::HTTP/WebMock integration so that VCR no longer loads its Net::HTTP monkey patch when
14
+ WebMock is used, and relies upon WebMock's after_request callback to record Net::HTTP instead. This
15
+ fixes [a bug](http://github.com/myronmarston/vcr/issues/14) when using WebMock and Open URI.
16
+ * Consider 0.0.0.0 to be a localhost alias (previously only "localhost" and 127.0.0.1 were considered).
17
+ * Added spec and feature coverage for Curb integration. Works out of the box with no changes required
18
+ to VCR due to [Pete Higgins'](http://github.com/phiggins) great work to add Curb support to WebMock.
19
+ * Got specs and features to pass on rubinius.
20
+ * Changed WebMock version requirement to 1.4.0.
2
21
 
3
22
  ## 1.1.2 (September 9, 2010)
4
23
 
24
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v1.1.1...v1.1.2)
25
+
5
26
  * Fixed a minor bug with the WebMock integration: WebMock extends each `Net::HTTPResponse` with an extension
6
27
  module after reading the body, and VCR was doing the same thing, leading to some slight deviance from
7
28
  standard Net::HTTP behavior. The fix prevents VCR from adding the same extension to a `Net::HTTPResponse`
@@ -14,6 +35,8 @@
14
35
 
15
36
  ## 1.1.1 (August 26, 2010)
16
37
 
38
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v1.1.0...v1.1.1)
39
+
17
40
  * Updated to use and require FakeWeb 1.3.0. It includes a fix for a bug related to multiple values for the
18
41
  same response header.
19
42
  * Use new `FakeWeb::Utility.request_uri_as_string` method rather than our own logic to construct a request uri.
@@ -27,6 +50,8 @@
27
50
 
28
51
  ## 1.1.0 (August 22, 2010)
29
52
 
53
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v1.0.3...v1.1.0)
54
+
30
55
  * Added `:match_requests_on` cassette option, which determines how VCR matches requests.
31
56
  * Removed VCR::TaskRunner and the corresponding rake task definition. The rake task migrated cassettes from the
32
57
  0.3.1 format to the 0.4+ format. If you are still on 0.3.1 or earlier, I recommend you upgrade to 0.4.1 first,
@@ -40,6 +65,8 @@
40
65
 
41
66
  ## 1.0.3 (August 5, 2010)
42
67
 
68
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v1.0.2...v1.0.3)
69
+
43
70
  * Upgraded VCR specs to RSpec 2.
44
71
  * Updated `VCR::CucumberTags` so that it uses an `around` hook rather than a `before` hook and an `after` hook.
45
72
  Around hooks were added to Cucumber in the 0.7.3 release, so you'll have to be on that version or higher to use
@@ -50,6 +77,8 @@
50
77
 
51
78
  ## 1.0.2 (July 6, 2010)
52
79
 
80
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v1.0.1...v1.0.2)
81
+
53
82
  * Fixed VCR to work with [rest-client](http://github.com/archiloque/rest-client). Rest-client extends the Net::HTTP
54
83
  response body string with a module containing additional data, which got serialized to the cassette file YAML
55
84
  and occasionally caused problems when the YAML was deserialized. Bug reported by
@@ -58,6 +87,8 @@
58
87
 
59
88
  ## 1.0.1 (July 1, 2010)
60
89
 
90
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v1.0.0...v1.0.1)
91
+
61
92
  * Fixed specs and features so they pass on MRI 1.9.2-preview3 and JRuby 1.5.1.
62
93
  * Normalized response and request headers so that they are stored the same (i.e. lower case keys, arrays of values)
63
94
  in the cassette yaml files, regardless of which HTTP library is used. This is the same way Net::HTTP normalizes
@@ -68,6 +99,8 @@
68
99
 
69
100
  ## 1.0.0 (June 22, 2010)
70
101
 
102
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v0.4.1...v1.0.0)
103
+
71
104
  * New Features
72
105
  * Added support for [HTTPClient](http://github.com/nahi/httpclient), [Patron](http://github.com/toland/patron) and
73
106
  [em-http-request](http://github.com/igrigorik/em-http-request) when WebMock is used. Any future http libraries
@@ -101,11 +134,17 @@
101
134
  * Removed some extensions that are no longer necessary.
102
135
 
103
136
  ## 0.4.1 May 11, 2010
137
+
138
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v0.4.0...v0.4.1)
139
+
104
140
  * Fixed a bug: when `Net::HTTPResponse#read_body` was called after VCR had read the body to record a new request,
105
141
  it raised an error (`IOError: Net::HTTPResponse#read_body called twice`). My fix extends Net::HTTPResponse
106
142
  so that it no longer raises this error.
107
143
 
108
144
  ## 0.4.0 April 28, 2010
145
+
146
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v0.3.1...v0.4.0)
147
+
109
148
  * Added support for webmock. All the fakeweb-specific code is now in an adapter (as is the webmock code).
110
149
 
111
150
  * Changed the format of the VCR cassettes. The old format was tied directly to Net::HTTP, but webmock supports
@@ -131,9 +170,15 @@
131
170
  * Lots of other refactoring.
132
171
 
133
172
  ## 0.3.1 April 10, 2010
173
+
174
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v0.3.0...v0.3.1)
175
+
134
176
  * Fixed a bug: when `Net::HTTP#request` was called with a block that had a return statement, the response was not being recorded.
135
177
 
136
178
  ## 0.3.0 March 24, 2010
179
+
180
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v0.2.0...v0.3.0)
181
+
137
182
  * Renamed a bunch of methods, replacing them with method names that more clearly fit the VCR/cassette metaphor:
138
183
  * `VCR.create_cassette!` => `VCR.insert_cassette`
139
184
  * `VCR.destroy_cassette!` => `VCR.eject_cassette`
@@ -146,12 +191,18 @@
146
191
  * All the old methods still work, but you'll get deprecation warnings.
147
192
 
148
193
  ## 0.2.0 March 9, 2010
194
+
195
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v0.1.2...v0.2.0)
196
+
149
197
  * Added `:allow_real_http` cassette option, which allows VCR to work with capybara and a javascript driver.
150
198
  Bug reported by [Ben Hutton](http://github.com/benhutton).
151
199
 
152
200
  * Deprecated the `default_cassette_record_mode` option. Use `default_cassette_options[:record_mode]` instead.
153
201
 
154
202
  ## 0.1.2 March 4, 2010
203
+
204
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v0.1.1...v0.1.2)
205
+
155
206
  * Added explanatory note about VCR to `FakeWeb::NetConnectNotAllowedError#message`.
156
207
 
157
208
  * Got things to work for when a cassette records multiple requests made to the same URL with the same HTTP verb,
@@ -161,7 +212,13 @@
161
212
  Internally, `Net::HTTP#request` recursively calls itself (passing slightly different arguments) in certain circumstances.
162
213
 
163
214
  ## 0.1.1 February 25, 2010
215
+
216
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v0.1.0...v0.1.1)
217
+
164
218
  * Handle asynchronous HTTP requests (such as for mechanize). Bug reported by [Thibaud Guillaume-Gentil](http://github.com/thibaudgg).
165
219
 
166
220
  ## 0.1.0 February 25, 2010
221
+
222
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/d2577f79247d7db60bf160881b1b64e9fa10e4fd...v0.1.0)
223
+
167
224
  * Initial release. Basic recording and replaying of responses works.
data/Gemfile CHANGED
@@ -2,19 +2,17 @@ source :rubygems
2
2
  gemspec
3
3
 
4
4
  group :development do
5
- # Our specs rely on something in rspec-core master that hasn't been released yet.
6
- gem 'rspec-core', :git => 'git://github.com/rspec/rspec-core.git'
7
-
8
5
  # patron and em-http-request can't install on JRuby, so we have to limit their platform here.
9
6
  platforms :ruby do
10
7
  gem 'patron', '~> 0.4.6'
11
8
  gem 'em-http-request', '~> 0.2.7'
9
+ gem 'curb', '~> 0.7.8'
12
10
  end
13
11
  end
14
12
 
15
13
  # Additional gems that are useful, but not required for development.
16
14
  group :extras do
17
- platforms :mri, :jruby do
15
+ platforms :mri do
18
16
  gem 'rcov'
19
17
  end
20
18
 
data/Gemfile.lock CHANGED
@@ -1,27 +1,15 @@
1
- GIT
2
- remote: git://github.com/rspec/rspec-core.git
3
- revision: 6258abe
4
- specs:
5
- rspec-core (2.0.0.beta.20)
6
-
7
1
  PATH
8
2
  remote: .
9
3
  specs:
10
- vcr (1.1.2)
4
+ vcr (1.2.0)
11
5
 
12
6
  GEM
13
7
  remote: http://rubygems.org/
14
8
  specs:
15
- addressable (2.2.0)
9
+ addressable (2.2.2)
16
10
  archive-tar-minitar (0.5.2)
11
+ aruba (0.2.1)
17
12
  builder (2.1.2)
18
- capybara (0.3.9)
19
- culerity (>= 0.2.4)
20
- mime-types (>= 1.16)
21
- nokogiri (>= 1.3.3)
22
- rack (>= 1.0.0)
23
- rack-test (>= 0.5.4)
24
- selenium-webdriver (>= 0.0.3)
25
13
  columnize (0.3.1)
26
14
  crack (0.1.8)
27
15
  cucumber (0.8.5)
@@ -30,16 +18,13 @@ GEM
30
18
  gherkin (~> 2.1.4)
31
19
  json_pure (~> 1.4.3)
32
20
  term-ansicolor (~> 1.0.4)
33
- culerity (0.2.12)
21
+ curb (0.7.8)
34
22
  diff-lcs (1.1.2)
35
- em-http-request (0.2.11)
23
+ em-http-request (0.2.12)
36
24
  addressable (>= 2.0.0)
37
25
  eventmachine (>= 0.12.9)
38
26
  eventmachine (0.12.10)
39
27
  fakeweb (1.3.0)
40
- ffi (0.6.3)
41
- rake (>= 0.8.7)
42
- ffi (0.6.3-java)
43
28
  gherkin (2.1.5)
44
29
  trollop (~> 1.16.2)
45
30
  gherkin (2.1.5-java)
@@ -49,24 +34,20 @@ GEM
49
34
  linecache (0.43)
50
35
  linecache19 (0.5.11)
51
36
  ruby_core_source (>= 0.1.4)
52
- mime-types (1.16)
53
- nokogiri (1.4.3.1)
54
- nokogiri (1.4.3.1-java)
55
- weakling (>= 0.0.3)
56
- patron (0.4.6)
57
- rack (1.2.0)
58
- rack-test (0.5.4)
59
- rack (>= 1.0)
37
+ patron (0.4.9)
38
+ rack (1.1.0)
60
39
  rake (0.8.7)
61
- rcov (0.9.8)
62
- rcov (0.9.8-java)
63
- rspec (2.0.0.beta.20)
64
- rspec-core (= 2.0.0.beta.20)
65
- rspec-expectations (= 2.0.0.beta.20)
66
- rspec-mocks (= 2.0.0.beta.20)
67
- rspec-expectations (2.0.0.beta.20)
40
+ rcov (0.9.9)
41
+ rspec (2.0.0)
42
+ rspec-core (= 2.0.0)
43
+ rspec-expectations (= 2.0.0)
44
+ rspec-mocks (= 2.0.0)
45
+ rspec-core (2.0.0)
46
+ rspec-expectations (2.0.0)
68
47
  diff-lcs (>= 1.1.2)
69
- rspec-mocks (2.0.0.beta.20)
48
+ rspec-mocks (2.0.0)
49
+ rspec-core (= 2.0.0)
50
+ rspec-expectations (= 2.0.0)
70
51
  ruby-debug (0.10.3)
71
52
  columnize (>= 0.1)
72
53
  ruby-debug-base (~> 0.10.3.0)
@@ -82,16 +63,11 @@ GEM
82
63
  ruby-debug-base19 (>= 0.11.19)
83
64
  ruby_core_source (0.1.4)
84
65
  archive-tar-minitar (>= 0.5.2)
85
- rubyzip (0.9.4)
86
- selenium-webdriver (0.0.28)
87
- ffi (>= 0.6.1)
88
- json_pure
89
- rubyzip
90
66
  term-ansicolor (1.0.5)
67
+ timecop (0.3.5)
91
68
  trollop (1.16.2)
92
- weakling (0.0.4-java)
93
- webmock (1.3.5)
94
- addressable (>= 2.1.1)
69
+ webmock (1.4.0)
70
+ addressable (>= 2.2.2)
95
71
  crack (>= 0.1.7)
96
72
 
97
73
  PLATFORMS
@@ -99,20 +75,21 @@ PLATFORMS
99
75
  ruby
100
76
 
101
77
  DEPENDENCIES
78
+ aruba (~> 0.2.1)
102
79
  bundler (~> 1.0.0)
103
- capybara (~> 0.3.9)
104
80
  cucumber (~> 0.8.5)
81
+ curb (~> 0.7.8)
105
82
  em-http-request (~> 0.2.7)
106
83
  fakeweb (~> 1.3.0)
107
84
  httpclient (~> 2.1.5.2)
108
85
  patron (~> 0.4.6)
109
- rack (= 1.2.0)
86
+ rack (= 1.1.0)
110
87
  rake (~> 0.8.7)
111
88
  rcov
112
- rspec (~> 2.0.0.beta.20)
113
- rspec-core!
89
+ rspec (~> 2.0.0)
114
90
  ruby-debug
115
91
  ruby-debug-base19 (= 0.11.23)
116
92
  ruby-debug19
93
+ timecop (~> 0.3.5)
117
94
  vcr!
118
- webmock (~> 1.3.5)
95
+ webmock (~> 1.4.0)
data/README.md CHANGED
@@ -43,19 +43,24 @@ maintenance) and accurate (the response from example.com will contain the same h
43
43
  * Automatically records and replays your HTTP interactions with minimal setup/configuration code.
44
44
  * Supports multiple HTTP stubbing libraries. Currently FakeWeb and WebMock are supported, and the adapter interface
45
45
  is easy to implement for any future libraries.
46
- * Supports multiple HTTP libraries: [Net::HTTP](http://www.ruby-doc.org/stdlib/libdoc/net/http/rdoc/index.html)
47
- (all HTTP stubbing libraries), [Patron](http://github.com/toland/patron) (WebMock only),
48
- [HTTPClient](http://github.com/nahi/httpclient) (WebMock only) and
49
- [em-http-request](http://github.com/igrigorik/em-http-request) (WebMock only).
46
+ * Supports multiple HTTP libraries:
47
+ * [Patron](http://github.com/toland/patron) (WebMock)
48
+ * [Curb](http://github.com/taf2/curb) (WebMock)
49
+ * [HTTPClient](http://github.com/nahi/httpclient) (WebMock)
50
+ * [em-http-request](http://github.com/igrigorik/em-http-request) (WebMock)
51
+ * [Net::HTTP](http://www.ruby-doc.org/stdlib/libdoc/net/http/rdoc/index.html) (FakeWeb and WebMock)
52
+ * And of course any library built on Net::HTTP, such as [Mechanize](http://github.com/tenderlove/mechanize),
53
+ [HTTParty](http://github.com/jnunemaker/httparty) or [Rest Client](http://github.com/archiloque/rest-client).
50
54
  * Request matching is configurable based on HTTP method, URI, host, path, body and headers.
51
55
  * The same request can receive different responses in different tests--just use different cassettes.
52
56
  * The recorded requests and responses are stored on disk as YAML and can easily be inspected and edited.
53
57
  * Dynamic responses are supported using ERB.
58
+ * Automatically re-records cassettes on a configurable regular interval to keep them fresh and current.
54
59
  * Disables all HTTP requests that you don't explicitly allow.
55
60
  * Simple cucumber integration is provided using tags.
56
- * Known to work well with many popular ruby libraries including RSpec, Cucumber, Test::Unit, Capybara, Mechanize and
57
- Rest-Client.
58
- * Extensively tested on 6 different ruby interpretters.
61
+ * Known to work well with many popular ruby libraries including RSpec 1 & 2, Cucumber, Test::Unit,
62
+ Capybara, Mechanize and Rest-Client.
63
+ * Extensively tested on 7 different ruby interpretters.
59
64
 
60
65
  ## Development
61
66
 
@@ -74,11 +79,15 @@ a cassette that contains previously recorded HTTP interactions, it registers the
74
79
  library of your choice (fakeweb or webmock) so that HTTP requests get the recorded response. Between test
75
80
  runs, cassettes are stored on disk as YAML files in your configured cassette library directory.
76
81
 
77
- Each cassette can be configured with a couple options:
82
+ Each cassette acts a bit like a sandbox: it has an effect on HTTP requests during the current test while it
83
+ is inserted, but has no effect on the rest of your test suite.
84
+
85
+ Cassettes can be configured with a few options:
78
86
 
79
87
  * `:record`: Specifies a record mode for this cassette.
80
88
  * `:erb`: Used for dynamic cassettes (see below for more details).
81
89
  * `:match_requests_on`: An array of request attributes to match on (see below for more details).
90
+ * `:re_record_interval`: Controls automatic re-recording of the cassette (see below for more details).
82
91
 
83
92
  ## Record modes
84
93
 
@@ -86,8 +95,18 @@ VCR supports 3 record modes. You can set a default record mode in your configur
86
95
  and a per-cassette record mode when inserting a cassette. The record modes are:
87
96
 
88
97
  * `:new_episodes`: Previously recorded HTTP interactions will be replayed. New HTTP interactions will be recorded.
98
+ This is generally the most useful mode. VCR will automatically record and replay new HTTP requests as your
99
+ codebase evolves to make new requests.
89
100
  * `:all`: Previously recorded HTTP interactions will be ignored. All HTTP interactions will be recorded.
101
+ This is useful if you're interested in using VCR to log your HTTP interactions but don't care to ever replay
102
+ them. Alternately, you can temporarily change your record mode to `:all` to force it to re-record all requests.
90
103
  * `:none`: Previously recorded HTTP interactions will be replayed. New HTTP interactions will result in an error.
104
+ This mode is useful when your code makes potentially dangerous HTTP requests (i.e. it hits a production
105
+ server rather than a sandbox/staging server), as it will prevent any new requests from completing, raising
106
+ an error instead. Generally, you will temporarily use the `:new_episodes` or `:all` record modes
107
+ to perform the initial recording before changing it to `:none`.
108
+
109
+ When no cassette is inserted, all HTTP requests will result in a `Real HTTP connections are disabled` error.
91
110
 
92
111
  ## Request Matching
93
112
 
@@ -139,9 +158,7 @@ configuration options:
139
158
  `RAILS_ROOT/test/fixtures`. Rails will assume your cassette YAML files are ActiveRecord fixtures and raise an
140
159
  error when the content doesn't conform to its expectations.
141
160
  * `http_stubbing_library`: Which http stubbing library to use. Currently `:fakeweb` and `:webmock` are supported.
142
- This is currently optional--VCR will try to guess based on the presence or absence of the `FakeWeb` or `WebMock`
143
- constants, but this is mostly done to assist users upgrading from VCR 0.3.1, which only worked with fakeweb and
144
- didn't have this option. I recommend you explicitly configure this.
161
+ VCR will automatically configure FakeWeb/WebMock for you; you do not need to reference either one at all.
145
162
  * `ignore_localhost`: Defaults to false. Setting it true does the following:
146
163
  * Localhost requests will proceed as normal. The "Real HTTP connections are disabled" error will not occur.
147
164
  * Localhost requests will not be recorded.
@@ -157,32 +174,66 @@ VCR can easily be used with any ruby test or spec framework. Usually, you'll wa
157
174
  # do something that makes an HTTP request
158
175
  end
159
176
 
160
- Alternately, you can insert and eject a cassette with individual method calls from setup/before and teardown/after:
177
+ Alternately, with a framework like [shoulda](http://github.com/thoughtbot/shoulda), you can insert and eject a
178
+ cassette with individual method calls from setup and teardown:
161
179
 
162
- describe "Some object that makes an HTTP request" do
163
- before(:each) do
180
+ context "Some object that makes an HTTP request" do
181
+ setup do
164
182
  VCR.insert_cassette('geocoding/Seattle, WA', :record => :new_episodes)
165
183
  end
166
184
 
167
- it "does something that makes an HTTP request"
185
+ should "make an HTTP request" do
186
+ # ...
187
+ end
168
188
 
169
- it "does something else that makes an HTTP request"
189
+ should "make another HTTP request" do
190
+ # ...
191
+ end
170
192
 
171
- after(:each) do
193
+ teardown do
172
194
  VCR.eject_cassette
173
195
  end
174
196
  end
175
197
 
176
- If you're using RSpec 2, you can use the new `around` hook:
198
+ ## Usage with RSpec
199
+
200
+ If you're using RSpec, you can use a special macro provided by VCR:
201
+
202
+ describe MyApiClient do
203
+ context "create" do
204
+ # Pass use_vcr_cassette the same args you would pass VCR.use_cassette.
205
+ use_vcr_cassette "my_api_client/create", :record => :new_episodes
177
206
 
178
- describe "Some object that makes an HTTP request" do
179
- around(:each) do |example|
180
- VCR.use_cassette('geocoding/Seattle, WA', :record => :new_episodes, &example)
207
+ it "makes an HTTP request"
208
+ it "makes another HTTP request"
181
209
  end
182
210
 
183
- it "does something that makes an HTTP request"
211
+ context "destroy" do
212
+ # You can leave off the cassette name and it will be inferred from the example group
213
+ # descriptions--in this case "MyApiClient/destroy".
214
+ # You can also leave off the options hash--the configured default options will be used.
215
+ use_vcr_cassette :record => :new_episodes, :match_requests_on => [:uri, :method, :body]
216
+
217
+ it "makes an HTTP request"
218
+ it "makes another HTTP request"
219
+ end
220
+ end
221
+
222
+ To use this, you need to configure RSpec to make the `use_vcr_cassette` available as a macro.
223
+ Here's how to do that for RSpec 1:
224
+
225
+ require 'vcr'
226
+
227
+ Spec::Runner.configure do |c|
228
+ c.extend VCR::RSpec::Macros
229
+ end
230
+
231
+ Or for RSpec 2:
232
+
233
+ require 'vcr'
184
234
 
185
- it "does something else that makes an HTTP request"
235
+ RSpec.configure do |c|
236
+ c.extend VCR::RSpec::Macros
186
237
  end
187
238
 
188
239
  ## Usage with Cucumber
@@ -274,6 +325,21 @@ In your cassette:
274
325
  ...
275
326
  body: Hello, <%= user.name %>!
276
327
 
328
+ ## Automatic cassette re-recording
329
+
330
+ Over time, your cassettes may get out-of-date. APIs change and sites you scrape get updated. VCR provides
331
+ a facility to automatically re-record your cassettes. You enable re-recording using the
332
+ `:re_record_interval` option:
333
+
334
+ A_WEEK = 7 * 24 * 60 * 60 # or use 7.days if you're using ActiveSupport
335
+
336
+ VCR.use_cassette('my_cassette', :re_record_interval => A_WEEK) { ... }
337
+
338
+ If the cassette file was last modified more than 7 days ago, VCR will use the `:all` record mode (regardless
339
+ of the configured record mode) to allow new HTTP requests and record them. VCR will check to make sure you
340
+ have an internet connection before doing this, so if you are running the tests without one, the automatic
341
+ re-recording will not kick in.
342
+
277
343
  ## FakeWeb or WebMock?
278
344
 
279
345
  VCR works fine with either FakeWeb or WebMock. Overall, WebMock has more features, and you'll need to use
@@ -333,6 +399,7 @@ VCR has been tested on the following ruby interpreters:
333
399
  * MRI 1.9.2-p0
334
400
  * REE 1.8.7-2010.02
335
401
  * JRuby 1.5.1
402
+ * Rubinius 1.1
336
403
 
337
404
  ## Notes, etc.
338
405
 
@@ -373,6 +440,8 @@ how VCR could be improved. You may also want to try one of these similar librar
373
440
  * [Stale Fish](http://github.com/jsmestad/stale_fish)
374
441
  * [NetRecorder](http://github.com/chrisyoung/netrecorder)
375
442
  * [Ephemeral Response](http://github.com/sandro/ephemeral_response)
443
+ * [Net::HTTP Spy](http://github.com/martinbtt/net-http-spy)
444
+ * [WebFixtures](http://github.com/trydionel/web_fixtures)
376
445
 
377
446
  ## Copyright
378
447