vcr 2.2.4 → 2.2.5

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.
data/.travis.yml CHANGED
@@ -19,6 +19,8 @@ branches:
19
19
  - travis-testing
20
20
  matrix:
21
21
  allow_failures:
22
+ - rvm: jruby-18mode
22
23
  - rvm: jruby-19mode
23
24
  - rvm: rbx-19mode
25
+ - rvm: rbx-18mode
24
26
 
data/CHANGELOG.md CHANGED
@@ -1,3 +1,23 @@
1
+ ## 2.2.5 (September 7, 2012)
2
+
3
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v2.2.4...v2.2.5)
4
+
5
+ Enhancements:
6
+
7
+ * Include note about `debug_logger` option in error message for
8
+ unhandled HTTP requests. Thanks to [Jacob Green](https://github.com/Jacobkg)
9
+ for implementing this.
10
+
11
+ Bug Fixes:
12
+
13
+ * Fix another edge case bug on the excon adapter that was causing it
14
+ to mis-record in certain situations that used Excon's :expects option.
15
+ * Fix the `:use_scenario_name` cucumber tags option to work properly
16
+ with scenario outlines. Thanks to [Joe
17
+ Nelson](https://github.com/begriffs) and [Stephen
18
+ Anderson](https://github.com/bendycode) for the initial bug fixes and
19
+ [Jacob Green](https://github.com/Jacobkg) for some further improvements.
20
+
1
21
  ## 2.2.4 (July 19, 2012)
2
22
 
3
23
  [Full Changelog](http://github.com/myronmarston/vcr/compare/v2.2.3...v2.2.4)
data/README.md CHANGED
@@ -132,6 +132,8 @@ yard server --reload
132
132
  support.
133
133
  * [Wesley Beary](https://github.com/geemus) for help with [Excon](https://github.com/geemus/excon)
134
134
  support.
135
+ * [Jacob Green](https://github.com/Jacobkg) for help with ongoing VCR
136
+ maintenance.
135
137
 
136
138
  Thanks also to the following people who have contributed patches or helpful suggestions:
137
139
 
@@ -149,11 +151,14 @@ Thanks also to the following people who have contributed patches or helpful sugg
149
151
  * [Flaviu Simihaian](https://github.com/closedbracket)
150
152
  * [Gordon Wilson](https://github.com/gordoncww)
151
153
  * [Ingemar](https://github.com/ingemar)
154
+ * [Jacob Green](https://github.com/Jacobkg)
152
155
  * [Jeff Pollard](https://github.com/Fluxx)
156
+ * [Joe Nelson](https://github.com/begriffs)
157
+ * [Jonathan Tron](https://github.com/JonathanTron)
153
158
  * [Justin Smestad](https://github.com/jsmestad)
154
159
  * [Karl Baum](https://github.com/kbaum)
155
160
  * [Michael Lavrisha](https://github.com/vrish88)
156
- * [Mislav Marohnić](https://github.com/mislav)
161
+ * [Mislav Marohnić](https://github.com/mislav)
157
162
  * [Nathaniel Bibler](https://github.com/nbibler)
158
163
  * [Oliver Searle-Barnes](https://github.com/opsb)
159
164
  * [Omer Rauchwerger](https://github.com/rauchy)
@@ -161,6 +166,7 @@ Thanks also to the following people who have contributed patches or helpful sugg
161
166
  * [playupchris](https://github.com/playupchris)
162
167
  * [Ryan Bates](https://github.com/ryanb)
163
168
  * [Sathya Sekaran](https://github.com/sfsekaran)
169
+ * [Steven Anderson](https://github.com/bendycode)
164
170
  * [Tyler Hunt](https://github.com/tylerhunt)
165
171
  * [Wesley Beary](https://github.com/geemus)
166
172
 
@@ -6,6 +6,10 @@ Feature: Error for HTTP request made when no cassette is in use
6
6
  use. The error is helpful to pinpoint where HTTP requests are
7
7
  made so you can use a VCR cassette at that point in your code.
8
8
 
9
+ If you want insight about how VCR attempted to handle the request,
10
+ you can use the [debug\_logger](../configuration/debug-logging)
11
+ configuration option to log more details.
12
+
9
13
  If you want to allow an HTTP request to proceed as normal, you can
10
14
  set the [allow\_http\_connections\_when\_no\_cassette](../configuration/allow-http-connections-when-no-cassette)
11
15
  configuration option or you can temporarily turn VCR off:
@@ -27,6 +27,8 @@ Feature: Usage with Cucumber
27
27
  You can also have VCR name your cassettes automatically according to the feature
28
28
  and scenario name by providing :use_scenario_name => true to '#tag' or '#tags'.
29
29
  In this case, the cassette will be named "<feature_name>/<scenario_name>".
30
+ For scenario outlines, VCR will record one cassette per row, and the cassettes
31
+ will be named "<feature_name>/<scenario_name>/<row_name>.
30
32
 
31
33
  @exclude-jruby
32
34
  Scenario: Record HTTP interactions in a scenario by tagging it
@@ -93,6 +95,14 @@ Feature: Usage with Cucumber
93
95
  When a request is made to "http://localhost:7777/localhost_request_1"
94
96
  Then the response should be "Hello localhost_request_1"
95
97
 
98
+ @vcr
99
+ Scenario Outline: tagged scenario outline
100
+ When a request is made to "http://localhost:7777/localhost_request_1"
101
+ Then the response should be "Hello localhost_request_1"
102
+ Examples:
103
+ | key | value |
104
+ | foo | bar |
105
+
96
106
  @disallowed_1
97
107
  Scenario: tagged scenario
98
108
  When a request is made to "http://localhost:7777/allowed" within a cassette named "allowed"
@@ -105,7 +115,7 @@ Feature: Usage with Cucumber
105
115
  """
106
116
  And the directory "features/cassettes" does not exist
107
117
  When I run `cucumber WITH_SERVER=true features/vcr_example.feature`
108
- Then it should fail with "4 scenarios (2 failed, 2 passed)"
118
+ Then it should fail with "5 scenarios (2 failed, 3 passed)"
109
119
  And the output should contain each of the following:
110
120
  | An HTTP request has been made that VCR does not know how to handle: |
111
121
  | GET http://localhost:7777/disallowed_1 |
@@ -116,11 +126,12 @@ Feature: Usage with Cucumber
116
126
  And the file "features/cassettes/nested_cassette.yml" should contain "Hello nested_cassette"
117
127
  And the file "features/cassettes/allowed.yml" should contain "Hello allowed"
118
128
  And the file "features/cassettes/VCR_example/tagged_scenario.yml" should contain "Hello localhost_request_1"
129
+ And the file "features/cassettes/VCR_example/tagged_scenario_outline/_foo_bar_.yml" should contain "Hello localhost_request_1"
119
130
 
120
131
  # Run again without the server; we'll get the same responses because VCR
121
132
  # will replay the recorded responses.
122
133
  When I run `cucumber features/vcr_example.feature`
123
- Then it should fail with "4 scenarios (2 failed, 2 passed)"
134
+ Then it should fail with "5 scenarios (2 failed, 3 passed)"
124
135
  And the output should contain each of the following:
125
136
  | An HTTP request has been made that VCR does not know how to handle: |
126
137
  | GET http://localhost:7777/disallowed_1 |
@@ -131,3 +142,4 @@ Feature: Usage with Cucumber
131
142
  And the file "features/cassettes/nested_cassette.yml" should contain "Hello nested_cassette"
132
143
  And the file "features/cassettes/allowed.yml" should contain "Hello allowed"
133
144
  And the file "features/cassettes/VCR_example/tagged_scenario.yml" should contain "Hello localhost_request_1"
145
+ And the file "features/cassettes/VCR_example/tagged_scenario_outline/_foo_bar_.yml" should contain "Hello localhost_request_1"
data/lib/vcr/errors.rb CHANGED
@@ -183,6 +183,13 @@ module VCR
183
183
  "change your :match_requests_on cassette option to be more lenient",
184
184
  "or use a custom request matcher to allow it to match"],
185
185
  "https://www.relishapp.com/myronmarston/vcr/v/%s/docs/request-matching"
186
+ ],
187
+
188
+ :try_debug_logger => [
189
+ ["If you're surprised VCR is raising this error",
190
+ "and want insight about how VCR attempted to handle the request,",
191
+ "you can use the debug_logger configuraiton option to log more details"],
192
+ "https://www.relishapp.com/myronmarston/vcr/v/%s/docs/configuration/debug-logging"
186
193
  ]
187
194
  }
188
195
 
@@ -196,7 +203,7 @@ module VCR
196
203
  def suggestions
197
204
  return no_cassette_suggestions unless cassette = VCR.current_cassette
198
205
 
199
- [:use_new_episodes, :ignore_request].tap do |suggestions|
206
+ [:try_debug_logger, :use_new_episodes, :ignore_request].tap do |suggestions|
200
207
  suggestions.push(*record_mode_suggestion)
201
208
  suggestions << :allow_playback_repeats if cassette.http_interactions.has_used_interaction_matching?(request)
202
209
  suggestions.map! { |k| suggestion_for(k) }
@@ -205,7 +212,7 @@ module VCR
205
212
  end
206
213
 
207
214
  def no_cassette_suggestions
208
- [:use_a_cassette, :allow_http_connections_when_no_cassette, :ignore_request].map do |key|
215
+ [:try_debug_logger, :use_a_cassette, :allow_http_connections_when_no_cassette, :ignore_request].map do |key|
209
216
  suggestion_for(key)
210
217
  end
211
218
  end
@@ -2,7 +2,7 @@ require 'vcr/util/version_checker'
2
2
  require 'vcr/request_handler'
3
3
  require 'excon'
4
4
 
5
- VCR::VersionChecker.new('Excon', Excon::VERSION, '0.9.6', '0.15').check_version!
5
+ VCR::VersionChecker.new('Excon', Excon::VERSION, '0.9.6', '0.16').check_version!
6
6
 
7
7
  module VCR
8
8
  class LibraryHooks
@@ -46,22 +46,30 @@ module VCR
46
46
  end
47
47
  end
48
48
 
49
+ PARAMS_TO_DELETE = [:expects, :idempotent,
50
+ :instrumentor_name, :instrumentor,
51
+ :response_block, :request_block]
52
+
49
53
  def real_request_params
50
54
  # Excon supports a variety of options that affect how it handles failure
51
55
  # and retry; we don't want to use any options here--we just want to get
52
56
  # a raw response, and then the main request (with :mock => true) can
53
57
  # handle failure/retry on its own with its set options.
54
- params.merge(:mock => false, :retry_limit => 0).tap do |p|
55
- [:expects, :idempotent, :instrumentor_name, :instrumentor, :response_block, :request_block].each do |key|
56
- p.delete(key)
57
- end
58
- end
58
+ scrub_params_from params.merge(:mock => false, :retry_limit => 0)
59
59
  end
60
60
 
61
61
  def new_connection
62
62
  # Ensure the connection is constructed with the exact same args
63
63
  # that the orginal connection was constructed with.
64
- ::Excon::Connection.new(*params.fetch(:__construction_args))
64
+ args, options = params.fetch(:__construction_args)
65
+ options = scrub_params_from(options) if options.is_a?(Hash)
66
+ ::Excon::Connection.new(*[args, options].compact)
67
+ end
68
+
69
+ def scrub_params_from(hash)
70
+ hash = hash.dup
71
+ PARAMS_TO_DELETE.each { |key| hash.delete(key) }
72
+ hash
65
73
  end
66
74
 
67
75
  def perform_real_request
@@ -2,7 +2,7 @@ require 'vcr/util/version_checker'
2
2
  require 'vcr/request_handler'
3
3
  require 'typhoeus'
4
4
 
5
- VCR::VersionChecker.new('Typhoeus', Typhoeus::VERSION, '0.3.2', '0.3').check_version!
5
+ VCR::VersionChecker.new('Typhoeus', Typhoeus::VERSION, '0.3.2', '0.4').check_version!
6
6
 
7
7
  module VCR
8
8
  class LibraryHooks
@@ -40,7 +40,11 @@ module VCR
40
40
  options = original_options.dup
41
41
 
42
42
  cassette_name = if options.delete(:use_scenario_name)
43
- "#{scenario.feature.name.split("\n").first}/#{scenario.name}"
43
+ feature = scenario.respond_to?(:scenario_outline) ? scenario.scenario_outline.feature : scenario.feature
44
+ name = feature.name.split("\n").first
45
+ name << "/#{scenario.scenario_outline.name}" if scenario.respond_to?(:scenario_outline)
46
+ name << "/#{scenario.name}"
47
+ name
44
48
  else
45
49
  "cucumber_tags/#{tag_name.gsub(/\A@/, '')}"
46
50
  end
data/lib/vcr/version.rb CHANGED
@@ -10,7 +10,7 @@ module VCR
10
10
  # * `parts` [Array<Integer>] List of the version parts.
11
11
  def version
12
12
  @version ||= begin
13
- string = '2.2.4'
13
+ string = '2.2.5'
14
14
 
15
15
  def string.parts
16
16
  split('.').map { |p| p.to_i }
@@ -56,7 +56,7 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
56
56
  test_record_and_playback "with a complex escaped query param", "q=#{CGI.escape("A&(! 234k !@ kasdj232\#$ kjw35")}"
57
57
 
58
58
  it 'plays back an empty body response exactly as it was recorded (e.g. nil vs empty string)' do
59
- pending "awaiting an external fix", :if => library.gsub('_', '/').include?('net/http') do
59
+ pending "awaiting an external fix", :if => library.gsub('_', '/').include?('net/http') && library_hook_name != :webmock do
60
60
  get_body = lambda do
61
61
  VCR.use_cassette('empty_body', :record => :once) do
62
62
  get_body_object make_http_request(:get, "http://localhost:#{VCR::SinatraApp.port}/204")
@@ -42,6 +42,10 @@ module VCR
42
42
  it 'does not double-insert the asterisks for the bullet points' do
43
43
  message.should_not match(/\s+\*\s+\*/)
44
44
  end
45
+
46
+ it 'mentions the debug logging configuration option' do
47
+ message.should include('debug_logger')
48
+ end
45
49
  end
46
50
 
47
51
  context 'when there is a current cassette' do
@@ -122,6 +126,12 @@ module VCR
122
126
  message.should include('2 HTTP interactions ')
123
127
  end
124
128
  end
129
+
130
+ it 'mentions the debug logging configuration option' do
131
+ VCR.use_cassette('example', :record => :new_episodes) do
132
+ message.should include('debug_logger')
133
+ end
134
+ end
125
135
  end
126
136
  end
127
137
  end
@@ -61,6 +61,15 @@ describe VCR::CucumberTags do
61
61
  test_tag(:name, 'tag1', 'My feature name/My scenario name')
62
62
  end
63
63
 
64
+ it "makes a unique name for each element of scenario outline" do
65
+ subject.send(tag_method, 'tag1', :use_scenario_name => true)
66
+
67
+ scenario_with_outline = stub(:name => "My row name",
68
+ :scenario_outline => stub(:feature => stub(:name => "My feature name\nThe preamble text is not included"),
69
+ :name => "My scenario outline name"))
70
+ test_tag(:name, 'tag1', 'My feature name/My scenario outline name/My row name', scenario_with_outline)
71
+ end
72
+
64
73
  it 'does not pass :use_scenario_name along the given options to the cassette' do
65
74
  subject.send(tag_method, 'tag1', :use_scenario_name => true)
66
75
 
data/vcr.gemspec CHANGED
@@ -29,7 +29,7 @@ Gem::Specification.new do |s|
29
29
  s.add_development_dependency 'fakeweb', '~> 1.3.0'
30
30
  s.add_development_dependency 'webmock', '~> 1.8.3'
31
31
 
32
- s.add_development_dependency 'faraday', '~> 0.8.0.rc2'
32
+ s.add_development_dependency 'faraday', '~> 0.8'
33
33
  s.add_development_dependency 'httpclient', '~> 2.2'
34
34
  s.add_development_dependency 'excon', '>= 0.11.0', '< 1.0'
35
35
 
@@ -45,7 +45,7 @@ Gem::Specification.new do |s|
45
45
  s.add_development_dependency 'patron', '~> 0.4.15'
46
46
  s.add_development_dependency 'em-http-request', '~> 1.0.2'
47
47
  s.add_development_dependency 'curb', '~> 0.8.0'
48
- s.add_development_dependency 'typhoeus', '~> 0.3.3'
48
+ s.add_development_dependency 'typhoeus', '>= 0.3.3', '< 0.5.0'
49
49
  s.add_development_dependency 'yajl-ruby', '~> 1.1.0'
50
50
  end
51
51
  end
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: 15
4
+ hash: 13
5
5
  prerelease:
6
6
  segments:
7
7
  - 2
8
8
  - 2
9
- - 4
10
- version: 2.2.4
9
+ - 5
10
+ version: 2.2.5
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: 2012-07-20 00:00:00 Z
18
+ date: 2012-09-08 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  version_requirements: &id001 !ruby/object:Gem::Requirement
@@ -150,14 +150,11 @@ dependencies:
150
150
  requirements:
151
151
  - - ~>
152
152
  - !ruby/object:Gem::Version
153
- hash: 15424145
153
+ hash: 27
154
154
  segments:
155
155
  - 0
156
156
  - 8
157
- - 0
158
- - rc
159
- - 2
160
- version: 0.8.0.rc2
157
+ version: "0.8"
161
158
  name: faraday
162
159
  type: :development
163
160
  prerelease: false
@@ -364,7 +361,7 @@ dependencies:
364
361
  version_requirements: &id022 !ruby/object:Gem::Requirement
365
362
  none: false
366
363
  requirements:
367
- - - ~>
364
+ - - ">="
368
365
  - !ruby/object:Gem::Version
369
366
  hash: 21
370
367
  segments:
@@ -372,6 +369,14 @@ dependencies:
372
369
  - 3
373
370
  - 3
374
371
  version: 0.3.3
372
+ - - <
373
+ - !ruby/object:Gem::Version
374
+ hash: 11
375
+ segments:
376
+ - 0
377
+ - 5
378
+ - 0
379
+ version: 0.5.0
375
380
  name: typhoeus
376
381
  type: :development
377
382
  prerelease: false