vcr 1.9.0 → 1.10.0

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml CHANGED
@@ -1,9 +1,11 @@
1
- script: "rake ci:build"
1
+ script: "bundle exec rake ci:build"
2
2
  rvm:
3
3
  - 1.8.6
4
4
  - 1.8.7
5
5
  - 1.9.1
6
6
  - 1.9.2
7
7
  - ree
8
- - rbx
9
8
  - jruby
9
+ - rbx
10
+ env:
11
+ - CI=true
data/CHANGELOG.md CHANGED
@@ -1,6 +1,20 @@
1
1
  ## In git
2
2
 
3
- [Full Changelog](http://github.com/myronmarston/vcr/compare/v1.9.0...master)
3
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v1.10.0...master)
4
+
5
+ ## 1.10.0 (May 18, 2011)
6
+
7
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v1.9.0...v1.10.0)
8
+
9
+ * Fix header normalization so that it properly handles nested arrays and
10
+ non-string values.
11
+ * Add cucumber scenario documenting how VCR sanitizes cassette names
12
+ to "normal" file names (i.e. only alphanumerics, no spaces).
13
+ * Add `:ignore_cassettes` option to `VCR.turn_off!`. This causes
14
+ cassette insertions to be ignored rather than to trigger an error.
15
+ Patch provided by [Justin Smestad](https://github.com/jsmestad).
16
+ * Fix rack middleware to make it threadsafe.
17
+ * Update to latest RSpec (rspec 2.6).
4
18
 
5
19
  ## 1.9.0 (April 14, 2011)
6
20
 
data/README.md CHANGED
@@ -4,28 +4,30 @@ Record your test suite's HTTP interactions and replay them during future test ru
4
4
 
5
5
  ## Synopsis
6
6
 
7
- require 'rubygems'
8
- require 'test/unit'
9
- require 'vcr'
10
-
11
- VCR.config do |c|
12
- c.cassette_library_dir = 'fixtures/vcr_cassettes'
13
- c.stub_with :webmock # or :fakeweb
14
- end
15
-
16
- class VCRTest < Test::Unit::TestCase
17
- def test_example_dot_com
18
- VCR.use_cassette('synopsis') do
19
- response = Net::HTTP.get_response(URI('http://www.iana.org/domains/example/'))
20
- assert_match /Example Domains/, response.body
21
- end
22
- end
7
+ ``` ruby
8
+ require 'rubygems'
9
+ require 'test/unit'
10
+ require 'vcr'
11
+
12
+ VCR.config do |c|
13
+ c.cassette_library_dir = 'fixtures/vcr_cassettes'
14
+ c.stub_with :webmock # or :fakeweb
15
+ end
16
+
17
+ class VCRTest < Test::Unit::TestCase
18
+ def test_example_dot_com
19
+ VCR.use_cassette('synopsis') do
20
+ response = Net::HTTP.get_response(URI('http://www.iana.org/domains/example/'))
21
+ assert_match /Example Domains/, response.body
23
22
  end
23
+ end
24
+ end
25
+ ```
24
26
 
25
27
  Run this test once, and VCR will record the http request to `fixtures/vcr_cassettes/synopsis.yml`. Run it again, and VCR
26
- will replay the response from example.com when the http request is made. This test is now fast (no real HTTP requests are
27
- made anymore), deterministic (the test will continue to pass, even if you are offline, or example.com goes down for
28
- maintenance) and accurate (the response from example.com will contain the same headers and body you get from a real request).
28
+ will replay the response from iana.org when the http request is made. This test is now fast (no real HTTP requests are
29
+ made anymore), deterministic (the test will continue to pass, even if you are offline, or iana.org goes down for
30
+ maintenance) and accurate (the response will contain the same headers and body you get from a real request).
29
31
 
30
32
  ## Features
31
33
 
@@ -39,7 +41,7 @@ maintenance) and accurate (the response from example.com will contain the same h
39
41
  * [Excon](https://github.com/geemus/excon)
40
42
  * Supports multiple HTTP libraries:
41
43
  * [Patron](http://github.com/toland/patron) (when using WebMock)
42
- * [Curb](http://github.com/taf2/curb) (when using WebMock -- only supports Curb::Easy at the moment)
44
+ * [Curb](http://github.com/taf2/curb) (when using WebMock -- only supports Curl::Easy at the moment)
43
45
  * [HTTPClient](http://github.com/nahi/httpclient) (when using WebMock)
44
46
  * [em-http-request](http://github.com/igrigorik/em-http-request) (when using WebMock)
45
47
  * [Net::HTTP](http://www.ruby-doc.org/stdlib/libdoc/net/http/rdoc/index.html) (when using FakeWeb and WebMock)
@@ -136,6 +138,7 @@ Thanks also to the following people who have contributed patches or helpful sugg
136
138
  * [Bartosz Blimke](http://github.com/bblimke)
137
139
  * [Ben Hutton](http://github.com/benhutton)
138
140
  * [Eric Allam](http://github.com/rubymaverick)
141
+ * [Justin Smestad](https://github.com/jsmestad)
139
142
  * [Karl Baum](https://github.com/kbaum)
140
143
  * [Nathaniel Bibler](https://github.com/nbibler)
141
144
  * [Oliver Searle-Barnes](https://github.com/opsb)
data/features/.nav CHANGED
@@ -4,6 +4,7 @@
4
4
  - LICENSE.md (License)
5
5
  - cassettes:
6
6
  - format.feature
7
+ - naming.feature
7
8
  - no_cassette.feature
8
9
  - request_matching.feature
9
10
  - dynamic_erb.feature
@@ -0,0 +1,29 @@
1
+ Feature: Naming
2
+
3
+ When inserting or using a cassette, the first argument is the cassette name.
4
+ You can use any string for the name. VCR will sanitize the string before
5
+ using it as a file name, so that it is a file-system friendly file name.
6
+
7
+ Scenario: Name sanitizing
8
+ Given a file named "name_sanitizing.rb" with:
9
+ """
10
+ require 'vcr_cucumber_helpers'
11
+
12
+ start_sinatra_app(:port => 7777) do
13
+ get('/') { "Hello" }
14
+ end
15
+
16
+ require 'vcr'
17
+
18
+ VCR.config do |c|
19
+ c.cassette_library_dir = 'cassettes'
20
+ c.stub_with :fakeweb
21
+ end
22
+
23
+ VCR.use_cassette('Fee, Fi Fo Fum', :record => :new_episodes) do
24
+ Net::HTTP.get_response('localhost', '/', 7777)
25
+ end
26
+ """
27
+ And the directory "cassettes" does not exist
28
+ When I run "ruby name_sanitizing.rb"
29
+ Then the file "cassettes/Fee_Fi_Fo_Fum.yml" should contain "body: Hello"
@@ -11,7 +11,10 @@ Feature: Error for HTTP request made when no cassette is in use
11
11
  (see configuration/allow_http_connections_when_no_cassette.feature) or
12
12
  you can temporarily turn VCR off:
13
13
 
14
- - `VCR.turn_off!` => turn VCR off so HTTP requests are allowed
14
+ - `VCR.turn_off!` => turn VCR off so HTTP requests are allowed.
15
+ Cassette insertions will trigger an error.
16
+ - `VCR.turn_off!(:ignore_cassettes => true)` => turn
17
+ VCR off and ignore cassette insertions (so that no error is raised).
15
18
  - `VCR.turn_on!` => turn VCR back on
16
19
  - `VCR.turned_off { ... }` => turn VCR off for the duration of the
17
20
  provided block.
@@ -104,3 +107,45 @@ Feature: Error for HTTP request made when no cassette is in use
104
107
  Error: Real HTTP connections are disabled.
105
108
  """
106
109
 
110
+ Scenario: Turning VCR off prevents cassettes from being inserted
111
+ Given a file named "turn_off_vcr_and_insert_cassette.rb" with:
112
+ """
113
+ require 'vcr'
114
+
115
+ VCR.config do |c|
116
+ c.stub_with :fakeweb
117
+ end
118
+
119
+ VCR.turn_off!
120
+ VCR.insert_cassette('example')
121
+ """
122
+ When I run "ruby turn_off_vcr_and_insert_cassette.rb"
123
+ Then it should fail with "VCR is turned off. You must turn it on before you can insert a cassette."
124
+
125
+ Scenario: Turning VCR off with `:ignore_cassettes => true` ignores cassettes
126
+ Given a file named "turn_off_vcr_and_insert_cassette.rb" with:
127
+ """
128
+ require 'vcr_cucumber_helpers'
129
+
130
+ start_sinatra_app(:port => 7777) do
131
+ get('/') { 'Hello' }
132
+ end
133
+
134
+ require 'vcr'
135
+
136
+ VCR.config do |c|
137
+ c.cassette_library_dir = 'cassettes'
138
+ c.stub_with :fakeweb
139
+ end
140
+
141
+ VCR.turn_off!(:ignore_cassettes => true)
142
+
143
+ VCR.use_cassette('example') do
144
+ response = Net::HTTP.get_response('localhost', '/', 7777).body
145
+ puts "Response: #{response}"
146
+ end
147
+ """
148
+ When I run "ruby turn_off_vcr_and_insert_cassette.rb"
149
+ Then it should pass with "Response: Hello"
150
+ And the file "cassettes/example.yml" should not exist
151
+
@@ -9,7 +9,7 @@ Feature: stub_with
9
9
  - Net::HTTP
10
10
  - HTTPClient
11
11
  - Patron
12
- - Curb (Curb::Easy, but not Curb::Multi)
12
+ - Curb (Curl::Easy, but not Curl::Multi)
13
13
  - EM HTTP Request
14
14
  - Typhoeus can be used to stub itself (as long as you use Typhoeus::Hydra,
15
15
  but not Typhoeus::Easy or Typhoeus::Multi).
@@ -22,16 +22,20 @@ Feature: Usage with Cucumber
22
22
  last argument to `#tag` or `#tags`.
23
23
 
24
24
  Scenario: Record HTTP interactions in a scenario by tagging it
25
- Given a file named "features/support/vcr.rb" with:
25
+ Given a file named "lib/server.rb" with:
26
26
  """
27
- require 'vcr_cucumber_helpers.rb'
27
+ require 'vcr_cucumber_helpers'
28
28
 
29
29
  if ENV['WITH_SERVER'] == 'true'
30
30
  start_sinatra_app(:port => 7777) do
31
31
  get('/:path') { "Hello #{params[:path]}" }
32
32
  end
33
33
  end
34
+ """
34
35
 
36
+ Given a file named "features/support/vcr.rb" with:
37
+ """
38
+ require "lib/server"
35
39
  require 'vcr'
36
40
 
37
41
  VCR.config do |c|
data/lib/vcr.rb CHANGED
@@ -48,17 +48,19 @@ module VCR
48
48
  end
49
49
 
50
50
  def insert_cassette(name, options = {})
51
- unless turned_on?
52
- raise TurnedOffError.new("VCR is turned off. You must turn it on before you can insert a cassette.")
53
- end
51
+ if turned_on?
52
+ if cassettes.any? { |c| c.name == name }
53
+ raise ArgumentError.new("There is already a cassette with the same name (#{name}). You cannot nest multiple cassettes with the same name.")
54
+ end
54
55
 
55
- if cassettes.any? { |c| c.name == name }
56
- raise ArgumentError.new("There is already a cassette with the same name (#{name}). You cannot nest multiple cassettes with the same name.")
56
+ cassette = Cassette.new(name, options)
57
+ cassettes.push(cassette)
58
+ cassette
59
+ elsif !ignore_cassettes?
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."
62
+ raise TurnedOffError.new(message)
57
63
  end
58
-
59
- cassette = Cassette.new(name, options)
60
- cassettes.push(cassette)
61
- cassette
62
64
  end
63
65
 
64
66
  def eject_cassette
@@ -108,8 +110,8 @@ module VCR
108
110
  cassette.record_http_interaction(interaction)
109
111
  end
110
112
 
111
- def turned_off
112
- turn_off!
113
+ def turned_off(options = {})
114
+ turn_off!(options)
113
115
 
114
116
  begin
115
117
  yield
@@ -118,11 +120,17 @@ module VCR
118
120
  end
119
121
  end
120
122
 
121
- def turn_off!
123
+ def turn_off!(options = {})
122
124
  if VCR.current_cassette
123
125
  raise CassetteInUseError.new("A VCR cassette is currently in use. You must eject it before you can turn VCR off.")
124
126
  end
125
127
 
128
+ @ignore_cassettes = options[:ignore_cassettes]
129
+ invalid_options = options.keys - [:ignore_cassettes]
130
+ if invalid_options.any?
131
+ raise ArgumentError.new("You passed some invalid options: #{invalid_options.inspect}")
132
+ end
133
+
126
134
  VCR.http_stubbing_adapter.http_connections_allowed = true
127
135
  @turned_off = true
128
136
  end
@@ -136,6 +144,10 @@ module VCR
136
144
  !@turned_off
137
145
  end
138
146
 
147
+ def ignore_cassettes?
148
+ @ignore_cassettes
149
+ end
150
+
139
151
  private
140
152
 
141
153
  def adapter_for(lib)
@@ -3,9 +3,16 @@ module VCR
3
3
  class Rack
4
4
  include Common
5
5
 
6
+ def initialize(*args)
7
+ @mutex = Mutex.new
8
+ super
9
+ end
10
+
6
11
  def call(env)
7
- VCR.use_cassette(*cassette_arguments(env)) do
8
- @app.call(env)
12
+ @mutex.synchronize do
13
+ VCR.use_cassette(*cassette_arguments(env)) do
14
+ @app.call(env)
15
+ end
9
16
  end
10
17
  end
11
18
  end
@@ -39,18 +39,26 @@ module VCR
39
39
  important_vals = important_header_values(k, val_array)
40
40
  next unless important_vals.size > 0
41
41
 
42
- # Ensure the values are raw strings.
43
- # Apparently for Paperclip uploads to S3, headers
44
- # get serialized with some extra stuff which leads
45
- # to a seg fault. See this issue for more info:
46
- # https://github.com/myronmarston/vcr/issues#issue/39
47
- string_vals = important_vals.map { |v| String.new(v) }
48
-
49
- new_headers[k] = string_vals
42
+ new_headers[k] = convert_to_raw_strings(important_vals)
50
43
  end if headers
51
44
 
52
45
  self.headers = new_headers.empty? ? nil : new_headers
53
46
  end
47
+
48
+ def convert_to_raw_strings(array)
49
+ # Ensure the values are raw strings.
50
+ # Apparently for Paperclip uploads to S3, headers
51
+ # get serialized with some extra stuff which leads
52
+ # to a seg fault. See this issue for more info:
53
+ # https://github.com/myronmarston/vcr/issues#issue/39
54
+ array.map do |v|
55
+ case v
56
+ when String; String.new(v)
57
+ when Array; convert_to_raw_strings(v)
58
+ else v
59
+ end
60
+ end
61
+ end
54
62
  end
55
63
  end
56
64
  end
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.9.0'
6
+ string = '1.10.0'
7
7
 
8
8
  def string.parts
9
9
  split('.').map { |p| p.to_i }
data/spec/spec_helper.rb CHANGED
@@ -41,7 +41,8 @@ end
41
41
 
42
42
  RSpec.configure do |config|
43
43
  config.color_enabled = true
44
- config.debug = (using_git && RUBY_INTERPRETER == :mri)
44
+ config.debug = (using_git && RUBY_INTERPRETER == :mri && RUBY_VERSION != '1.9.1')
45
+ config.treat_symbols_as_metadata_keys_with_true_values = true
45
46
 
46
47
  tmp_dir = File.expand_path('../../tmp/cassette_library_dir', __FILE__)
47
48
  config.before(:each) do
@@ -40,7 +40,8 @@ HTTP_LIBRARY_ADAPTERS['httpclient'] = Module.new do
40
40
  def self.http_library_name; 'HTTP Client'; end
41
41
 
42
42
  def get_body_string(response)
43
- string = response.body.content
43
+ body = response.body
44
+ string = body.is_a?(String) ? body : body.content
44
45
  string.respond_to?(:read) ? string.read : string
45
46
  end
46
47
 
@@ -37,6 +37,18 @@ shared_examples_for "header normalization" do
37
37
  instance = with_headers('my-key' => [value])
38
38
  VCR::YAML.dump(instance.headers).should == VCR::YAML.dump('my-key' => ['my-value'])
39
39
  end
40
+
41
+ it 'handles nested arrays' do
42
+ accept_encoding = [["gzip", "1.0"], ["deflate", "1.0"], ["sdch", "1.0"]]
43
+ instance = with_headers('accept-encoding' => accept_encoding)
44
+ instance.headers['accept-encoding'].should == accept_encoding
45
+ end
46
+
47
+ it 'handles nested arrays with floats' do
48
+ accept_encoding = [["gzip", 1.0], ["deflate", 1.0], ["sdch", 1.0]]
49
+ instance = with_headers('accept-encoding' => accept_encoding)
50
+ instance.headers['accept-encoding'].should == accept_encoding
51
+ end
40
52
  end
41
53
 
42
54
  shared_examples_for "body normalization" do
@@ -29,7 +29,13 @@ module VCR
29
29
  end
30
30
 
31
31
  def self.server
32
- @server ||= VCR::LocalhostServer.new(new)
32
+ raise "Sinatra app failed to boot." if @_boot_failed
33
+ @server ||= begin
34
+ VCR::LocalhostServer.new(new)
35
+ rescue
36
+ @_boot_failed = true
37
+ raise
38
+ end
33
39
  end
34
40
  end
35
41
  end
@@ -13,7 +13,7 @@ module VCR
13
13
 
14
14
  def call(env)
15
15
  if env["PATH_INFO"] == "/__identify__"
16
- [200, {}, @app.object_id.to_s]
16
+ [200, {}, [@app.object_id.to_s]]
17
17
  else
18
18
  @app.call(env)
19
19
  end
@@ -40,7 +40,9 @@ module VCR
40
40
 
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
- Rack::Handler::WEBrick.run(Identify.new(@rack_app), :Port => port, :AccessLog => [], :Logger => WEBrick::BasicLog.new(StringIO.new))
43
+ options = { :Port => port }
44
+ options.merge!(:AccessLog => [], :Logger => WEBrick::BasicLog.new(StringIO.new)) unless ENV['CI']
45
+ Rack::Handler::WEBrick.run(Identify.new(@rack_app), options)
44
46
  end
45
47
 
46
48
  def booted?
@@ -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)) do
452
+ pending("Need to fix this to work with Psych", :if => defined?(::Psych) && !ENV['CI']) 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
@@ -51,4 +51,24 @@ describe VCR::Middleware::Rack do
51
51
  instance.call(env_hash)
52
52
  end
53
53
  end
54
+
55
+ let(:threaded_app) do
56
+ lambda do |env|
57
+ sleep 0.15
58
+ VCR.send(:cassettes).should have(1).cassette
59
+ [200, {}, ['OK']]
60
+ end
61
+ end
62
+
63
+ it 'is thread safe' do
64
+ stack = described_class.new(threaded_app) do |cassette|
65
+ cassette.name 'c'
66
+ end
67
+
68
+ thread = Thread.new { stack.call({}) }
69
+ stack.call({})
70
+ thread.join
71
+
72
+ VCR.current_cassette.should be_nil
73
+ end
54
74
  end
data/spec/vcr_spec.rb CHANGED
@@ -237,6 +237,32 @@ describe VCR do
237
237
  VCR.insert_cassette('foo')
238
238
  }.to raise_error(VCR::TurnedOffError)
239
239
  end
240
+
241
+ it 'raises an ArgumentError when given an invalid option' do
242
+ expect {
243
+ VCR.turn_off!(:invalid_option => true)
244
+ }.to raise_error(ArgumentError)
245
+ end
246
+
247
+ context 'when `:ignore_cassettes => true` is passed' do
248
+ before(:each) { VCR.turn_off!(:ignore_cassettes => true) }
249
+
250
+ it 'ignores cassette insertions' do
251
+ VCR.insert_cassette('foo')
252
+ VCR.current_cassette.should be_nil
253
+ end
254
+
255
+ it 'still runs a block passed to use_cassette' do
256
+ yielded = false
257
+
258
+ VCR.use_cassette('foo') do
259
+ yielded = true
260
+ VCR.current_cassette.should be_nil
261
+ end
262
+
263
+ yielded.should be_true
264
+ end
265
+ end
240
266
  end
241
267
 
242
268
  describe '.turn_on!' do
@@ -267,6 +293,11 @@ describe VCR do
267
293
  yielded.should == true
268
294
  VCR.should be_turned_on
269
295
  end
296
+
297
+ it 'passes options through to .turn_off!' do
298
+ VCR.should_receive(:turn_off!).with(:ignore_cassettes => true)
299
+ VCR.turned_off(:ignore_cassettes => true) { }
300
+ end
270
301
  end
271
302
 
272
303
  describe '.turned_on?' do
data/vcr.gemspec CHANGED
@@ -21,13 +21,14 @@ Gem::Specification.new do |s|
21
21
  'bundler' => '~> 1.0.7',
22
22
  'rake' => '~> 0.8.7',
23
23
 
24
- 'rspec' => '~> 2.5',
24
+ 'rspec' => '~> 2.6',
25
25
  'cucumber' => '~> 0.9.4',
26
26
  'aruba' => '0.2.4',
27
27
  'shoulda' => '~> 2.9.2',
28
28
 
29
29
  'fakeweb' => '~> 1.3.0',
30
- 'webmock' => '~> 1.6.0',
30
+ 'webmock' => '~> 1.6.4',
31
+ 'addressable' => '~> 2.2.6',
31
32
 
32
33
  'faraday' => '~> 0.6.0',
33
34
  'httpclient' => '~> 2.1.5.2',
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: 51
4
+ hash: 63
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 9
8
+ - 10
9
9
  - 0
10
- version: 1.9.0
10
+ version: 1.10.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Myron Marston
@@ -15,14 +15,11 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-14 00:00:00 -07:00
19
- default_executable:
18
+ date: 2011-05-19 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
- prerelease: false
23
21
  type: :development
24
- name: faraday
25
- version_requirements: &id001 !ruby/object:Gem::Requirement
22
+ requirement: &id001 !ruby/object:Gem::Requirement
26
23
  none: false
27
24
  requirements:
28
25
  - - ~>
@@ -33,12 +30,12 @@ dependencies:
33
30
  - 6
34
31
  - 0
35
32
  version: 0.6.0
36
- requirement: *id001
37
- - !ruby/object:Gem::Dependency
33
+ version_requirements: *id001
34
+ name: faraday
38
35
  prerelease: false
36
+ - !ruby/object:Gem::Dependency
39
37
  type: :development
40
- name: fakeweb
41
- version_requirements: &id002 !ruby/object:Gem::Requirement
38
+ requirement: &id002 !ruby/object:Gem::Requirement
42
39
  none: false
43
40
  requirements:
44
41
  - - ~>
@@ -49,12 +46,12 @@ dependencies:
49
46
  - 3
50
47
  - 0
51
48
  version: 1.3.0
52
- requirement: *id002
53
- - !ruby/object:Gem::Dependency
49
+ version_requirements: *id002
50
+ name: fakeweb
54
51
  prerelease: false
52
+ - !ruby/object:Gem::Dependency
55
53
  type: :development
56
- name: httpclient
57
- version_requirements: &id003 !ruby/object:Gem::Requirement
54
+ requirement: &id003 !ruby/object:Gem::Requirement
58
55
  none: false
59
56
  requirements:
60
57
  - - ~>
@@ -66,12 +63,12 @@ dependencies:
66
63
  - 5
67
64
  - 2
68
65
  version: 2.1.5.2
69
- requirement: *id003
70
- - !ruby/object:Gem::Dependency
66
+ version_requirements: *id003
67
+ name: httpclient
71
68
  prerelease: false
69
+ - !ruby/object:Gem::Dependency
72
70
  type: :development
73
- name: rake
74
- version_requirements: &id004 !ruby/object:Gem::Requirement
71
+ requirement: &id004 !ruby/object:Gem::Requirement
75
72
  none: false
76
73
  requirements:
77
74
  - - ~>
@@ -82,12 +79,12 @@ dependencies:
82
79
  - 8
83
80
  - 7
84
81
  version: 0.8.7
85
- requirement: *id004
86
- - !ruby/object:Gem::Dependency
82
+ version_requirements: *id004
83
+ name: rake
87
84
  prerelease: false
85
+ - !ruby/object:Gem::Dependency
88
86
  type: :development
89
- name: timecop
90
- version_requirements: &id005 !ruby/object:Gem::Requirement
87
+ requirement: &id005 !ruby/object:Gem::Requirement
91
88
  none: false
92
89
  requirements:
93
90
  - - ~>
@@ -98,12 +95,28 @@ dependencies:
98
95
  - 3
99
96
  - 5
100
97
  version: 0.3.5
101
- requirement: *id005
98
+ version_requirements: *id005
99
+ name: timecop
100
+ prerelease: false
102
101
  - !ruby/object:Gem::Dependency
102
+ type: :development
103
+ requirement: &id006 !ruby/object:Gem::Requirement
104
+ none: false
105
+ requirements:
106
+ - - ~>
107
+ - !ruby/object:Gem::Version
108
+ hash: 11
109
+ segments:
110
+ - 2
111
+ - 2
112
+ - 6
113
+ version: 2.2.6
114
+ version_requirements: *id006
115
+ name: addressable
103
116
  prerelease: false
117
+ - !ruby/object:Gem::Dependency
104
118
  type: :development
105
- name: shoulda
106
- version_requirements: &id006 !ruby/object:Gem::Requirement
119
+ requirement: &id007 !ruby/object:Gem::Requirement
107
120
  none: false
108
121
  requirements:
109
122
  - - ~>
@@ -114,27 +127,27 @@ dependencies:
114
127
  - 9
115
128
  - 2
116
129
  version: 2.9.2
117
- requirement: *id006
118
- - !ruby/object:Gem::Dependency
130
+ version_requirements: *id007
131
+ name: shoulda
119
132
  prerelease: false
133
+ - !ruby/object:Gem::Dependency
120
134
  type: :development
121
- name: rspec
122
- version_requirements: &id007 !ruby/object:Gem::Requirement
135
+ requirement: &id008 !ruby/object:Gem::Requirement
123
136
  none: false
124
137
  requirements:
125
138
  - - ~>
126
139
  - !ruby/object:Gem::Version
127
- hash: 9
140
+ hash: 15
128
141
  segments:
129
142
  - 2
130
- - 5
131
- version: "2.5"
132
- requirement: *id007
133
- - !ruby/object:Gem::Dependency
143
+ - 6
144
+ version: "2.6"
145
+ version_requirements: *id008
146
+ name: rspec
134
147
  prerelease: false
148
+ - !ruby/object:Gem::Dependency
135
149
  type: :development
136
- name: rack
137
- version_requirements: &id008 !ruby/object:Gem::Requirement
150
+ requirement: &id009 !ruby/object:Gem::Requirement
138
151
  none: false
139
152
  requirements:
140
153
  - - "="
@@ -145,12 +158,12 @@ dependencies:
145
158
  - 1
146
159
  - 0
147
160
  version: 1.1.0
148
- requirement: *id008
149
- - !ruby/object:Gem::Dependency
161
+ version_requirements: *id009
162
+ name: rack
150
163
  prerelease: false
164
+ - !ruby/object:Gem::Dependency
151
165
  type: :development
152
- name: aruba
153
- version_requirements: &id009 !ruby/object:Gem::Requirement
166
+ requirement: &id010 !ruby/object:Gem::Requirement
154
167
  none: false
155
168
  requirements:
156
169
  - - "="
@@ -161,12 +174,12 @@ dependencies:
161
174
  - 2
162
175
  - 4
163
176
  version: 0.2.4
164
- requirement: *id009
165
- - !ruby/object:Gem::Dependency
177
+ version_requirements: *id010
178
+ name: aruba
166
179
  prerelease: false
180
+ - !ruby/object:Gem::Dependency
167
181
  type: :development
168
- name: sinatra
169
- version_requirements: &id010 !ruby/object:Gem::Requirement
182
+ requirement: &id011 !ruby/object:Gem::Requirement
170
183
  none: false
171
184
  requirements:
172
185
  - - ~>
@@ -177,12 +190,12 @@ dependencies:
177
190
  - 1
178
191
  - 0
179
192
  version: 1.1.0
180
- requirement: *id010
181
- - !ruby/object:Gem::Dependency
193
+ version_requirements: *id011
194
+ name: sinatra
182
195
  prerelease: false
196
+ - !ruby/object:Gem::Dependency
183
197
  type: :development
184
- name: bundler
185
- version_requirements: &id011 !ruby/object:Gem::Requirement
198
+ requirement: &id012 !ruby/object:Gem::Requirement
186
199
  none: false
187
200
  requirements:
188
201
  - - ~>
@@ -193,12 +206,12 @@ dependencies:
193
206
  - 0
194
207
  - 7
195
208
  version: 1.0.7
196
- requirement: *id011
197
- - !ruby/object:Gem::Dependency
209
+ version_requirements: *id012
210
+ name: bundler
198
211
  prerelease: false
212
+ - !ruby/object:Gem::Dependency
199
213
  type: :development
200
- name: excon
201
- version_requirements: &id012 !ruby/object:Gem::Requirement
214
+ requirement: &id013 !ruby/object:Gem::Requirement
202
215
  none: false
203
216
  requirements:
204
217
  - - ~>
@@ -209,12 +222,12 @@ dependencies:
209
222
  - 6
210
223
  - 2
211
224
  version: 0.6.2
212
- requirement: *id012
213
- - !ruby/object:Gem::Dependency
225
+ version_requirements: *id013
226
+ name: excon
214
227
  prerelease: false
228
+ - !ruby/object:Gem::Dependency
215
229
  type: :development
216
- name: cucumber
217
- version_requirements: &id013 !ruby/object:Gem::Requirement
230
+ requirement: &id014 !ruby/object:Gem::Requirement
218
231
  none: false
219
232
  requirements:
220
233
  - - ~>
@@ -225,28 +238,28 @@ dependencies:
225
238
  - 9
226
239
  - 4
227
240
  version: 0.9.4
228
- requirement: *id013
229
- - !ruby/object:Gem::Dependency
241
+ version_requirements: *id014
242
+ name: cucumber
230
243
  prerelease: false
244
+ - !ruby/object:Gem::Dependency
231
245
  type: :development
232
- name: webmock
233
- version_requirements: &id014 !ruby/object:Gem::Requirement
246
+ requirement: &id015 !ruby/object:Gem::Requirement
234
247
  none: false
235
248
  requirements:
236
249
  - - ~>
237
250
  - !ruby/object:Gem::Version
238
- hash: 15
251
+ hash: 7
239
252
  segments:
240
253
  - 1
241
254
  - 6
242
- - 0
243
- version: 1.6.0
244
- requirement: *id014
245
- - !ruby/object:Gem::Dependency
255
+ - 4
256
+ version: 1.6.4
257
+ version_requirements: *id015
258
+ name: webmock
246
259
  prerelease: false
260
+ - !ruby/object:Gem::Dependency
247
261
  type: :development
248
- name: curb
249
- version_requirements: &id015 !ruby/object:Gem::Requirement
262
+ requirement: &id016 !ruby/object:Gem::Requirement
250
263
  none: false
251
264
  requirements:
252
265
  - - "="
@@ -257,12 +270,12 @@ dependencies:
257
270
  - 7
258
271
  - 8
259
272
  version: 0.7.8
260
- requirement: *id015
261
- - !ruby/object:Gem::Dependency
273
+ version_requirements: *id016
274
+ name: curb
262
275
  prerelease: false
276
+ - !ruby/object:Gem::Dependency
263
277
  type: :development
264
- name: patron
265
- version_requirements: &id016 !ruby/object:Gem::Requirement
278
+ requirement: &id017 !ruby/object:Gem::Requirement
266
279
  none: false
267
280
  requirements:
268
281
  - - "="
@@ -273,12 +286,12 @@ dependencies:
273
286
  - 4
274
287
  - 9
275
288
  version: 0.4.9
276
- requirement: *id016
277
- - !ruby/object:Gem::Dependency
289
+ version_requirements: *id017
290
+ name: patron
278
291
  prerelease: false
292
+ - !ruby/object:Gem::Dependency
279
293
  type: :development
280
- name: em-http-request
281
- version_requirements: &id017 !ruby/object:Gem::Requirement
294
+ requirement: &id018 !ruby/object:Gem::Requirement
282
295
  none: false
283
296
  requirements:
284
297
  - - ~>
@@ -289,12 +302,12 @@ dependencies:
289
302
  - 3
290
303
  - 0
291
304
  version: 0.3.0
292
- requirement: *id017
293
- - !ruby/object:Gem::Dependency
305
+ version_requirements: *id018
306
+ name: em-http-request
294
307
  prerelease: false
308
+ - !ruby/object:Gem::Dependency
295
309
  type: :development
296
- name: typhoeus
297
- version_requirements: &id018 !ruby/object:Gem::Requirement
310
+ requirement: &id019 !ruby/object:Gem::Requirement
298
311
  none: false
299
312
  requirements:
300
313
  - - ~>
@@ -305,7 +318,9 @@ dependencies:
305
318
  - 2
306
319
  - 1
307
320
  version: 0.2.1
308
- requirement: *id018
321
+ version_requirements: *id019
322
+ name: typhoeus
323
+ prerelease: false
309
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.
310
325
  email: myron.marston@gmail.com
311
326
  executables: []
@@ -334,6 +349,7 @@ files:
334
349
  - features/cassettes/automatic_re_recording.feature
335
350
  - features/cassettes/dynamic_erb.feature
336
351
  - features/cassettes/format.feature
352
+ - features/cassettes/naming.feature
337
353
  - features/cassettes/no_cassette.feature
338
354
  - features/cassettes/request_matching.feature
339
355
  - features/cassettes/update_content_length_header.feature
@@ -468,7 +484,6 @@ files:
468
484
  - spec/vcr/version_spec.rb
469
485
  - spec/vcr_spec.rb
470
486
  - vcr.gemspec
471
- has_rdoc: true
472
487
  homepage: http://github.com/myronmarston/vcr
473
488
  licenses: []
474
489
 
@@ -502,7 +517,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
502
517
  requirements: []
503
518
 
504
519
  rubyforge_project:
505
- rubygems_version: 1.5.2
520
+ rubygems_version: 1.8.2
506
521
  signing_key:
507
522
  specification_version: 3
508
523
  summary: Record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate tests.
@@ -511,6 +526,7 @@ test_files:
511
526
  - features/cassettes/automatic_re_recording.feature
512
527
  - features/cassettes/dynamic_erb.feature
513
528
  - features/cassettes/format.feature
529
+ - features/cassettes/naming.feature
514
530
  - features/cassettes/no_cassette.feature
515
531
  - features/cassettes/request_matching.feature
516
532
  - features/cassettes/update_content_length_header.feature