vcr 1.1.1 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,17 @@
1
1
  #Changelog
2
2
 
3
+ ## 1.1.2 (September 9, 2010)
4
+
5
+ * Fixed a minor bug with the WebMock integration: WebMock extends each `Net::HTTPResponse` with an extension
6
+ module after reading the body, and VCR was doing the same thing, leading to some slight deviance from
7
+ standard Net::HTTP behavior. The fix prevents VCR from adding the same extension to a `Net::HTTPResponse`
8
+ that has already been extende by WebMock.
9
+ * Fixed a minor bug in the `VCR::Net::HTTPResponse` module so that it correctly handles nil bodies (such as
10
+ for a HEAD request).
11
+ * Refactored `VCR::Net::HTTPResponse` module so it is implemented in a much simpler manner.
12
+ * Updated specs and features so they pass against the latest WebMock release (1.3.5).
13
+ * Minor documentation updates.
14
+
3
15
  ## 1.1.1 (August 26, 2010)
4
16
 
5
17
  * Updated to use and require FakeWeb 1.3.0. It includes a fix for a bug related to multiple values for the
data/Gemfile CHANGED
@@ -4,6 +4,12 @@ gemspec
4
4
  group :development do
5
5
  # Our specs rely on something in rspec-core master that hasn't been released yet.
6
6
  gem 'rspec-core', :git => 'git://github.com/rspec/rspec-core.git'
7
+
8
+ # patron and em-http-request can't install on JRuby, so we have to limit their platform here.
9
+ platforms :ruby do
10
+ gem 'patron', '~> 0.4.6'
11
+ gem 'em-http-request', '~> 0.2.7'
12
+ end
7
13
  end
8
14
 
9
15
  # Additional gems that are useful, but not required for development.
@@ -7,7 +7,7 @@ GIT
7
7
  PATH
8
8
  remote: .
9
9
  specs:
10
- vcr (1.1.1)
10
+ vcr (1.1.2)
11
11
 
12
12
  GEM
13
13
  remote: http://rubygems.org/
@@ -36,7 +36,6 @@ GEM
36
36
  addressable (>= 2.0.0)
37
37
  eventmachine (>= 0.12.9)
38
38
  eventmachine (0.12.10)
39
- eventmachine (0.12.10-java)
40
39
  fakeweb (1.3.0)
41
40
  ffi (0.6.3)
42
41
  rake (>= 0.8.7)
@@ -91,7 +90,7 @@ GEM
91
90
  term-ansicolor (1.0.5)
92
91
  trollop (1.16.2)
93
92
  weakling (0.0.4-java)
94
- webmock (1.3.3)
93
+ webmock (1.3.5)
95
94
  addressable (>= 2.1.1)
96
95
  crack (>= 0.1.7)
97
96
 
@@ -100,7 +99,7 @@ PLATFORMS
100
99
  ruby
101
100
 
102
101
  DEPENDENCIES
103
- bundler (~> 1.0.0.rc6)
102
+ bundler (~> 1.0.0)
104
103
  capybara (~> 0.3.9)
105
104
  cucumber (~> 0.8.5)
106
105
  em-http-request (~> 0.2.7)
@@ -116,4 +115,4 @@ DEPENDENCIES
116
115
  ruby-debug-base19 (= 0.11.23)
117
116
  ruby-debug19
118
117
  vcr!
119
- webmock (= 1.3.3)
118
+ webmock (~> 1.3.5)
data/README.md CHANGED
@@ -47,7 +47,7 @@ maintenance) and accurate (the response from example.com will contain the same h
47
47
  (all HTTP stubbing libraries), [Patron](http://github.com/toland/patron) (WebMock only),
48
48
  [HTTPClient](http://github.com/nahi/httpclient) (WebMock only) and
49
49
  [em-http-request](http://github.com/igrigorik/em-http-request) (WebMock only).
50
- * Request matching is configurable based on HTTP method, URI, host, body and headers.
50
+ * Request matching is configurable based on HTTP method, URI, host, path, body and headers.
51
51
  * The same request can receive different responses in different tests--just use different cassettes.
52
52
  * The recorded requests and responses are stored on disk as YAML and can easily be inspected and edited.
53
53
  * Dynamic responses are supported using ERB.
data/Rakefile CHANGED
@@ -19,52 +19,46 @@ task :cleanup_rcov_files do
19
19
  rm_rf 'coverage.data'
20
20
  end
21
21
 
22
- begin
23
- permutations = {
24
- 'fakeweb' => %w( net/http ),
25
- 'webmock' => %w( net/http httpclient patron em-http-request )
26
- }
22
+ permutations = {
23
+ 'fakeweb' => %w( net/http ),
24
+ 'webmock' => %w( net/http httpclient patron em-http-request )
25
+ }
27
26
 
28
- require 'cucumber/rake/task'
29
- namespace :features do
30
- permutations.each do |http_stubbing_adapter, http_libraries|
31
- features_subtasks = []
27
+ require 'cucumber/rake/task'
28
+ namespace :features do
29
+ permutations.each do |http_stubbing_adapter, http_libraries|
30
+ features_subtasks = []
32
31
 
33
- namespace http_stubbing_adapter do
34
- http_libraries.each do |http_lib|
35
- next if RUBY_PLATFORM =~ /java/ && %w( patron em-http-request ).include?(http_lib)
32
+ namespace http_stubbing_adapter do
33
+ http_libraries.each do |http_lib|
34
+ next if RUBY_PLATFORM =~ /java/ && %w( patron em-http-request ).include?(http_lib)
36
35
 
37
- sanitized_http_lib = http_lib.gsub('/', '_')
38
- features_subtasks << "features:#{http_stubbing_adapter}:#{sanitized_http_lib}"
36
+ sanitized_http_lib = http_lib.gsub('/', '_')
37
+ features_subtasks << "features:#{http_stubbing_adapter}:#{sanitized_http_lib}"
39
38
 
40
- task "#{sanitized_http_lib}_prep" do
41
- ENV['HTTP_STUBBING_ADAPTER'] = http_stubbing_adapter
42
- ENV['HTTP_LIB'] = http_lib
43
- end
39
+ task "#{sanitized_http_lib}_prep" do
40
+ ENV['HTTP_STUBBING_ADAPTER'] = http_stubbing_adapter
41
+ ENV['HTTP_LIB'] = http_lib
42
+ end
44
43
 
45
- Cucumber::Rake::Task.new(
46
- { sanitized_http_lib => "#{features_subtasks.last}_prep" },
47
- "Run the features using #{http_stubbing_adapter} and #{http_lib}") do |t|
48
- t.cucumber_opts = ['--format', 'progress', '--tags', "@#{http_stubbing_adapter},@all_http_libs,@#{sanitized_http_lib}"]
44
+ Cucumber::Rake::Task.new(
45
+ { sanitized_http_lib => "#{features_subtasks.last}_prep" },
46
+ "Run the features using #{http_stubbing_adapter} and #{http_lib}") do |t|
47
+ t.cucumber_opts = ['--format', 'progress', '--tags', "@#{http_stubbing_adapter},@all_http_libs,@#{sanitized_http_lib}"]
49
48
 
50
- # disable scenarios on heroku that can't pass due to heroku's restrictions
51
- t.cucumber_opts += ['--tags', '~@spawns_localhost_server'] if ENV.keys.include?('HEROKU_SLUG')
52
- end
49
+ # disable scenarios on heroku that can't pass due to heroku's restrictions
50
+ t.cucumber_opts += ['--tags', '~@spawns_localhost_server'] if ENV.keys.include?('HEROKU_SLUG')
53
51
  end
54
52
  end
55
-
56
- desc "Run the features using #{http_stubbing_adapter} and each of #{http_stubbing_adapter}'s supported http libraries"
57
- task http_stubbing_adapter => features_subtasks
58
53
  end
59
- end
60
54
 
61
- desc "Run the features using each supported permutation of http stubbing library and http library."
62
- task :features => permutations.keys.map { |a| "features:#{a}" }
63
- rescue LoadError
64
- task :features do
65
- abort "Cucumber is not available. In order to run features, you must: sudo gem install cucumber"
55
+ desc "Run the features using #{http_stubbing_adapter} and each of #{http_stubbing_adapter}'s supported http libraries"
56
+ task http_stubbing_adapter => features_subtasks
66
57
  end
67
58
  end
68
59
 
60
+ desc "Run the features using each supported permutation of http stubbing library and http library."
61
+ task :features => permutations.keys.map { |a| "features:#{a}" }
62
+
69
63
  task :default => [:spec, :features]
70
64
 
@@ -19,8 +19,8 @@ When /^I make a replayed asynchronous Net::HTTP get request to "([^\"]*)"$/ do |
19
19
  capture_response(url) do |uri, path|
20
20
  result_body = ''
21
21
  result = Net::HTTP.new(uri.host, uri.port).request_get(path) { |r| r.read_body { |fragment| result_body << fragment } }
22
- result.body.should == result_body
23
- result
22
+ def result_body.body; self; end # make the string a fake response (so response.body can be called on it)
23
+ result_body
24
24
  end
25
25
  end
26
26
 
@@ -210,7 +210,9 @@ Then /^(?:the )?response(?: (\d+))? for "([^\"]*)" should match \/(.+)\/$/ do |r
210
210
  response_num = response_num.to_i || 0
211
211
  response_num -= 1 if response_num > 0 # translate to 0-based array index.
212
212
  regex = /#{regex_str}/i
213
- get_body_string(@http_requests[url][response_num]).should =~ regex
213
+ response = @http_requests[url][response_num]
214
+ raise response if response.is_a?(Exception)
215
+ get_body_string(response).should =~ regex
214
216
  end
215
217
 
216
218
  Then /^there should not be a "([^\"]*)" library file$/ do |cassette_name|
@@ -2,20 +2,24 @@ require 'net/http'
2
2
 
3
3
  module Net
4
4
  class HTTP
5
- alias_method :request_without_vcr, :request
6
-
7
- def request(request, body = nil, &block)
5
+ def request_with_vcr(request, body = nil, &block)
8
6
  vcr_request = VCR::Request.from_net_http_request(self, request)
9
7
  response = request_without_vcr(request, body)
10
8
 
11
9
  match_attributes = (cass = VCR.current_cassette) ? cass.match_requests_on : VCR::RequestMatcher::DEFAULT_MATCH_ATTRIBUTES
12
10
  if started? && !VCR.http_stubbing_adapter.request_stubbed?(vcr_request, match_attributes)
13
11
  VCR.record_http_interaction VCR::HTTPInteraction.new(vcr_request, VCR::Response.from_net_http_response(response))
14
- response.extend VCR::Net::HTTPResponse # "unwind" the response
12
+
13
+ if VCR.http_stubbing_adapter.should_unwind_response?(response)
14
+ response.extend VCR::Net::HTTPResponse # "unwind" the response
15
+ end
15
16
  end
16
17
 
17
18
  yield response if block_given?
18
19
  response
19
20
  end
21
+
22
+ alias request_without_vcr request
23
+ alias request request_with_vcr
20
24
  end
21
25
  end
@@ -12,29 +12,19 @@
12
12
  module VCR
13
13
  module Net
14
14
  module HTTPResponse
15
- def self.extended(object)
16
- object.instance_variable_set(:@__orig_body_for_vcr__, object.instance_variable_get(:@body))
17
- end
18
-
19
15
  def read_body(dest = nil, &block)
20
- if @__orig_body_for_vcr__
21
- if dest && block
22
- raise ArgumentError.new("both arg and block given for HTTP method")
23
- elsif dest
24
- dest << @__orig_body_for_vcr__
25
- elsif block
26
- @body = ::Net::ReadAdapter.new(block)
27
- @body << @__orig_body_for_vcr__
28
- @body
29
- else
30
- @body = @__orig_body_for_vcr__
31
- end
32
- else
33
- super
16
+ return super if @__read_body_previously_called
17
+ return @body if dest.nil? && block.nil?
18
+ raise ArgumentError.new("both arg and block given for HTTP method") if dest && block
19
+
20
+ if @body
21
+ dest ||= ::Net::ReadAdapter.new(block)
22
+ dest << @body
23
+ @body = dest
34
24
  end
35
25
  ensure
36
26
  # allow subsequent calls to #read_body to proceed as normal, without our hack...
37
- @__orig_body_for_vcr__ = nil
27
+ @__read_body_previously_called = true
38
28
  end
39
29
  end
40
30
  end
@@ -64,6 +64,10 @@ module VCR
64
64
  @ignore_localhost
65
65
  end
66
66
 
67
+ def should_unwind_response?(response)
68
+ true
69
+ end
70
+
67
71
  private
68
72
 
69
73
  def version
@@ -59,6 +59,12 @@ module VCR
59
59
  ::WebMock::Config.instance.allow_localhost
60
60
  end
61
61
 
62
+ def should_unwind_response?(response)
63
+ class << response
64
+ !ancestors.include?(::WebMock::Net::HTTPResponse)
65
+ end
66
+ end
67
+
62
68
  private
63
69
 
64
70
  def version
@@ -3,7 +3,7 @@ module VCR
3
3
 
4
4
  def version
5
5
  @version ||= begin
6
- string = [1, 1, 1].join('.')
6
+ string = '1.1.2'
7
7
 
8
8
  def string.parts; VCR.version.split('.').map { |p| p.to_i }; end
9
9
  def string.major; parts[0]; end
@@ -1,85 +1,90 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
- describe "Net::HTTP Response extensions" do
4
- context 'extending an already read response' do
5
- # WebMock uses this extension, too, and to prevent it from automatically being included
6
- # (and hence, causing issues with this spec), we remove all callbacks for the duration
7
- # of this spec, since the absence of any callbacks will prevent WebMock from reading the response
8
- # and extending the response with the response extension.
9
- before(:all) do
10
- @orig_webmock_callbacks = ::WebMock::CallbackRegistry.callbacks.dup
11
- ::WebMock::CallbackRegistry.reset
3
+ describe VCR::Net::HTTPResponse do
4
+ # Disable the VCR/FakeWeb/WebMock Net::HTTP monkey patches so we don't have collisions with these specs
5
+ before(:all) { MonkeyPatches.disable! }
6
+ after(:all) { MonkeyPatches.enable! }
7
+
8
+ def self.it_allows_the_body_to_be_read(expected_regex)
9
+ it 'allows the body to be read using #body' do
10
+ response.body.to_s.should =~ expected_regex
12
11
  end
13
12
 
14
- after(:all) do
15
- @orig_webmock_callbacks.each do |cb|
16
- ::WebMock::CallbackRegistry.add_callback(cb[:options], cb[:block])
17
- end
13
+ it 'allows the body to be read using #read_body' do
14
+ response.read_body.to_s.should =~ expected_regex
18
15
  end
19
16
 
20
- def self.it_allows_the_body_to_be_read_again
21
- subject { @response.clone }
22
- let(:expected_regex) { /You have reached this web page by typing.*example\.com/ }
17
+ it 'allows the body to be read using #read_body with a block' do
18
+ yielded_body = ''
19
+ ret_val = response { |r| r.read_body { |s| yielded_body << s.to_s } }
20
+ yielded_body.should =~ expected_regex
21
+ end
23
22
 
24
- it 'allows the body to be read using #body' do
25
- subject.body.to_s.should =~ expected_regex
26
- end
23
+ it 'allows the body to be read by passing a destination string to #read_body' do
24
+ dest = ''
25
+ ret_val = response { |r| r.read_body(dest) }.body
26
+ dest.to_s.should =~ expected_regex
27
+ ret_val.to_s.should == dest
28
+ end
27
29
 
28
- it 'allows the body to be read using #read_body' do
29
- subject.read_body.to_s.should =~ expected_regex
30
- end
30
+ it 'raises an ArgumentError if both a destination string and a block is given to #read_body' do
31
+ dest = ''
32
+ expect { response { |r| r.read_body(dest) { |s| } } }.should raise_error(ArgumentError, 'both arg and block given for HTTP method')
33
+ end
31
34
 
32
- it 'allows the body to be read using #read_body with a block' do
33
- yielded_body = ''
34
- ret_val = subject.read_body { |s| yielded_body << s }
35
- yielded_body.should =~ expected_regex
36
- ret_val.should be_instance_of(Net::ReadAdapter)
37
- end
35
+ it 'raises an IOError when #read_body is called twice with a block' do
36
+ response { |r| r.read_body { |s| } }
37
+ expect { response { |r| r.read_body { |s| } } }.to raise_error(IOError, /read_body called twice/)
38
+ end
38
39
 
39
- it 'allows the body to be read by passing a destination string to #read_body' do
40
- dest = ''
41
- ret_val = subject.read_body(dest)
42
- dest.should =~ expected_regex
43
- ret_val.should == dest
44
- end
40
+ it 'raises an IOError when #read_body is called twice with a destination string' do
41
+ dest = ''
42
+ response { |r| r.read_body(dest) }
43
+ expect { response { |r| r.read_body(dest) } }.to raise_error(IOError, /read_body called twice/)
44
+ end
45
+ end
45
46
 
46
- it 'raises an ArgumentError if both a destination string and a block is given to #read_body' do
47
- dest = ''
48
- expect { subject.read_body(dest) { |s| } }.should raise_error(ArgumentError, 'both arg and block given for HTTP method')
49
- end
47
+ { :get => /You have reached this web page by typing.*example\.com/, :head => /\A\z/ }.each do |http_verb, expected_body_regex|
48
+ context "for a #{http_verb.to_s.upcase} request" do
49
+ let(:http_verb_method) { :"request_#{http_verb}" }
50
50
 
51
- it 'raises an IOError when #read_body is called twice with a block' do
52
- subject.read_body { |s| }
53
- expect { subject.read_body { |s| } }.to raise_error(IOError, /read_body called twice/)
54
- end
51
+ def response(&block)
52
+ if @response && block
53
+ block.call(@response)
54
+ return @response
55
+ end
55
56
 
56
- it 'raises an IOError when #read_body is called twice with a destination string' do
57
- dest = ''
58
- subject.read_body(dest)
59
- expect { subject.read_body(dest) }.to raise_error(IOError, /read_body called twice/)
57
+ @response ||= begin
58
+ http = Net::HTTP.new('example.com', 80)
59
+ res = http.send(http_verb_method, '/', &block)
60
+ res.should_not be_a(VCR::Net::HTTPResponse)
61
+ res.should_not be_a(::WebMock::Net::HTTPResponse)
62
+ res
63
+ end
60
64
  end
61
- end
62
65
 
63
- context 'when the body has already been read using #read_body and a dest string' do
64
- before(:each) do
65
- http = Net::HTTP.new('example.com', 80)
66
- dest = ''
67
- @response = http.request_get('/') { |res| res.read_body(dest) }
68
- @response.extend VCR::Net::HTTPResponse
66
+ context 'when the body has not already been read' do
67
+ it_allows_the_body_to_be_read(expected_body_regex)
69
68
  end
70
69
 
71
- it_allows_the_body_to_be_read_again
72
- end
70
+ context 'when the body has already been read using #read_body and a dest string' do
71
+ before(:each) do
72
+ dest = ''
73
+ response { |res| res.read_body(dest) }
74
+ response.extend VCR::Net::HTTPResponse
75
+ end
73
76
 
74
- context 'when the body has already been read using #body' do
75
- before(:each) do
76
- http = Net::HTTP.new('example.com', 80)
77
- @response = http.request_get('/')
78
- @response.body
79
- @response.extend VCR::Net::HTTPResponse
77
+ it_allows_the_body_to_be_read(expected_body_regex)
80
78
  end
81
79
 
82
- it_allows_the_body_to_be_read_again
80
+ context 'when the body has already been read using #body' do
81
+ before(:each) do
82
+ response.body
83
+ response.extend VCR::Net::HTTPResponse
84
+ end
85
+
86
+ it_allows_the_body_to_be_read(expected_body_regex)
87
+ end
83
88
  end
84
89
  end
85
90
  end
@@ -3,6 +3,14 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
3
3
  describe VCR::HttpStubbingAdapters::FakeWeb do
4
4
  it_should_behave_like 'an http stubbing adapter', ['net/http'], [:method, :uri, :host, :path]
5
5
 
6
+ describe '#should_unwind_response?' do
7
+ let(:response) { ::Net::HTTPOK.new('1.1', 200, 'OK') }
8
+
9
+ it 'returns true' do
10
+ described_class.should_unwind_response?(response).should be_true
11
+ end
12
+ end
13
+
6
14
  describe '#check_version!' do
7
15
  disable_warnings
8
16
  before(:each) { @orig_version = FakeWeb::VERSION }
@@ -5,6 +5,19 @@ describe VCR::HttpStubbingAdapters::WebMock do
5
5
  %w[net/http patron httpclient em-http-request],
6
6
  [:method, :uri, :host, :path, :body, :headers]
7
7
 
8
+ describe '#should_unwind_response?' do
9
+ let(:response) { ::Net::HTTPOK.new('1.1', 200, 'OK') }
10
+
11
+ it 'returns true when the response has not been extended with WebMock::Net::HTTPResponse' do
12
+ described_class.should_unwind_response?(response).should be_true
13
+ end
14
+
15
+ it 'returns false when the response has been extended with WebMock::Net::HTTPResponse' do
16
+ response.extend WebMock::Net::HTTPResponse
17
+ described_class.should_unwind_response?(response).should be_false
18
+ end
19
+ end
20
+
8
21
  describe '#check_version!' do
9
22
  before(:each) { WebMock.should respond_to(:version) }
10
23
 
@@ -0,0 +1,70 @@
1
+ module MonkeyPatches
2
+ extend self
3
+
4
+ NET_HTTP_SINGLETON = class << Net::HTTP; self; end
5
+
6
+ MONKEY_PATCHES = [
7
+ [Net::BufferedIO, :initialize],
8
+ [Net::HTTP, :request],
9
+ [Net::HTTP, :connect],
10
+ [NET_HTTP_SINGLETON, :socket_type]
11
+ ]
12
+
13
+ def enable!
14
+ MONKEY_PATCHES.each do |mp|
15
+ realias mp.first, mp.last, :with_monkeypatches
16
+ end
17
+ end
18
+
19
+ def disable!
20
+ MONKEY_PATCHES.each do |mp|
21
+ realias mp.first, mp.last, :without_monkeypatches
22
+ end
23
+ end
24
+
25
+ def init
26
+ # capture the monkey patched definitions so we can realias to them in the future
27
+ MONKEY_PATCHES.each do |mp|
28
+ capture_method_definition(mp.first, mp.last, false)
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def capture_method_definition(klass, method, original)
35
+ klass.class_eval do
36
+ monkeypatch_methods = [
37
+ :with_vcr, :without_vcr,
38
+ :with_fakeweb, :without_fakeweb,
39
+ :with_webmock, :without_webmock
40
+ ].select do |m|
41
+ method_defined?(:"#{method}_#{m}")
42
+ end
43
+
44
+ if original
45
+ if monkeypatch_methods.size > 0
46
+ raise "The following monkeypatch methods have already been defined #{method}: #{monkey_patch_methods.inspect}"
47
+ end
48
+ alias_name = :"#{method}_without_monkeypatches"
49
+ else
50
+ if monkeypatch_methods.size == 0
51
+ raise "No monkey patch methods have been defined for #{method}"
52
+ end
53
+ alias_name = :"#{method}_with_monkeypatches"
54
+ end
55
+
56
+ alias_method alias_name, method
57
+ end
58
+ end
59
+
60
+ # capture the original method definitions before the monkey patches have been defined
61
+ # so we can realias to the originals in the future
62
+ MONKEY_PATCHES.each do |mp|
63
+ capture_method_definition(mp.first, mp.last, true)
64
+ end
65
+
66
+ def realias(klass, method, alias_extension)
67
+ klass.class_eval { alias_method method, :"#{method}_#{alias_extension}" }
68
+ end
69
+ end
70
+
@@ -2,6 +2,8 @@ require 'rubygems'
2
2
  require 'bundler'
3
3
  Bundler.setup
4
4
 
5
+ require 'monkey_patches'
6
+
5
7
  require 'patron' unless RUBY_PLATFORM =~ /java/
6
8
  require 'httpclient'
7
9
  require 'em-http-request' unless RUBY_PLATFORM =~ /java/
@@ -38,3 +40,6 @@ RSpec.configure do |config|
38
40
  config.filter_run :focus => true
39
41
  config.run_all_when_everything_filtered = true
40
42
  end
43
+
44
+ MonkeyPatches.init
45
+
@@ -17,14 +17,14 @@ Gem::Specification.new do |s|
17
17
  s.required_rubygems_version = '>= 1.3.5'
18
18
 
19
19
  {
20
- 'bundler' => '~> 1.0.0.rc6',
20
+ 'bundler' => '~> 1.0.0',
21
21
  'rake' => '~> 0.8.7',
22
22
 
23
23
  'rspec' => '~> 2.0.0.beta.20',
24
24
  'cucumber' => '~> 0.8.5',
25
25
 
26
26
  'fakeweb' => '~> 1.3.0',
27
- 'webmock' => '1.3.3',
27
+ 'webmock' => '~> 1.3.5',
28
28
 
29
29
  'httpclient' => '~> 2.1.5.2',
30
30
 
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: 17
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 1
9
- - 1
10
- version: 1.1.1
9
+ - 2
10
+ version: 1.1.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Myron Marston
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-26 00:00:00 -07:00
18
+ date: 2010-09-09 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -107,13 +107,12 @@ dependencies:
107
107
  requirements:
108
108
  - - ~>
109
109
  - !ruby/object:Gem::Version
110
- hash: 977940571
110
+ hash: 23
111
111
  segments:
112
112
  - 1
113
113
  - 0
114
114
  - 0
115
- - rc6
116
- version: 1.0.0.rc6
115
+ version: 1.0.0
117
116
  requirement: *id006
118
117
  type: :development
119
118
  name: bundler
@@ -154,14 +153,14 @@ dependencies:
154
153
  version_requirements: &id009 !ruby/object:Gem::Requirement
155
154
  none: false
156
155
  requirements:
157
- - - "="
156
+ - - ~>
158
157
  - !ruby/object:Gem::Version
159
- hash: 29
158
+ hash: 17
160
159
  segments:
161
160
  - 1
162
161
  - 3
163
- - 3
164
- version: 1.3.3
162
+ - 5
163
+ version: 1.3.5
165
164
  requirement: *id009
166
165
  type: :development
167
166
  name: webmock
@@ -284,6 +283,7 @@ files:
284
283
  - spec/fixtures/not_1.9.1/match_requests_on.yml
285
284
  - spec/http_stubbing_adapters/fakeweb_spec.rb
286
285
  - spec/http_stubbing_adapters/webmock_spec.rb
286
+ - spec/monkey_patches.rb
287
287
  - spec/request_matcher_spec.rb
288
288
  - spec/spec_helper.rb
289
289
  - spec/structs_spec.rb