vcr 2.1.0 → 2.1.1

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,6 +1,23 @@
1
1
  ## In git
2
2
 
3
- [Full Changelog](http://github.com/myronmarston/vcr/compare/v2.0.1...master)
3
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v2.1.1...master)
4
+
5
+ ## 2.1.1 (April 24, 2012)
6
+
7
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v2.1.0...v2.1.1)
8
+
9
+ * Fix `:use_scenario_name` cucumber tag option so that it works properly
10
+ with multiple scenarios. Thanks to [Brent Snook](https://github.com/brentsnook)
11
+ for reporting this bug.
12
+ * Fix `:use_scenario_name` cucumber tag option so that it only uses the
13
+ first line of the scenario feature name. Cucumber includes all of the
14
+ pre-amble text in the feature name but that can create a ridiculously
15
+ long cassette name. Thanks to [Brent Snook](https://github.com/brentsnook)
16
+ for reporting this bug.
17
+
18
+ ## 2.1.0 (April 19, 2012)
19
+
20
+ [Full Changelog](http://github.com/myronmarston/vcr/compare/v2.0.1...v.2.1.0)
4
21
 
5
22
  * Add new `:use_scenario_name` option to the cucumber tags API. This
6
23
  allows you to use a generic tag (such as `@vcr`) and have the
@@ -75,6 +75,10 @@ Feature: Usage with Cucumber
75
75
  """
76
76
  Feature: VCR example
77
77
 
78
+ Note: Cucumber treats the pre-amble as part of the feature name. When
79
+ using the :use_scenario_name option, VCR will only use the first line
80
+ of the feature name as the directory for the cassette.
81
+
78
82
  @localhost_request
79
83
  Scenario: tagged scenario
80
84
  When a request is made to "http://localhost:7777/localhost_request_1"
@@ -26,18 +26,23 @@ module VCR
26
26
  # @param [Array<String>] tag_names the cucumber scenario tags
27
27
  # @param [(optional) Hash] options the cassette options. Specify :use_scenario_name => true to automatically name the cassette according to the scenario name.
28
28
  def tags(*tag_names)
29
- options = tag_names.last.is_a?(::Hash) ? tag_names.pop : {}
29
+ original_options = tag_names.last.is_a?(::Hash) ? tag_names.pop : {}
30
30
  tag_names.each do |tag_name|
31
31
  tag_name = "@#{tag_name}" unless tag_name =~ /\A@/
32
- cassette_name = "cucumber_tags/#{tag_name.gsub(/\A@/, '')}"
33
32
 
34
33
  # It would be nice to use an Around hook here, but
35
34
  # cucumber has a bug: background steps do not run
36
35
  # within an around hook.
37
36
  # https://gist.github.com/652968
38
37
  @main_object.Before(tag_name) do |scenario|
39
- options = options.dup
40
- cassette_name = "#{scenario.feature.name}/#{scenario.name}" if options.delete(:use_scenario_name)
38
+ options = original_options.dup
39
+
40
+ cassette_name = if options.delete(:use_scenario_name)
41
+ "#{scenario.feature.name.split("\n").first}/#{scenario.name}"
42
+ else
43
+ "cucumber_tags/#{tag_name.gsub(/\A@/, '')}"
44
+ end
45
+
41
46
  VCR.insert_cassette(cassette_name, options)
42
47
  end
43
48
 
@@ -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.1.0'
13
+ string = '2.1.1'
14
14
 
15
15
  def string.parts
16
16
  split('.').map { |p| p.to_i }
@@ -4,8 +4,12 @@ describe VCR::CucumberTags do
4
4
  subject { described_class.new(self) }
5
5
  let(:before_blocks_for_tags) { {} }
6
6
  let(:after_blocks_for_tags) { {} }
7
- let(:current_scenario) { stub(:name => "My scenario name",
8
- :feature => stub(:name => "My feature name")) }
7
+
8
+ def scenario(name)
9
+ stub(:name => name, :feature => stub(:name => "My feature name\nThe preamble text is not included"))
10
+ end
11
+
12
+ let(:current_scenario) { scenario "My scenario name" }
9
13
 
10
14
  # define our own Before/After so we can test this in isolation from cucumber's implementation.
11
15
  def Before(tag, &block)
@@ -16,12 +20,12 @@ describe VCR::CucumberTags do
16
20
  after_blocks_for_tags[tag.sub('@', '')] = block
17
21
  end
18
22
 
19
- def test_tag(cassette_attribute, tag, expected_value)
23
+ def test_tag(cassette_attribute, tag, expected_value, scenario=current_scenario)
20
24
  VCR.current_cassette.should be_nil
21
25
 
22
- before_blocks_for_tags[tag].call(current_scenario)
26
+ before_blocks_for_tags[tag].call(scenario)
23
27
  VCR.current_cassette.send(cassette_attribute).should eq(expected_value)
24
- after_blocks_for_tags[tag].call(current_scenario)
28
+ after_blocks_for_tags[tag].call(scenario)
25
29
 
26
30
  VCR.current_cassette.should be_nil
27
31
  end
@@ -73,6 +77,13 @@ describe VCR::CucumberTags do
73
77
  original_options[:use_scenario_name].should eq(true)
74
78
  original_options[:record].should eq(:none)
75
79
  end
80
+
81
+ it "works properly when multiple scenarios use the tag" do
82
+ subject.send(tag_method, 'tag1', :use_scenario_name => true)
83
+
84
+ test_tag(:name, 'tag1', 'My feature name/Foo', scenario("Foo"))
85
+ test_tag(:name, 'tag1', 'My feature name/Bar', scenario("Bar"))
86
+ end
76
87
  end
77
88
  end
78
89
  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: 11
4
+ hash: 9
5
5
  prerelease:
6
6
  segments:
7
7
  - 2
8
8
  - 1
9
- - 0
10
- version: 2.1.0
9
+ - 1
10
+ version: 2.1.1
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-04-19 00:00:00 Z
18
+ date: 2012-04-25 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  version_requirements: &id001 !ruby/object:Gem::Requirement