vcr 0.4.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. data/CHANGELOG.md +34 -0
  2. data/README.md +89 -21
  3. data/lib/vcr.rb +12 -1
  4. data/lib/vcr/cassette.rb +50 -27
  5. data/lib/vcr/config.rb +9 -0
  6. data/lib/vcr/deprecations.rb +15 -42
  7. data/lib/vcr/extensions/net_http.rb +13 -20
  8. data/lib/vcr/extensions/net_http_response.rb +6 -13
  9. data/lib/vcr/http_stubbing_adapters/fakeweb.rb +21 -3
  10. data/lib/vcr/http_stubbing_adapters/webmock.rb +34 -4
  11. data/lib/vcr/version.rb +16 -0
  12. metadata +90 -108
  13. data/.document +0 -5
  14. data/.gitignore +0 -22
  15. data/Rakefile +0 -67
  16. data/VERSION +0 -1
  17. data/benchmarks/http_stubbing_libraries.rb +0 -59
  18. data/features/fixtures/vcr_cassettes/1.8.6/cucumber_tags/replay_cassette1.yml +0 -43
  19. data/features/fixtures/vcr_cassettes/1.8.6/cucumber_tags/replay_cassette2.yml +0 -47
  20. data/features/fixtures/vcr_cassettes/1.8.6/cucumber_tags/replay_cassette3.yml +0 -85
  21. data/features/fixtures/vcr_cassettes/1.8.6/nested_replay_cassette.yml +0 -24
  22. data/features/fixtures/vcr_cassettes/1.8.6/not_the_real_response.yml +0 -43
  23. data/features/fixtures/vcr_cassettes/1.8.7/cucumber_tags/replay_cassette1.yml +0 -43
  24. data/features/fixtures/vcr_cassettes/1.8.7/cucumber_tags/replay_cassette2.yml +0 -47
  25. data/features/fixtures/vcr_cassettes/1.8.7/cucumber_tags/replay_cassette3.yml +0 -85
  26. data/features/fixtures/vcr_cassettes/1.8.7/nested_replay_cassette.yml +0 -24
  27. data/features/fixtures/vcr_cassettes/1.8.7/not_the_real_response.yml +0 -43
  28. data/features/fixtures/vcr_cassettes/1.9.1/cucumber_tags/replay_cassette1.yml +0 -43
  29. data/features/fixtures/vcr_cassettes/1.9.1/cucumber_tags/replay_cassette2.yml +0 -63
  30. data/features/fixtures/vcr_cassettes/1.9.1/cucumber_tags/replay_cassette3.yml +0 -85
  31. data/features/fixtures/vcr_cassettes/1.9.1/nested_replay_cassette.yml +0 -32
  32. data/features/fixtures/vcr_cassettes/1.9.1/not_the_real_response.yml +0 -43
  33. data/features/record_response.feature +0 -77
  34. data/features/replay_recorded_response.feature +0 -69
  35. data/features/step_definitions/vcr_steps.rb +0 -144
  36. data/features/support/env.rb +0 -64
  37. data/lib/vcr/extensions/fake_web.rb +0 -20
  38. data/lib/vcr/extensions/net_read_adapter.rb +0 -22
  39. data/spec/cassette_spec.rb +0 -213
  40. data/spec/config_spec.rb +0 -49
  41. data/spec/cucumber_tags_spec.rb +0 -71
  42. data/spec/deprecations_spec.rb +0 -67
  43. data/spec/extensions/net_http_response_spec.rb +0 -86
  44. data/spec/extensions/net_http_spec.rb +0 -72
  45. data/spec/extensions/net_read_adapter_spec.rb +0 -10
  46. data/spec/fixtures/1.8.6/0_3_1_cassette.yml +0 -29
  47. data/spec/fixtures/1.8.6/cassette_spec/example.yml +0 -110
  48. data/spec/fixtures/1.8.6/example_net_http.yml +0 -14
  49. data/spec/fixtures/1.8.6/example_net_http_request.yml +0 -12
  50. data/spec/fixtures/1.8.6/example_net_http_response.yml +0 -25
  51. data/spec/fixtures/1.8.6/fake_example.com_responses.yml +0 -90
  52. data/spec/fixtures/1.8.7/0_3_1_cassette.yml +0 -29
  53. data/spec/fixtures/1.8.7/cassette_spec/example.yml +0 -110
  54. data/spec/fixtures/1.8.7/example_net_http.yml +0 -14
  55. data/spec/fixtures/1.8.7/example_net_http_request.yml +0 -12
  56. data/spec/fixtures/1.8.7/example_net_http_response.yml +0 -25
  57. data/spec/fixtures/1.8.7/fake_example.com_responses.yml +0 -90
  58. data/spec/fixtures/1.9.1/0_3_1_cassette.yml +0 -29
  59. data/spec/fixtures/1.9.1/cassette_spec/example.yml +0 -110
  60. data/spec/fixtures/1.9.1/example_net_http.yml +0 -14
  61. data/spec/fixtures/1.9.1/example_net_http_request.yml +0 -12
  62. data/spec/fixtures/1.9.1/example_net_http_response.yml +0 -25
  63. data/spec/fixtures/1.9.1/fake_example.com_responses.yml +0 -90
  64. data/spec/http_stubbing_adapters/fakeweb_spec.rb +0 -24
  65. data/spec/http_stubbing_adapters/webmock_spec.rb +0 -23
  66. data/spec/spec.opts +0 -2
  67. data/spec/spec_helper.rb +0 -35
  68. data/spec/structs_spec.rb +0 -95
  69. data/spec/support/deprecated.rb +0 -18
  70. data/spec/support/disable_warnings.rb +0 -12
  71. data/spec/support/http_stubbing_adapter.rb +0 -113
  72. data/spec/support/temp_cassette_library_dir.rb +0 -16
  73. data/spec/task_runner_spec.rb +0 -59
  74. data/spec/vcr_spec.rb +0 -119
  75. data/vcr.gemspec +0 -147
@@ -1,5 +1,39 @@
1
1
  #Changelog
2
2
 
3
+ ## 1.0.0 (June 22, 2010)
4
+
5
+ * New Features
6
+ * Added support for [HTTPClient](http://github.com/nahi/httpclient), [Patron](http://github.com/toland/patron) and
7
+ [em-http-request](http://github.com/igrigorik/em-http-request) when WebMock is used. Any future http libraries
8
+ WebMock supports should (theoretically, at least) work without any VCR code changes. Thanks to
9
+ [Bartosz Blimke](http://github.com/bblimke) for adding the necessary code to WebMock to make this happen!
10
+ * Added support for dynamic responses using ERB. A cassette will be evaluated as ERB before the YAML
11
+ is deserialized if you pass it an `:erb => true` option. You can pass variables using
12
+ `:erb => { :var1 => 'some value', :var2 => 'another value' }`.
13
+ * Added `ignore_localhost` configuration setting, which defaults to false. Setting it true does the following:
14
+ * Localhost requests will proceed as normal. The "Real HTTP connections are disabled" error will not occur.
15
+ * Localhost requests will not be recorded.
16
+ * Previously recorded localhost requests will not be replayed.
17
+ * Exposed the version number:
18
+ * `VCR.version` => string (in the format "major.minor.patch")
19
+ * `VCR.version.parts` => array of integers
20
+ * `VCR.version.major` => integer
21
+ * `VCR.version.minor` => integer
22
+ * `VCR.version.patch` => integer
23
+ * Added test coverage and documentation of using a regex for non-deterministic URLs (i.e. URLs that include
24
+ a timestamp as a query parameter). It turns out this feature worked before, and I just didn't realize it :).
25
+
26
+ * Breaking Changes
27
+ * The `:allow_real_http => lambda { |uri| ... }` cassette option has been removed. There was no way to get
28
+ this to work with the newly supported http libraries without extensive monkeypatching, and it was mostly
29
+ useful for localhost requests, which is more easily handled by the new `ignore_localhost` config setting.
30
+ * Removed methods and options that had been previously deprecated. If you're upgrading from an old version,
31
+ I recommend upgrading to 0.4.1 first, deal with all the deprecation warnings, then upgrade to 1.0.0.
32
+
33
+ * Misc Changes:
34
+ * Removed dependency on [jeweler](http://github.com/technicalpickles/jeweler). Manage the gemspec by hand instead.
35
+ * Removed some extensions that are no longer necessary.
36
+
3
37
  ## 0.4.1 May 11, 2010
4
38
  * Fixed a bug: when `Net::HTTPResponse#read_body` was called after VCR had read the body to record a new request,
5
39
  it raised an error (`IOError: Net::HTTPResponse#read_body called twice`). My fix extends Net::HTTPResponse
data/README.md CHANGED
@@ -38,10 +38,25 @@ will replay the response from example.com when the http request is made. This t
38
38
  made anymore), deterministic (the test will continue to pass, even if you are offline, or example.com goes down for
39
39
  maintenance) and accurate (the response from example.com will contain the same headers and body you get from a real request).
40
40
 
41
+ ## Features
42
+
43
+ * Automatically records and replays your HTTP interactions with minimal setup/configuration code.
44
+ * Supports multiple HTTP stubbing libraries. Currently FakeWeb and WebMock are supported, and the adapter interface
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).
50
+ * The same request can receive different responses in different tests--just use different cassettes.
51
+ * The recorded requests and responses are stored on disk as YAML and can easily be inspected and edited.
52
+ * Dynamic responses are supported using ERB.
53
+ * Disables all HTTP requests that you don't explicitly allow.
54
+ * Simple cucumber integration is provided using tags.
55
+
41
56
  ## Cassettes
42
57
 
43
- Cassettes are the medium to which VCR records HTTP interactions, and the medium from which it replays them.
44
- While a cassette is in use, new HTTP requests (or "new episodes", as VCR calls them) either get
58
+ Cassettes are the medium to which VCR records HTTP interactions, and the medium from which it replays them.
59
+ While a cassette is in use, new HTTP requests (or "new episodes", as VCR calls them) either get
45
60
  recorded, or an error will be raised, depending on the cassette's `:record` mode (see below). When you use
46
61
  a cassette that contains previously recorded HTTP interactions, it registers them with the http stubbing
47
62
  library of your choice (fakeweb or webmock) so that HTTP requests get the recorded response. Between test
@@ -50,19 +65,7 @@ runs, cassettes are stored on disk as YAML files in your configured cassette lib
50
65
  Each cassette can be configured with a couple options:
51
66
 
52
67
  * `:record`: Specifies a record mode for this cassette.
53
- * `:allow_real_http`: You can use this to force VCR to always allow a real HTTP request for particular URIs.
54
-
55
- For example, to prevent the VCR cassette from recording and replaying requests to google.com, you could use:
56
-
57
- lambda { |uri| uri.host == 'google.com' }
58
-
59
- All non-google requests would be recorded/replayed as normal. You can also set this to `:localhost`,
60
- which is syntactic sugar for:
61
-
62
- lambda { |uri| uri.host == 'localhost' }
63
-
64
- This is particularly useful for using VCR with [capybara](http://github.com/jnicklas/capybara)
65
- and any of its javascript drivers (see below for more info).
68
+ * `:erb`: Used for dynamic cassettes (see below for more details).
66
69
 
67
70
  ## Record modes
68
71
 
@@ -80,6 +83,7 @@ and a per-cassette record mode when inserting a cassette. The record modes are:
80
83
  VCR.config do |c|
81
84
  c.cassette_library_dir = File.join(Rails.root, 'features', 'fixtures', 'cassette_library')
82
85
  c.http_stubbing_library = :fakeweb
86
+ c.ignore_localhost = true
83
87
  c.default_cassette_options = { :record => :none }
84
88
  end
85
89
 
@@ -92,7 +96,11 @@ configuration options:
92
96
  This is currently optional--VCR will try to guess based on the presence or absence of the `FakeWeb` or `WebMock`
93
97
  constants, but this is mostly done to assist users upgrading from VCR 0.3.1, which only worked with fakeweb and
94
98
  didn't have this option. I recommend you explicitly configure this.
95
- * `default_cassette_options`: The default options for your cassettes. These will be overriden by any options you
99
+ * `ignore_localhost`: Defaults to false. Setting it true does the following:
100
+ * Localhost requests will proceed as normal. The "Real HTTP connections are disabled" error will not occur.
101
+ * Localhost requests will not be recorded.
102
+ * Previously recorded localhost requests will not be replayed.
103
+ * `default_cassette_options`: The default options for your cassettes. These will be overridden by any options you
96
104
  set on each individual cassette.
97
105
 
98
106
  ## Usage with your favorite ruby test/spec framework
@@ -147,8 +155,69 @@ If the last argument to `#tags` is a hash, VCR will use it as the options for th
147
155
 
148
156
  When you use any of the javascript-enabled drivers (selenium, celerity, culerity) with
149
157
  [capybara](http://github.com/jnicklas/capybara), it'll need to ping the app running on localhost.
150
- Set the `:allow_real_http => :localhost` option on your cassettes to allow this (or set it as a
151
- default cassette option in your configuration).
158
+ Set the `ignore_localhost` option to true to allow this.
159
+
160
+ ## Cassette Customization
161
+
162
+ Cassettes are stored as simple plain text YAML files and can easily be edited to suit your needs. One common need
163
+ is for a particular request to be stubbed using a regex rather than the raw URL. This is handy for URLs that contain
164
+ non-deterministic portions (such as timestamps)--since the URL will be a bit different each time, the URL from the
165
+ recorded request will not match the URL for future requests. You can simply change the URL to the YAML of the
166
+ appropriate regex.
167
+
168
+ Figure out the yaml in irb:
169
+
170
+ >> require 'yaml'
171
+ => true
172
+ >> puts /example\.com\/\d+/.to_yaml
173
+ --- !ruby/regexp /example\.com\/\d+/
174
+
175
+ Edit your cassette file:
176
+
177
+ request: !ruby/struct:VCR::Request
178
+ method: :get
179
+ uri: !ruby/regexp /example\.com\/\d+/
180
+ body:
181
+ headers:
182
+
183
+ ## Dynamic Cassettes
184
+
185
+ VCR's default recording and replaying is static. The exact response that is initially recorded will
186
+ be replayed for all future requests. Usually this is fine, but in some cases you need something more
187
+ dynamic. You can use [ERB](http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/) for this.
188
+
189
+ Enable ERB evaluation of a cassette using the `:erb` option:
190
+
191
+ VCR.use_cassette('user-subscription', :erb => :true) do
192
+ # do something that makes an HTTP request
193
+ end
194
+
195
+ You can use variables in your cassette's ERB by passing a hash:
196
+
197
+ VCR.use_cassette('user-subscription', :erb => { :user => User.last }) do
198
+ # do something that makes an HTTP request
199
+ end
200
+
201
+ In your cassette:
202
+
203
+ request: !ruby/struct:VCR::Request
204
+ method: :get
205
+ uri: http://some-domain.com:80/users/<%= user.id %>
206
+ body:
207
+ headers:
208
+ ...
209
+ response: !ruby/struct:VCR::Response
210
+ ...
211
+ body: Hello, <%= user.name %>!
212
+
213
+ ## FakeWeb or WebMock?
214
+
215
+ VCR works fine with either FakeWeb or WebMock. Overall, WebMock has more features, and you'll need to use
216
+ WebMock if you want to use VCR with an HTTP library besides `Net::HTTP`. However, FakeWeb is currently
217
+ about three times faster than WebMock, so you may want to stick with FakeWeb if you don't need WebMock's
218
+ additional features. You can see the
219
+ [benchmarks](http://github.com/myronmarston/vcr/blob/master/benchmarks/http_stubbing_libraries.rb) for
220
+ more details.
152
221
 
153
222
  ## Suggested Workflow
154
223
 
@@ -183,8 +252,7 @@ that it is making a new HTTP request, you'll be notified by an error as shown ab
183
252
 
184
253
  ## Ruby Version Compatibility
185
254
 
186
- VCR works on ruby [1.8.6](http://integrity186.heroku.com/vcr), [1.8.7](http://integrity187.heroku.com/vcr) and
187
- [1.9.1](http://integrity191.heroku.com/vcr).
255
+ VCR has been tested on ruby 1.8.6, 1.8.7 and 1.9.1.
188
256
 
189
257
  ## Notes, etc.
190
258
 
@@ -214,7 +282,7 @@ VCR works on ruby [1.8.6](http://integrity186.heroku.com/vcr), [1.8.7](http://in
214
282
  ## Thanks
215
283
 
216
284
  * [Aslak Hellesøy](http://github.com/aslakhellesoy) for [Cucumber](http://github.com/aslakhellesoy/cucumber).
217
- * [Bartosz Blimke](http://github.com/bblimke) for [WebMock](http://github.com/bblimke/webmock)
285
+ * [Bartosz Blimke](http://github.com/bblimke) for [WebMock](http://github.com/bblimke/webmock).
218
286
  * [Chris Kampmeier](http://github.com/chrisk) for [FakeWeb](http://github.com/chrisk/fakeweb).
219
287
  * [Chris Young](http://github.com/chrisyoung) for [NetRecorder](http://github.com/chrisyoung/netrecorder),
220
288
  the inspiration for VCR.
data/lib/vcr.rb CHANGED
@@ -3,15 +3,17 @@ require 'vcr/config'
3
3
  require 'vcr/cucumber_tags'
4
4
  require 'vcr/deprecations'
5
5
  require 'vcr/structs'
6
+ require 'vcr/version'
6
7
 
7
8
  require 'vcr/extensions/net_http_response'
8
- require 'vcr/extensions/net_read_adapter'
9
9
 
10
10
  require 'vcr/http_stubbing_adapters/base'
11
11
 
12
12
  module VCR
13
13
  extend self
14
14
 
15
+ LOCALHOST_ALIASES = %w( localhost 127.0.0.1 )
16
+
15
17
  def current_cassette
16
18
  cassettes.last
17
19
  end
@@ -39,6 +41,7 @@ module VCR
39
41
  yield VCR::Config
40
42
  http_stubbing_adapter.check_version!
41
43
  http_stubbing_adapter.http_connections_allowed = false
44
+ http_stubbing_adapter.ignore_localhost = VCR::Config.ignore_localhost?
42
45
  end
43
46
 
44
47
  def cucumber_tags(&block)
@@ -57,6 +60,14 @@ module VCR
57
60
  end
58
61
  end
59
62
 
63
+ def record_http_interaction(interaction)
64
+ return unless cassette = current_cassette
65
+ return if http_stubbing_adapter.ignore_localhost? &&
66
+ LOCALHOST_ALIASES.include?(URI.parse(interaction.uri).host)
67
+
68
+ cassette.record_http_interaction(interaction)
69
+ end
70
+
60
71
  private
61
72
 
62
73
  def cassettes
@@ -1,18 +1,23 @@
1
1
  require 'fileutils'
2
2
  require 'yaml'
3
+ require 'erb'
3
4
 
4
5
  module VCR
5
6
  class Cassette
7
+ class MissingERBVariableError < NameError; end
8
+
6
9
  VALID_RECORD_MODES = [:all, :none, :new_episodes].freeze
7
10
 
8
11
  attr_reader :name, :record_mode
9
12
 
10
13
  def initialize(name, options = {})
14
+ options = VCR::Config.default_cassette_options.merge(options)
15
+
11
16
  @name = name
12
- @record_mode = options[:record] || VCR::Config.default_cassette_options[:record]
13
- @allow_real_http_lambda = allow_real_http_lambda_for(options[:allow_real_http] || VCR::Config.default_cassette_options[:allow_real_http])
17
+ @record_mode = options[:record]
18
+ @erb = options[:erb]
14
19
 
15
- deprecate_unregistered_record_mode
20
+ deprecate_old_cassette_options(options)
16
21
  raise_error_unless_valid_record_mode(record_mode)
17
22
 
18
23
  set_http_connections_allowed
@@ -23,6 +28,7 @@ module VCR
23
28
  write_recorded_interactions_to_disk
24
29
  VCR.http_stubbing_adapter.restore_stubs_checkpoint(name)
25
30
  restore_http_connections_allowed
31
+ restore_ignore_localhost_for_deprecation
26
32
  end
27
33
 
28
34
  def recorded_interactions
@@ -34,15 +40,15 @@ module VCR
34
40
  end
35
41
 
36
42
  def file
37
- File.join(VCR::Config.cassette_library_dir, "#{name.to_s.gsub(/[^\w\-\/]+/, '_')}.yml") if VCR::Config.cassette_library_dir
38
- end
39
-
40
- def allow_real_http_requests_to?(uri)
41
- @allow_real_http_lambda ? @allow_real_http_lambda.call(uri) : false
43
+ File.join(VCR::Config.cassette_library_dir, "#{sanitized_name}.yml") if VCR::Config.cassette_library_dir
42
44
  end
43
45
 
44
46
  private
45
47
 
48
+ def sanitized_name
49
+ name.to_s.gsub(/[^\w\-\/]+/, '_')
50
+ end
51
+
46
52
  def raise_error_unless_valid_record_mode(record_mode)
47
53
  unless VALID_RECORD_MODES.include?(record_mode)
48
54
  raise ArgumentError.new("#{record_mode} is not a valid cassette record mode. Valid options are: #{VALID_RECORD_MODES.inspect}")
@@ -73,14 +79,18 @@ module VCR
73
79
 
74
80
  if file
75
81
  @original_recorded_interactions = begin
76
- yaml_content = File.read(file)
77
- YAML.load(yaml_content)
78
- rescue TypeError
79
- if yaml_content =~ /VCR::RecordedResponse/
80
- raise "The VCR cassette #{name} uses an old format that is now deprecated. VCR provides a rake task to migrate your old cassettes to the new format. See http://github.com/myronmarston/vcr/blob/master/CHANGELOG.md for more info."
81
- else
82
- raise
82
+ interactions = YAML.load(raw_yaml_content)
83
+
84
+ if VCR.http_stubbing_adapter.ignore_localhost?
85
+ interactions.reject! do |i|
86
+ i.uri.is_a?(String) && VCR::LOCALHOST_ALIASES.include?(URI.parse(i.uri).host)
87
+ end
83
88
  end
89
+
90
+ interactions
91
+ rescue TypeError
92
+ raise unless raw_yaml_content =~ /VCR::RecordedResponse/
93
+ raise "The VCR cassette #{sanitized_name}.yml uses an old format that is now deprecated. VCR provides a rake task to migrate your old cassettes to the new format. See http://github.com/myronmarston/vcr/blob/master/CHANGELOG.md for more info."
84
94
  end if File.exist?(file)
85
95
 
86
96
  recorded_interactions.replace(@original_recorded_interactions)
@@ -89,6 +99,31 @@ module VCR
89
99
  VCR.http_stubbing_adapter.stub_requests(recorded_interactions)
90
100
  end
91
101
 
102
+ def raw_yaml_content
103
+ content = File.read(file)
104
+ return content unless @erb
105
+
106
+ template = ERB.new(content)
107
+
108
+ begin
109
+ return template.result unless @erb.is_a?(Hash)
110
+
111
+ # create an object with methods for each desired local variable...
112
+ local_variables = Struct.new(*@erb.keys).new(*@erb.values)
113
+
114
+ # instance_eval seems to be the only way to get the binding for ruby 1.9: http://redmine.ruby-lang.org/issues/show/2161
115
+ template.result(local_variables.instance_eval { binding })
116
+ rescue NameError => e
117
+ var_name = e.message[/undefined local variable or method `(.*)' for/, 1].to_sym
118
+ example_hash = (@erb.is_a?(Hash) ? @erb : {}).merge(var_name => 'some value')
119
+
120
+ raise MissingERBVariableError.new(
121
+ "The ERB in the #{sanitized_name}.yml cassette file references undefined variable #{var_name}. " +
122
+ "Pass it to the cassette using :erb => #{ example_hash.inspect }."
123
+ )
124
+ end
125
+ end
126
+
92
127
  def write_recorded_interactions_to_disk
93
128
  if VCR::Config.cassette_library_dir && new_recorded_interactions.size > 0
94
129
  directory = File.dirname(file)
@@ -96,17 +131,5 @@ module VCR
96
131
  File.open(file, 'w') { |f| f.write recorded_interactions.to_yaml }
97
132
  end
98
133
  end
99
-
100
- def unstub_requests
101
- VCR.http_stubbing_adapter.unstub_requests(@original_recorded_interactions)
102
- end
103
-
104
- def allow_real_http_lambda_for(allow_option)
105
- if allow_option == :localhost
106
- lambda { |uri| uri.host == 'localhost' }
107
- else
108
- allow_option
109
- end
110
- end
111
134
  end
112
135
  end
@@ -21,6 +21,15 @@ module VCR
21
21
  defined_constants[0].to_s.downcase.to_sym if defined_constants.size == 1
22
22
  end
23
23
  end
24
+
25
+ def ignore_localhost=(value)
26
+ VCR.http_stubbing_adapter && VCR.http_stubbing_adapter.ignore_localhost = value
27
+ @ignore_localhost = value
28
+ end
29
+
30
+ def ignore_localhost?
31
+ VCR.http_stubbing_adapter ? VCR.http_stubbing_adapter.ignore_localhost? : @ignore_localhost
32
+ end
24
33
  end
25
34
  end
26
35
  end
@@ -1,54 +1,27 @@
1
1
  module VCR
2
- def create_cassette!(*args)
3
- warn "WARNING: VCR.create_cassette! is deprecated. Instead, use: VCR.insert_cassette."
4
- insert_cassette(*args)
5
- end
6
-
7
- def destroy_cassette!(*args)
8
- warn "WARNING: VCR.destroy_cassette! is deprecated. Instead, use: VCR.eject_cassette."
9
- eject_cassette(*args)
10
- end
11
-
12
- def with_cassette(*args, &block)
13
- warn "WARNING: VCR.with_cassette is deprecated. Instead, use: VCR.use_cassette."
14
- use_cassette(*args, &block)
15
- end
16
-
17
2
  class Cassette
18
- def destroy!(*args)
19
- warn "WARNING: VCR::Cassette#destroy! is deprecated. Instead, use: VCR::Cassette#eject."
20
- eject(*args)
21
- end
22
-
23
- def cache_file(*args)
24
- warn "WARNING: VCR::Cassette#cache_file is deprecated. Instead, use: VCR::Cassette#file."
25
- file(*args)
3
+ def allow_real_http_requests_to?(uri)
4
+ warn "WARNING: VCR::Cassette#allow_real_http_requests_to? is deprecated and should no longer be used."
5
+ VCR.http_stubbing_adapter.ignore_localhost? && VCR::LOCALHOST_ALIASES.include?(uri.host)
26
6
  end
27
7
 
28
8
  private
29
9
 
30
- def deprecate_unregistered_record_mode
31
- if @record_mode == :unregistered
32
- @record_mode = :new_episodes
33
- Kernel.warn "WARNING: VCR's :unregistered record mode is deprecated. Instead, use: :new_episodes."
10
+ def deprecate_old_cassette_options(options)
11
+ message = "VCR's :allow_real_http cassette option is deprecated. Instead, use the ignore_localhost configuration option."
12
+ if options[:allow_real_http] == :localhost
13
+ @original_ignore_localhost = VCR.http_stubbing_adapter.ignore_localhost?
14
+ VCR.http_stubbing_adapter.ignore_localhost = true
15
+ Kernel.warn "WARNING: #{message}"
16
+ elsif options[:allow_real_http]
17
+ raise ArgumentError.new(message)
34
18
  end
35
19
  end
36
- end
37
-
38
- class Config
39
- def self.cache_dir(*args)
40
- warn "WARNING: VCR::Config.cache_dir is deprecated. Instead, use: VCR::Config.cassette_library_dir."
41
- cassette_library_dir(*args)
42
- end
43
20
 
44
- def self.cache_dir=(value)
45
- warn "WARNING: VCR::Config.cache_dir= is deprecated. Instead, use: VCR::Config.cassette_library_dir=."
46
- self.cassette_library_dir = value
47
- end
48
-
49
- def self.default_cassette_record_mode=(value)
50
- warn %Q{WARNING: #default_cassette_record_mode is deprecated. Instead, use: "default_cassette_options = { :record => :#{value.to_s} }"}
51
- default_cassette_options.merge!(:record => value)
21
+ def restore_ignore_localhost_for_deprecation
22
+ if defined?(@original_ignore_localhost)
23
+ VCR.http_stubbing_adapter.ignore_localhost = @original_ignore_localhost
24
+ end
52
25
  end
53
26
  end
54
27
  end