vcr 2.4.0 → 2.5.0
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.
- checksums.yaml +15 -0
 - data/.gitignore +3 -0
 - data/.travis.yml +2 -0
 - data/CHANGELOG.md +31 -0
 - data/Gemfile +1 -2
 - data/Gemfile.lock +63 -46
 - data/README.md +5 -2
 - data/features/cassettes/allow_unused_http_interactions.feature +1 -1
 - data/features/cassettes/automatic_re_recording.feature +1 -1
 - data/features/cassettes/decompress.feature +3 -3
 - data/features/cassettes/dynamic_erb.feature +2 -2
 - data/features/cassettes/exclusive.feature +1 -1
 - data/features/cassettes/naming.feature +1 -1
 - data/features/cassettes/no_cassette.feature +6 -3
 - data/features/cassettes/persistence.feature +1 -1
 - data/features/cassettes/update_content_length_header.feature +1 -1
 - data/features/configuration/allow_http_connections_when_no_cassette.feature +1 -1
 - data/features/configuration/cassette_library_dir.feature +1 -1
 - data/features/configuration/debug_logging.feature +5 -5
 - data/features/configuration/filter_sensitive_data.feature +2 -2
 - data/features/configuration/hook_into.feature +4 -7
 - data/features/getting_started.md +2 -2
 - data/features/hooks/before_playback.feature +5 -5
 - data/features/hooks/before_record.feature +5 -5
 - data/features/middleware/rack.feature +2 -2
 - data/features/record_modes/all.feature +1 -1
 - data/features/record_modes/new_episodes.feature +1 -1
 - data/features/record_modes/none.feature +1 -1
 - data/features/record_modes/once.feature +1 -1
 - data/features/request_matching/custom_matcher.feature +1 -1
 - data/features/request_matching/headers.feature +0 -2
 - data/features/request_matching/playback_repeats.feature +1 -1
 - data/features/request_matching/uri_without_param.feature +1 -1
 - data/features/support/env.rb +1 -0
 - data/features/test_frameworks/cucumber.feature +8 -8
 - data/features/test_frameworks/rspec_macro.feature +2 -2
 - data/features/test_frameworks/rspec_metadata.feature +1 -1
 - data/gemfiles/typhoeus_old.gemfile +1 -1
 - data/gemfiles/typhoeus_old.gemfile.lock +31 -57
 - data/lib/vcr/cassette/migrator.rb +8 -1
 - data/lib/vcr/configuration.rb +9 -2
 - data/lib/vcr/library_hooks/excon.rb +2 -184
 - data/lib/vcr/library_hooks/typhoeus.rb +1 -1
 - data/lib/vcr/library_hooks/typhoeus_0.4.rb +4 -0
 - data/lib/vcr/library_hooks/webmock.rb +1 -1
 - data/lib/vcr/middleware/excon.rb +226 -0
 - data/lib/vcr/version.rb +1 -1
 - data/spec/acceptance/threading_spec.rb +28 -0
 - data/spec/monkey_patches.rb +3 -7
 - data/spec/quality_spec.rb +1 -1
 - data/spec/spec_helper.rb +7 -4
 - data/spec/support/http_library_adapters.rb +4 -3
 - data/spec/support/shared_example_groups/excon.rb +22 -0
 - data/spec/support/shared_example_groups/hook_into_http_library.rb +46 -46
 - data/spec/support/shared_example_groups/request_hooks.rb +8 -8
 - data/spec/vcr/cassette/erb_renderer_spec.rb +5 -5
 - data/spec/vcr/cassette/http_interaction_list_spec.rb +52 -40
 - data/spec/vcr/cassette/migrator_spec.rb +11 -11
 - data/spec/vcr/cassette/persisters/file_system_spec.rb +11 -11
 - data/spec/vcr/cassette/persisters_spec.rb +2 -2
 - data/spec/vcr/cassette/serializers_spec.rb +13 -12
 - data/spec/vcr/cassette_spec.rb +58 -58
 - data/spec/vcr/configuration_spec.rb +43 -31
 - data/spec/vcr/deprecations_spec.rb +3 -3
 - data/spec/vcr/errors_spec.rb +25 -25
 - data/spec/vcr/extensions/net_http_response_spec.rb +7 -7
 - data/spec/vcr/library_hooks/excon_spec.rb +7 -85
 - data/spec/vcr/library_hooks/fakeweb_spec.rb +15 -13
 - data/spec/vcr/library_hooks/faraday_spec.rb +4 -4
 - data/spec/vcr/library_hooks/typhoeus_0.4_spec.rb +5 -0
 - data/spec/vcr/library_hooks/typhoeus_spec.rb +3 -3
 - data/spec/vcr/library_hooks/webmock_spec.rb +13 -5
 - data/spec/vcr/library_hooks_spec.rb +9 -9
 - data/spec/vcr/middleware/faraday_spec.rb +10 -10
 - data/spec/vcr/middleware/rack_spec.rb +20 -15
 - data/spec/vcr/request_ignorer_spec.rb +3 -3
 - data/spec/vcr/request_matcher_registry_spec.rb +88 -61
 - data/spec/vcr/structs_spec.rb +85 -85
 - data/spec/vcr/test_frameworks/cucumber_spec.rb +7 -7
 - data/spec/vcr/test_frameworks/rspec_spec.rb +10 -10
 - data/spec/vcr/util/hooks_spec.rb +20 -20
 - data/spec/vcr/util/internet_connection_spec.rb +2 -2
 - data/spec/vcr_spec.rb +50 -48
 - data/vcr.gemspec +4 -4
 - metadata +308 -372
 
| 
         @@ -6,8 +6,8 @@ shared_examples_for "request hooks" do |library_hook_name, request_type| 
     | 
|
| 
       6 
6 
     | 
    
         
             
              end
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
              def assert_expected_response(response)
         
     | 
| 
       9 
     | 
    
         
            -
                response.status.code. 
     | 
| 
       10 
     | 
    
         
            -
                response.body. 
     | 
| 
      
 9 
     | 
    
         
            +
                expect(response.status.code).to eq(200)
         
     | 
| 
      
 10 
     | 
    
         
            +
                expect(response.body).to eq('FOO!')
         
     | 
| 
       11 
11 
     | 
    
         
             
              end
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
              [:before_http_request, :after_http_request].each do |hook|
         
     | 
| 
         @@ -16,7 +16,7 @@ shared_examples_for "request hooks" do |library_hook_name, request_type| 
     | 
|
| 
       16 
16 
     | 
    
         
             
                  VCR.configuration.send(hook) { |r| call_count += 1 }
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
                  make_request
         
     | 
| 
       19 
     | 
    
         
            -
                  call_count. 
     | 
| 
      
 19 
     | 
    
         
            +
                  expect(call_count).to eq(1)
         
     | 
| 
       20 
20 
     | 
    
         
             
                end
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         
             
                specify "the #{hook} hook yields the request" do
         
     | 
| 
         @@ -24,19 +24,19 @@ shared_examples_for "request hooks" do |library_hook_name, request_type| 
     | 
|
| 
       24 
24 
     | 
    
         
             
                  VCR.configuration.send(hook) { |r| request = r }
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
26 
     | 
    
         
             
                  make_request
         
     | 
| 
       27 
     | 
    
         
            -
                  request.method. 
     | 
| 
       28 
     | 
    
         
            -
                  request.uri. 
     | 
| 
      
 27 
     | 
    
         
            +
                  expect(request.method).to be(:get)
         
     | 
| 
      
 28 
     | 
    
         
            +
                  expect(request.uri).to eq(request_url)
         
     | 
| 
       29 
29 
     | 
    
         
             
                end
         
     | 
| 
       30 
30 
     | 
    
         | 
| 
       31 
31 
     | 
    
         
             
                specify "the #{hook} hook is not called if the library hook is disabled" do
         
     | 
| 
       32 
     | 
    
         
            -
                  VCR.library_hooks. 
     | 
| 
      
 32 
     | 
    
         
            +
                  expect(VCR.library_hooks).to respond_to(:disabled?)
         
     | 
| 
       33 
33 
     | 
    
         
             
                  VCR.library_hooks.stub(:disabled? => true)
         
     | 
| 
       34 
34 
     | 
    
         | 
| 
       35 
35 
     | 
    
         
             
                  hook_called = false
         
     | 
| 
       36 
36 
     | 
    
         
             
                  VCR.configuration.send(hook) { |r| hook_called = true }
         
     | 
| 
       37 
37 
     | 
    
         | 
| 
       38 
38 
     | 
    
         
             
                  make_request(:disabled)
         
     | 
| 
       39 
     | 
    
         
            -
                  hook_called. 
     | 
| 
      
 39 
     | 
    
         
            +
                  expect(hook_called).to be_false
         
     | 
| 
       40 
40 
     | 
    
         
             
                end
         
     | 
| 
       41 
41 
     | 
    
         | 
| 
       42 
42 
     | 
    
         
             
                specify "the #type of the yielded request given to the #{hook} hook is #{request_type}" do
         
     | 
| 
         @@ -44,7 +44,7 @@ shared_examples_for "request hooks" do |library_hook_name, request_type| 
     | 
|
| 
       44 
44 
     | 
    
         
             
                  VCR.configuration.send(hook) { |r| request = r }
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
       46 
46 
     | 
    
         
             
                  make_request
         
     | 
| 
       47 
     | 
    
         
            -
                  request.type. 
     | 
| 
      
 47 
     | 
    
         
            +
                  expect(request.type).to be(request_type)
         
     | 
| 
       48 
48 
     | 
    
         
             
                end
         
     | 
| 
       49 
49 
     | 
    
         
             
              end
         
     | 
| 
       50 
50 
     | 
    
         | 
| 
         @@ -11,14 +11,14 @@ describe VCR::Cassette::ERBRenderer do 
     | 
|
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
                context 'when ERB is disabled' do
         
     | 
| 
       13 
13 
     | 
    
         
             
                  it 'returns the given template' do
         
     | 
| 
       14 
     | 
    
         
            -
                    render(no_vars_content, false). 
     | 
| 
       15 
     | 
    
         
            -
                    render(no_vars_content, nil). 
     | 
| 
      
 14 
     | 
    
         
            +
                    expect(render(no_vars_content, false)).to eq(no_vars_content)
         
     | 
| 
      
 15 
     | 
    
         
            +
                    expect(render(no_vars_content, nil)).to eq(no_vars_content)
         
     | 
| 
       16 
16 
     | 
    
         
             
                  end
         
     | 
| 
       17 
17 
     | 
    
         
             
                end
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
       19 
19 
     | 
    
         
             
                context 'when ERB is enabled but no variables are passed' do
         
     | 
| 
       20 
20 
     | 
    
         
             
                  it 'renders the file content as ERB' do
         
     | 
| 
       21 
     | 
    
         
            -
                    render(no_vars_content, true). 
     | 
| 
      
 21 
     | 
    
         
            +
                    expect(render(no_vars_content, true)).to eq("7. Some ERB")
         
     | 
| 
       22 
22 
     | 
    
         
             
                  end
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
24 
     | 
    
         
             
                  it 'raises an appropriate error when the ERB template needs variables' do
         
     | 
| 
         @@ -31,13 +31,13 @@ describe VCR::Cassette::ERBRenderer do 
     | 
|
| 
       31 
31 
     | 
    
         
             
                  end
         
     | 
| 
       32 
32 
     | 
    
         | 
| 
       33 
33 
     | 
    
         
             
                  it 'gracefully handles the template being nil' do
         
     | 
| 
       34 
     | 
    
         
            -
                    render(nil, true). 
     | 
| 
      
 34 
     | 
    
         
            +
                    expect(render(nil, true)).to be_nil
         
     | 
| 
       35 
35 
     | 
    
         
             
                  end
         
     | 
| 
       36 
36 
     | 
    
         
             
                end
         
     | 
| 
       37 
37 
     | 
    
         | 
| 
       38 
38 
     | 
    
         
             
                context 'when ERB is enabled and variables are passed' do
         
     | 
| 
       39 
39 
     | 
    
         
             
                  it 'renders the file content as ERB with the passed variables' do
         
     | 
| 
       40 
     | 
    
         
            -
                    render(vars_content, :var1 => 'foo', :var2 => 'bar'). 
     | 
| 
      
 40 
     | 
    
         
            +
                    expect(render(vars_content, :var1 => 'foo', :var2 => 'bar')).to eq('foo. ERB with Vars! bar')
         
     | 
| 
       41 
41 
     | 
    
         
             
                  end
         
     | 
| 
       42 
42 
     | 
    
         | 
| 
       43 
43 
     | 
    
         
             
                  it 'raises an appropriate error when one or more of the needed variables are not passed' do
         
     | 
| 
         @@ -47,41 +47,41 @@ module VCR 
     | 
|
| 
       47 
47 
     | 
    
         | 
| 
       48 
48 
     | 
    
         
             
                  describe "#has_used_interaction_matching?" do
         
     | 
| 
       49 
49 
     | 
    
         
             
                    it 'returns false when no interactions have been used' do
         
     | 
| 
       50 
     | 
    
         
            -
                      list. 
     | 
| 
      
 50 
     | 
    
         
            +
                      expect(list).not_to have_used_interaction_matching(request_with(:method => :put))
         
     | 
| 
       51 
51 
     | 
    
         
             
                    end
         
     | 
| 
       52 
52 
     | 
    
         | 
| 
       53 
53 
     | 
    
         
             
                    it 'returns true when there is a matching used interaction (even if there is also an unused one that matches)' do
         
     | 
| 
       54 
54 
     | 
    
         
             
                      list.response_for(request_with(:method => :post))
         
     | 
| 
       55 
     | 
    
         
            -
                      list. 
     | 
| 
      
 55 
     | 
    
         
            +
                      expect(list).to have_used_interaction_matching(request_with(:method => :post))
         
     | 
| 
       56 
56 
     | 
    
         
             
                    end
         
     | 
| 
       57 
57 
     | 
    
         | 
| 
       58 
58 
     | 
    
         
             
                    it 'returns false when none of the used interactions match' do
         
     | 
| 
       59 
59 
     | 
    
         
             
                      list.response_for(request_with(:method => :put))
         
     | 
| 
       60 
     | 
    
         
            -
                      list. 
     | 
| 
      
 60 
     | 
    
         
            +
                      expect(list).not_to have_used_interaction_matching(request_with(:method => :post))
         
     | 
| 
       61 
61 
     | 
    
         
             
                    end
         
     | 
| 
       62 
62 
     | 
    
         
             
                  end
         
     | 
| 
       63 
63 
     | 
    
         | 
| 
       64 
64 
     | 
    
         
             
                  describe "#remaining_unused_interaction_count" do
         
     | 
| 
       65 
65 
     | 
    
         
             
                    it 'returns the number of unused interactions' do
         
     | 
| 
       66 
     | 
    
         
            -
                      list.remaining_unused_interaction_count. 
     | 
| 
      
 66 
     | 
    
         
            +
                      expect(list.remaining_unused_interaction_count).to eq(3)
         
     | 
| 
       67 
67 
     | 
    
         | 
| 
       68 
68 
     | 
    
         
             
                      list.response_for(request_with(:method => :get))
         
     | 
| 
       69 
     | 
    
         
            -
                      list.remaining_unused_interaction_count. 
     | 
| 
      
 69 
     | 
    
         
            +
                      expect(list.remaining_unused_interaction_count).to eq(3)
         
     | 
| 
       70 
70 
     | 
    
         | 
| 
       71 
71 
     | 
    
         
             
                      list.response_for(request_with(:method => :put))
         
     | 
| 
       72 
     | 
    
         
            -
                      list.remaining_unused_interaction_count. 
     | 
| 
      
 72 
     | 
    
         
            +
                      expect(list.remaining_unused_interaction_count).to eq(2)
         
     | 
| 
       73 
73 
     | 
    
         | 
| 
       74 
74 
     | 
    
         
             
                      list.response_for(request_with(:method => :put))
         
     | 
| 
       75 
     | 
    
         
            -
                      list.remaining_unused_interaction_count. 
     | 
| 
      
 75 
     | 
    
         
            +
                      expect(list.remaining_unused_interaction_count).to eq(2)
         
     | 
| 
       76 
76 
     | 
    
         | 
| 
       77 
77 
     | 
    
         
             
                      list.response_for(request_with(:method => :post))
         
     | 
| 
       78 
     | 
    
         
            -
                      list.remaining_unused_interaction_count. 
     | 
| 
      
 78 
     | 
    
         
            +
                      expect(list.remaining_unused_interaction_count).to eq(1)
         
     | 
| 
       79 
79 
     | 
    
         | 
| 
       80 
80 
     | 
    
         
             
                      list.response_for(request_with(:method => :post))
         
     | 
| 
       81 
     | 
    
         
            -
                      list.remaining_unused_interaction_count. 
     | 
| 
      
 81 
     | 
    
         
            +
                      expect(list.remaining_unused_interaction_count).to eq(0)
         
     | 
| 
       82 
82 
     | 
    
         | 
| 
       83 
83 
     | 
    
         
             
                      list.response_for(request_with(:method => :post))
         
     | 
| 
       84 
     | 
    
         
            -
                      list.remaining_unused_interaction_count. 
     | 
| 
      
 84 
     | 
    
         
            +
                      expect(list.remaining_unused_interaction_count).to eq(0)
         
     | 
| 
       85 
85 
     | 
    
         
             
                    end
         
     | 
| 
       86 
86 
     | 
    
         
             
                  end
         
     | 
| 
       87 
87 
     | 
    
         | 
| 
         @@ -102,22 +102,22 @@ module VCR 
     | 
|
| 
       102 
102 
     | 
    
         | 
| 
       103 
103 
     | 
    
         
             
                  describe "has_interaction_matching?" do
         
     | 
| 
       104 
104 
     | 
    
         
             
                    it 'returns false when the list is empty' do
         
     | 
| 
       105 
     | 
    
         
            -
                      HTTPInteractionList.new([], [:method]). 
     | 
| 
      
 105 
     | 
    
         
            +
                      expect(HTTPInteractionList.new([], [:method])).not_to have_interaction_matching(stub)
         
     | 
| 
       106 
106 
     | 
    
         
             
                    end
         
     | 
| 
       107 
107 
     | 
    
         | 
| 
       108 
108 
     | 
    
         
             
                    it 'returns false when there is no matching interaction' do
         
     | 
| 
       109 
     | 
    
         
            -
                      list. 
     | 
| 
      
 109 
     | 
    
         
            +
                      expect(list).not_to have_interaction_matching(request_with(:method => :get))
         
     | 
| 
       110 
110 
     | 
    
         
             
                    end
         
     | 
| 
       111 
111 
     | 
    
         | 
| 
       112 
112 
     | 
    
         
             
                    it 'returns true when there is a matching interaction' do
         
     | 
| 
       113 
     | 
    
         
            -
                      list. 
     | 
| 
      
 113 
     | 
    
         
            +
                      expect(list).to have_interaction_matching(request_with(:method => :post))
         
     | 
| 
       114 
114 
     | 
    
         
             
                    end
         
     | 
| 
       115 
115 
     | 
    
         | 
| 
       116 
116 
     | 
    
         
             
                    it 'does not consume the interactions when they match' do
         
     | 
| 
       117 
     | 
    
         
            -
                      list. 
     | 
| 
       118 
     | 
    
         
            -
                      list.remaining_unused_interaction_count. 
     | 
| 
       119 
     | 
    
         
            -
                      list. 
     | 
| 
       120 
     | 
    
         
            -
                      list.remaining_unused_interaction_count. 
     | 
| 
      
 117 
     | 
    
         
            +
                      expect(list).to have_interaction_matching(request_with(:method => :post))
         
     | 
| 
      
 118 
     | 
    
         
            +
                      expect(list.remaining_unused_interaction_count).to eq(3)
         
     | 
| 
      
 119 
     | 
    
         
            +
                      expect(list).to have_interaction_matching(request_with(:method => :post))
         
     | 
| 
      
 120 
     | 
    
         
            +
                      expect(list.remaining_unused_interaction_count).to eq(3)
         
     | 
| 
       121 
121 
     | 
    
         
             
                    end
         
     | 
| 
       122 
122 
     | 
    
         | 
| 
       123 
123 
     | 
    
         
             
                    it 'invokes each matcher block to find the matching interaction' do
         
     | 
| 
         @@ -131,15 +131,15 @@ module VCR 
     | 
|
| 
       131 
131 
     | 
    
         
             
                        interaction('response', :method => :put)
         
     | 
| 
       132 
132 
     | 
    
         
             
                      ], [:foo, :bar, :baz])
         
     | 
| 
       133 
133 
     | 
    
         | 
| 
       134 
     | 
    
         
            -
                      list. 
     | 
| 
       135 
     | 
    
         
            -
                      list. 
     | 
| 
      
 134 
     | 
    
         
            +
                      expect(list).not_to have_interaction_matching(request_with(:method => :post))
         
     | 
| 
      
 135 
     | 
    
         
            +
                      expect(list).to     have_interaction_matching(request_with(:method => :post))
         
     | 
| 
       136 
136 
     | 
    
         
             
                    end
         
     | 
| 
       137 
137 
     | 
    
         | 
| 
       138 
138 
     | 
    
         
             
                    it "delegates to the parent list when it can't find a matching interaction" do
         
     | 
| 
       139 
139 
     | 
    
         
             
                      parent_list = mock(:has_interaction_matching? => true)
         
     | 
| 
       140 
     | 
    
         
            -
                      HTTPInteractionList.new( [], [:method], false, parent_list). 
     | 
| 
      
 140 
     | 
    
         
            +
                      expect(HTTPInteractionList.new( [], [:method], false, parent_list)).to have_interaction_matching(stub)
         
     | 
| 
       141 
141 
     | 
    
         
             
                      parent_list = mock(:has_interaction_matching? => false)
         
     | 
| 
       142 
     | 
    
         
            -
                      HTTPInteractionList.new( [], [:method], false, parent_list). 
     | 
| 
      
 142 
     | 
    
         
            +
                      expect(HTTPInteractionList.new( [], [:method], false, parent_list)).not_to have_interaction_matching(stub)
         
     | 
| 
       143 
143 
     | 
    
         
             
                    end
         
     | 
| 
       144 
144 
     | 
    
         | 
| 
       145 
145 
     | 
    
         
             
                    context 'when allow_playback_repeats is set to true' do
         
     | 
| 
         @@ -148,9 +148,11 @@ module VCR 
     | 
|
| 
       148 
148 
     | 
    
         
             
                      it 'considers used interactions' do
         
     | 
| 
       149 
149 
     | 
    
         
             
                        list.response_for(request_with(:method => :put))
         
     | 
| 
       150 
150 
     | 
    
         | 
| 
       151 
     | 
    
         
            -
                        10.times.map  
     | 
| 
      
 151 
     | 
    
         
            +
                        results = 10.times.map do
         
     | 
| 
       152 
152 
     | 
    
         
             
                          list.has_interaction_matching?(request_with(:method => :put))
         
     | 
| 
       153 
     | 
    
         
            -
                         
     | 
| 
      
 153 
     | 
    
         
            +
                        end
         
     | 
| 
      
 154 
     | 
    
         
            +
             
     | 
| 
      
 155 
     | 
    
         
            +
                        expect(results).to eq([true] * 10)
         
     | 
| 
       154 
156 
     | 
    
         
             
                      end
         
     | 
| 
       155 
157 
     | 
    
         
             
                    end
         
     | 
| 
       156 
158 
     | 
    
         | 
| 
         @@ -160,25 +162,29 @@ module VCR 
     | 
|
| 
       160 
162 
     | 
    
         
             
                      it 'does not consider used interactions' do
         
     | 
| 
       161 
163 
     | 
    
         
             
                        list.response_for(request_with(:method => :put))
         
     | 
| 
       162 
164 
     | 
    
         | 
| 
       163 
     | 
    
         
            -
                        10.times.map  
     | 
| 
      
 165 
     | 
    
         
            +
                        result = 10.times.map do
         
     | 
| 
       164 
166 
     | 
    
         
             
                          list.has_interaction_matching?(request_with(:method => :put))
         
     | 
| 
       165 
     | 
    
         
            -
                         
     | 
| 
      
 167 
     | 
    
         
            +
                        end
         
     | 
| 
      
 168 
     | 
    
         
            +
             
     | 
| 
      
 169 
     | 
    
         
            +
                        expect(result).to eq([false] * 10)
         
     | 
| 
       166 
170 
     | 
    
         
             
                      end
         
     | 
| 
       167 
171 
     | 
    
         
             
                    end
         
     | 
| 
       168 
172 
     | 
    
         
             
                  end
         
     | 
| 
       169 
173 
     | 
    
         | 
| 
       170 
174 
     | 
    
         
             
                  describe "#response_for" do
         
     | 
| 
       171 
175 
     | 
    
         
             
                    it 'returns nil when the list is empty' do
         
     | 
| 
       172 
     | 
    
         
            -
                      HTTPInteractionList.new([], [:method]).response_for(stub). 
     | 
| 
      
 176 
     | 
    
         
            +
                      expect(HTTPInteractionList.new([], [:method]).response_for(stub)).to respond_with(nil)
         
     | 
| 
       173 
177 
     | 
    
         
             
                    end
         
     | 
| 
       174 
178 
     | 
    
         | 
| 
       175 
179 
     | 
    
         
             
                    it 'returns nil when there is no matching interaction' do
         
     | 
| 
       176 
     | 
    
         
            -
                      HTTPInteractionList.new([
         
     | 
| 
      
 180 
     | 
    
         
            +
                      response = HTTPInteractionList.new([
         
     | 
| 
       177 
181 
     | 
    
         
             
                        interaction('foo', :method => :post),
         
     | 
| 
       178 
182 
     | 
    
         
             
                        interaction('foo', :method => :put)
         
     | 
| 
       179 
183 
     | 
    
         
             
                      ], [:method]).response_for(
         
     | 
| 
       180 
184 
     | 
    
         
             
                        request_with(:method => :get)
         
     | 
| 
       181 
     | 
    
         
            -
                      ) 
     | 
| 
      
 185 
     | 
    
         
            +
                      )
         
     | 
| 
      
 186 
     | 
    
         
            +
             
     | 
| 
      
 187 
     | 
    
         
            +
                      expect(response).to respond_with(nil)
         
     | 
| 
       182 
188 
     | 
    
         
             
                    end
         
     | 
| 
       183 
189 
     | 
    
         | 
| 
       184 
190 
     | 
    
         
             
                    it 'returns the first matching interaction' do
         
     | 
| 
         @@ -188,7 +194,7 @@ module VCR 
     | 
|
| 
       188 
194 
     | 
    
         
             
                        interaction('post response 2', :method => :post)
         
     | 
| 
       189 
195 
     | 
    
         
             
                      ], [:method])
         
     | 
| 
       190 
196 
     | 
    
         | 
| 
       191 
     | 
    
         
            -
                      list.response_for(request_with(:method => :post)). 
     | 
| 
      
 197 
     | 
    
         
            +
                      expect(list.response_for(request_with(:method => :post))).to respond_with("post response 1")
         
     | 
| 
       192 
198 
     | 
    
         
             
                    end
         
     | 
| 
       193 
199 
     | 
    
         | 
| 
       194 
200 
     | 
    
         
             
                    it 'invokes each matcher block to find the matching interaction' do
         
     | 
| 
         @@ -202,20 +208,22 @@ module VCR 
     | 
|
| 
       202 
208 
     | 
    
         
             
                        interaction('response', :method => :put)
         
     | 
| 
       203 
209 
     | 
    
         
             
                      ], [:foo, :bar, :baz])
         
     | 
| 
       204 
210 
     | 
    
         | 
| 
       205 
     | 
    
         
            -
                      list.response_for(request_with(:method => :post)). 
     | 
| 
       206 
     | 
    
         
            -
                      list.response_for(request_with(:method => :post)). 
     | 
| 
      
 211 
     | 
    
         
            +
                      expect(list.response_for(request_with(:method => :post))).to respond_with(nil)
         
     | 
| 
      
 212 
     | 
    
         
            +
                      expect(list.response_for(request_with(:method => :post))).to respond_with('response')
         
     | 
| 
       207 
213 
     | 
    
         
             
                    end
         
     | 
| 
       208 
214 
     | 
    
         | 
| 
       209 
215 
     | 
    
         
             
                    it "delegates to the parent list when it can't find a matching interaction" do
         
     | 
| 
       210 
216 
     | 
    
         
             
                      parent_list = mock(:response_for => response('parent'))
         
     | 
| 
       211 
     | 
    
         
            -
                      HTTPInteractionList.new(
         
     | 
| 
      
 217 
     | 
    
         
            +
                      result = HTTPInteractionList.new(
         
     | 
| 
       212 
218 
     | 
    
         
             
                        [], [:method], false, parent_list
         
     | 
| 
       213 
     | 
    
         
            -
                      ).response_for(stub) 
     | 
| 
      
 219 
     | 
    
         
            +
                      ).response_for(stub)
         
     | 
| 
      
 220 
     | 
    
         
            +
             
     | 
| 
      
 221 
     | 
    
         
            +
                      expect(result).to respond_with('parent')
         
     | 
| 
       214 
222 
     | 
    
         
             
                    end
         
     | 
| 
       215 
223 
     | 
    
         | 
| 
       216 
224 
     | 
    
         
             
                    it 'consumes the first matching interaction so that it will not be used again' do
         
     | 
| 
       217 
     | 
    
         
            -
                      list.response_for(request_with(:method => :post)).body. 
     | 
| 
       218 
     | 
    
         
            -
                      list.response_for(request_with(:method => :post)).body. 
     | 
| 
      
 225 
     | 
    
         
            +
                      expect(list.response_for(request_with(:method => :post)).body).to eq("post response 1")
         
     | 
| 
      
 226 
     | 
    
         
            +
                      expect(list.response_for(request_with(:method => :post)).body).to eq("post response 2")
         
     | 
| 
       219 
227 
     | 
    
         
             
                    end
         
     | 
| 
       220 
228 
     | 
    
         | 
| 
       221 
229 
     | 
    
         
             
                    context 'when allow_playback_repeats is set to true' do
         
     | 
| 
         @@ -224,10 +232,12 @@ module VCR 
     | 
|
| 
       224 
232 
     | 
    
         
             
                      it 'continues to return the response from the last matching interaction when there are no more' do
         
     | 
| 
       225 
233 
     | 
    
         
             
                        list.response_for(request_with(:method => :post))
         
     | 
| 
       226 
234 
     | 
    
         | 
| 
       227 
     | 
    
         
            -
                        10.times.map  
     | 
| 
      
 235 
     | 
    
         
            +
                        results = 10.times.map do
         
     | 
| 
       228 
236 
     | 
    
         
             
                          response = list.response_for(request_with(:method => :post))
         
     | 
| 
       229 
237 
     | 
    
         
             
                          response ? response.body : nil
         
     | 
| 
       230 
     | 
    
         
            -
                         
     | 
| 
      
 238 
     | 
    
         
            +
                        end
         
     | 
| 
      
 239 
     | 
    
         
            +
             
     | 
| 
      
 240 
     | 
    
         
            +
                        expect(results).to eq(["post response 2"] * 10)
         
     | 
| 
       231 
241 
     | 
    
         
             
                      end
         
     | 
| 
       232 
242 
     | 
    
         
             
                    end
         
     | 
| 
       233 
243 
     | 
    
         | 
| 
         @@ -238,16 +248,18 @@ module VCR 
     | 
|
| 
       238 
248 
     | 
    
         
             
                        list.response_for(request_with(:method => :post))
         
     | 
| 
       239 
249 
     | 
    
         
             
                        list.response_for(request_with(:method => :post))
         
     | 
| 
       240 
250 
     | 
    
         | 
| 
       241 
     | 
    
         
            -
                        10.times.map  
     | 
| 
      
 251 
     | 
    
         
            +
                        results = 10.times.map do
         
     | 
| 
       242 
252 
     | 
    
         
             
                          list.response_for(request_with(:method => :post))
         
     | 
| 
       243 
     | 
    
         
            -
                         
     | 
| 
      
 253 
     | 
    
         
            +
                        end
         
     | 
| 
      
 254 
     | 
    
         
            +
             
     | 
| 
      
 255 
     | 
    
         
            +
                        expect(results).to eq([nil] * 10)
         
     | 
| 
       244 
256 
     | 
    
         
             
                      end
         
     | 
| 
       245 
257 
     | 
    
         
             
                    end
         
     | 
| 
       246 
258 
     | 
    
         | 
| 
       247 
259 
     | 
    
         
             
                    it 'does not modify the original interaction array the list was initialized with' do
         
     | 
| 
       248 
260 
     | 
    
         
             
                      original_dup = original_list_array.dup
         
     | 
| 
       249 
261 
     | 
    
         
             
                      list.response_for(request_with(:method => :post))
         
     | 
| 
       250 
     | 
    
         
            -
                      original_list_array. 
     | 
| 
      
 262 
     | 
    
         
            +
                      expect(original_list_array).to eq original_dup
         
     | 
| 
       251 
263 
     | 
    
         
             
                    end
         
     | 
| 
       252 
264 
     | 
    
         
             
                  end
         
     | 
| 
       253 
265 
     | 
    
         
             
                end
         
     | 
| 
         @@ -136,36 +136,36 @@ EOF 
     | 
|
| 
       136 
136 
     | 
    
         
             
              it 'migrates a cassette from the 1.x to 2.x format' do
         
     | 
| 
       137 
137 
     | 
    
         
             
                File.open(file_name, 'w') { |f| f.write(original_contents) }
         
     | 
| 
       138 
138 
     | 
    
         
             
                subject.migrate!
         
     | 
| 
       139 
     | 
    
         
            -
                YAML.load_file(file_name). 
     | 
| 
       140 
     | 
    
         
            -
                output. 
     | 
| 
      
 139 
     | 
    
         
            +
                expect(YAML.load_file(file_name)).to eq(YAML.load(updated_contents))
         
     | 
| 
      
 140 
     | 
    
         
            +
                expect(output).to match(/Migrated example.yml/)
         
     | 
| 
       141 
141 
     | 
    
         
             
              end
         
     | 
| 
       142 
142 
     | 
    
         | 
| 
       143 
143 
     | 
    
         
             
              it 'ignores files that do not contain arrays' do
         
     | 
| 
       144 
144 
     | 
    
         
             
                File.open(file_name, 'w') { |f| f.write(true.to_yaml) }
         
     | 
| 
       145 
145 
     | 
    
         
             
                subject.migrate!
         
     | 
| 
       146 
     | 
    
         
            -
                File.read(file_name). 
     | 
| 
       147 
     | 
    
         
            -
                output. 
     | 
| 
      
 146 
     | 
    
         
            +
                expect(File.read(file_name)).to eq(true.to_yaml)
         
     | 
| 
      
 147 
     | 
    
         
            +
                expect(output).to match(/Ignored example.yml since it does not appear to be a valid VCR 1.x cassette/)
         
     | 
| 
       148 
148 
     | 
    
         
             
              end
         
     | 
| 
       149 
149 
     | 
    
         | 
| 
       150 
150 
     | 
    
         
             
              it 'ignores files that contain YAML arrays of other things' do
         
     | 
| 
       151 
151 
     | 
    
         
             
                File.open(file_name, 'w') { |f| f.write([{}, {}].to_yaml) }
         
     | 
| 
       152 
152 
     | 
    
         
             
                subject.migrate!
         
     | 
| 
       153 
     | 
    
         
            -
                File.read(file_name). 
     | 
| 
       154 
     | 
    
         
            -
                output. 
     | 
| 
      
 153 
     | 
    
         
            +
                expect(File.read(file_name)).to eq([{}, {}].to_yaml)
         
     | 
| 
      
 154 
     | 
    
         
            +
                expect(output).to match(/Ignored example.yml since it does not appear to be a valid VCR 1.x cassette/)
         
     | 
| 
       155 
155 
     | 
    
         
             
              end
         
     | 
| 
       156 
156 
     | 
    
         | 
| 
       157 
157 
     | 
    
         
             
              it 'ignores URIs that have sensitive data substitutions' do
         
     | 
| 
       158 
158 
     | 
    
         
             
                modified_contents = original_contents.gsub('example.com', '<HOST>')
         
     | 
| 
       159 
159 
     | 
    
         
             
                File.open(file_name, 'w') { |f| f.write(modified_contents) }
         
     | 
| 
       160 
160 
     | 
    
         
             
                subject.migrate!
         
     | 
| 
       161 
     | 
    
         
            -
                YAML.load_file(file_name). 
     | 
| 
      
 161 
     | 
    
         
            +
                expect(YAML.load_file(file_name)).to eq(YAML.load(updated_contents.gsub('example.com', '<HOST>:80')))
         
     | 
| 
       162 
162 
     | 
    
         
             
              end
         
     | 
| 
       163 
163 
     | 
    
         | 
| 
       164 
164 
     | 
    
         
             
              it 'ignores files that are empty' do
         
     | 
| 
       165 
165 
     | 
    
         
             
                File.open(file_name, 'w') { |f| f.write('') }
         
     | 
| 
       166 
166 
     | 
    
         
             
                subject.migrate!
         
     | 
| 
       167 
     | 
    
         
            -
                File.read(file_name). 
     | 
| 
       168 
     | 
    
         
            -
                output. 
     | 
| 
      
 167 
     | 
    
         
            +
                expect(File.read(file_name)).to eq('')
         
     | 
| 
      
 168 
     | 
    
         
            +
                expect(output).to match(/Ignored example.yml since it could not be parsed as YAML/)
         
     | 
| 
       169 
169 
     | 
    
         
             
              end
         
     | 
| 
       170 
170 
     | 
    
         | 
| 
       171 
171 
     | 
    
         
             
              shared_examples_for "ignoring invalid YAML" do
         
     | 
| 
         @@ -174,8 +174,8 @@ EOF 
     | 
|
| 
       174 
174 
     | 
    
         
             
                  modified_contents = modified_contents.gsub(/\z/, "<% end %>")
         
     | 
| 
       175 
175 
     | 
    
         
             
                  File.open(file_name, 'w') { |f| f.write(modified_contents) }
         
     | 
| 
       176 
176 
     | 
    
         
             
                  subject.migrate!
         
     | 
| 
       177 
     | 
    
         
            -
                  File.read(file_name). 
     | 
| 
       178 
     | 
    
         
            -
                  output. 
     | 
| 
      
 177 
     | 
    
         
            +
                  expect(File.read(file_name)).to eq(modified_contents)
         
     | 
| 
      
 178 
     | 
    
         
            +
                  expect(output).to match(/Ignored example.yml since it could not be parsed as YAML/)
         
     | 
| 
       179 
179 
     | 
    
         
             
                end
         
     | 
| 
       180 
180 
     | 
    
         
             
              end
         
     | 
| 
       181 
181 
     | 
    
         | 
| 
         @@ -10,51 +10,51 @@ module VCR 
     | 
|
| 
       10 
10 
     | 
    
         
             
                    describe "#[]" do
         
     | 
| 
       11 
11 
     | 
    
         
             
                      it 'reads from the given file, relative to the configured storage location' do
         
     | 
| 
       12 
12 
     | 
    
         
             
                        File.open(FileSystem.storage_location + '/foo.txt', 'w') { |f| f.write('1234') }
         
     | 
| 
       13 
     | 
    
         
            -
                        FileSystem["foo.txt"]. 
     | 
| 
      
 13 
     | 
    
         
            +
                        expect(FileSystem["foo.txt"]).to eq("1234")
         
     | 
| 
       14 
14 
     | 
    
         
             
                      end
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
                      it 'handles directories in the given file name' do
         
     | 
| 
       17 
17 
     | 
    
         
             
                        FileUtils.mkdir_p FileSystem.storage_location + '/a'
         
     | 
| 
       18 
18 
     | 
    
         
             
                        File.open(FileSystem.storage_location + '/a/b', 'w') { |f| f.write('1234') }
         
     | 
| 
       19 
     | 
    
         
            -
                        FileSystem["a/b"]. 
     | 
| 
      
 19 
     | 
    
         
            +
                        expect(FileSystem["a/b"]).to eq("1234")
         
     | 
| 
       20 
20 
     | 
    
         
             
                      end
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         
             
                      it 'returns nil if the file does not exist' do
         
     | 
| 
       23 
     | 
    
         
            -
                        FileSystem["non_existant_file"]. 
     | 
| 
      
 23 
     | 
    
         
            +
                        expect(FileSystem["non_existant_file"]).to be_nil
         
     | 
| 
       24 
24 
     | 
    
         
             
                      end
         
     | 
| 
       25 
25 
     | 
    
         
             
                    end
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
       27 
27 
     | 
    
         
             
                    describe "#[]=" do
         
     | 
| 
       28 
28 
     | 
    
         
             
                      it 'writes the given file contents to the given file name' do
         
     | 
| 
       29 
     | 
    
         
            -
                        File.exist?(FileSystem.storage_location + '/foo.txt'). 
     | 
| 
      
 29 
     | 
    
         
            +
                        expect(File.exist?(FileSystem.storage_location + '/foo.txt')).to be_false
         
     | 
| 
       30 
30 
     | 
    
         
             
                        FileSystem["foo.txt"] = "bar"
         
     | 
| 
       31 
     | 
    
         
            -
                        File.read(FileSystem.storage_location + '/foo.txt'). 
     | 
| 
      
 31 
     | 
    
         
            +
                        expect(File.read(FileSystem.storage_location + '/foo.txt')).to eq("bar")
         
     | 
| 
       32 
32 
     | 
    
         
             
                      end
         
     | 
| 
       33 
33 
     | 
    
         | 
| 
       34 
34 
     | 
    
         
             
                      it 'creates any needed intermediary directories' do
         
     | 
| 
       35 
     | 
    
         
            -
                        File.exist?(FileSystem.storage_location + '/a'). 
     | 
| 
      
 35 
     | 
    
         
            +
                        expect(File.exist?(FileSystem.storage_location + '/a')).to be_false
         
     | 
| 
       36 
36 
     | 
    
         
             
                        FileSystem["a/b"] = "bar"
         
     | 
| 
       37 
     | 
    
         
            -
                        File.read(FileSystem.storage_location + '/a/b'). 
     | 
| 
      
 37 
     | 
    
         
            +
                        expect(File.read(FileSystem.storage_location + '/a/b')).to eq("bar")
         
     | 
| 
       38 
38 
     | 
    
         
             
                      end
         
     | 
| 
       39 
39 
     | 
    
         
             
                    end
         
     | 
| 
       40 
40 
     | 
    
         | 
| 
       41 
41 
     | 
    
         
             
                    describe "#absolute_path_to_file" do
         
     | 
| 
       42 
42 
     | 
    
         
             
                      it "returns the absolute path to the given relative file based on the storage location" do
         
     | 
| 
       43 
43 
     | 
    
         
             
                        expected = File.join(FileSystem.storage_location, "bar/bazz.json")
         
     | 
| 
       44 
     | 
    
         
            -
                        FileSystem.absolute_path_to_file("bar/bazz.json"). 
     | 
| 
      
 44 
     | 
    
         
            +
                        expect(FileSystem.absolute_path_to_file("bar/bazz.json")).to eq(expected)
         
     | 
| 
       45 
45 
     | 
    
         
             
                      end
         
     | 
| 
       46 
46 
     | 
    
         | 
| 
       47 
47 
     | 
    
         
             
                      it "returns nil if the storage_location is not set" do
         
     | 
| 
       48 
48 
     | 
    
         
             
                        FileSystem.storage_location = nil
         
     | 
| 
       49 
     | 
    
         
            -
                        FileSystem.absolute_path_to_file("bar/bazz.json"). 
     | 
| 
      
 49 
     | 
    
         
            +
                        expect(FileSystem.absolute_path_to_file("bar/bazz.json")).to be_nil
         
     | 
| 
       50 
50 
     | 
    
         
             
                      end
         
     | 
| 
       51 
51 
     | 
    
         | 
| 
       52 
52 
     | 
    
         
             
                      it "sanitizes the file name" do
         
     | 
| 
       53 
53 
     | 
    
         
             
                        expected = File.join(FileSystem.storage_location, "_t_i-t_1_2_f_n.json")
         
     | 
| 
       54 
     | 
    
         
            -
                        FileSystem.absolute_path_to_file("\nt \t!  i-t_1.2_f n.json"). 
     | 
| 
      
 54 
     | 
    
         
            +
                        expect(FileSystem.absolute_path_to_file("\nt \t!  i-t_1.2_f n.json")).to eq(expected)
         
     | 
| 
       55 
55 
     | 
    
         | 
| 
       56 
56 
     | 
    
         
             
                        expected = File.join(FileSystem.storage_location, "a_1/b")
         
     | 
| 
       57 
     | 
    
         
            -
                        FileSystem.absolute_path_to_file("a 1/b"). 
     | 
| 
      
 57 
     | 
    
         
            +
                        expect(FileSystem.absolute_path_to_file("a 1/b")).to eq(expected)
         
     | 
| 
       58 
58 
     | 
    
         
             
                      end
         
     | 
| 
       59 
59 
     | 
    
         
             
                    end
         
     | 
| 
       60 
60 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -12,7 +12,7 @@ module VCR 
     | 
|
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
                      it 'overrides the existing persister' do
         
     | 
| 
       14 
14 
     | 
    
         
             
                        subject[:foo] = :new_persister
         
     | 
| 
       15 
     | 
    
         
            -
                        subject[:foo]. 
     | 
| 
      
 15 
     | 
    
         
            +
                        expect(subject[:foo]).to be(:new_persister)
         
     | 
| 
       16 
16 
     | 
    
         
             
                      end
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
                      it 'warns that there is a name collision' do
         
     | 
| 
         @@ -30,7 +30,7 @@ module VCR 
     | 
|
| 
       30 
30 
     | 
    
         
             
                    end
         
     | 
| 
       31 
31 
     | 
    
         | 
| 
       32 
32 
     | 
    
         
             
                    it 'returns the named persister' do
         
     | 
| 
       33 
     | 
    
         
            -
                      subject[:file_system]. 
     | 
| 
      
 33 
     | 
    
         
            +
                      expect(subject[:file_system]).to be(VCR::Cassette::Persisters::FileSystem)
         
     | 
| 
       34 
34 
     | 
    
         
             
                    end
         
     | 
| 
       35 
35 
     | 
    
         
             
                  end
         
     | 
| 
       36 
36 
     | 
    
         
             
                end
         
     | 
| 
         @@ -1,6 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'support/ruby_interpreter'
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'vcr/cassette/serializers'
         
     | 
| 
       3 
3 
     | 
    
         
             
            require 'multi_json'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       4 
5 
     | 
    
         
             
            begin
         
     | 
| 
       5 
6 
     | 
    
         
             
              require 'psych' # ensure psych is loaded for these tests if its available
         
     | 
| 
       6 
7 
     | 
    
         
             
            rescue LoadError
         
     | 
| 
         @@ -26,22 +27,22 @@ module VCR 
     | 
|
| 
       26 
27 
     | 
    
         
             
                    context "the #{name} serializer" do
         
     | 
| 
       27 
28 
     | 
    
         
             
                      it 'lazily loads the serializer' do
         
     | 
| 
       28 
29 
     | 
    
         
             
                        serializers = subject.instance_variable_get(:@serializers)
         
     | 
| 
       29 
     | 
    
         
            -
                        serializers. 
     | 
| 
       30 
     | 
    
         
            -
                        subject[name]. 
     | 
| 
       31 
     | 
    
         
            -
                        serializers. 
     | 
| 
      
 30 
     | 
    
         
            +
                        expect(serializers).not_to have_key(name)
         
     | 
| 
      
 31 
     | 
    
         
            +
                        expect(subject[name]).not_to be_nil
         
     | 
| 
      
 32 
     | 
    
         
            +
                        expect(serializers).to have_key(name)
         
     | 
| 
       32 
33 
     | 
    
         
             
                      end if lazily_loaded
         
     | 
| 
       33 
34 
     | 
    
         | 
| 
       34 
35 
     | 
    
         
             
                      it "returns '#{file_extension}' as the file extension" do
         
     | 
| 
       35 
     | 
    
         
            -
                        serializer.file_extension. 
     | 
| 
      
 36 
     | 
    
         
            +
                        expect(serializer.file_extension).to eq(file_extension)
         
     | 
| 
       36 
37 
     | 
    
         
             
                      end
         
     | 
| 
       37 
38 
     | 
    
         | 
| 
       38 
39 
     | 
    
         
             
                      it "can serialize and deserialize a hash" do
         
     | 
| 
       39 
40 
     | 
    
         
             
                        hash = { "a" => 7, "nested" => { "hash" => [1, 2, 3] }}
         
     | 
| 
       40 
41 
     | 
    
         
             
                        serialized = serializer.serialize(hash)
         
     | 
| 
       41 
     | 
    
         
            -
                        serialized. 
     | 
| 
       42 
     | 
    
         
            -
                        serialized. 
     | 
| 
      
 42 
     | 
    
         
            +
                        expect(serialized).not_to eq(hash)
         
     | 
| 
      
 43 
     | 
    
         
            +
                        expect(serialized).to be_a(String)
         
     | 
| 
       43 
44 
     | 
    
         
             
                        deserialized = serializer.deserialize(serialized)
         
     | 
| 
       44 
     | 
    
         
            -
                        deserialized. 
     | 
| 
      
 45 
     | 
    
         
            +
                        expect(deserialized).to eq(hash)
         
     | 
| 
       45 
46 
     | 
    
         
             
                      end
         
     | 
| 
       46 
47 
     | 
    
         
             
                    end
         
     | 
| 
       47 
48 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -118,7 +119,7 @@ module VCR 
     | 
|
| 
       118 
119 
     | 
    
         | 
| 
       119 
120 
     | 
    
         
             
                      it 'overrides the existing serializer' do
         
     | 
| 
       120 
121 
     | 
    
         
             
                        subject[:foo] = :new_serializer
         
     | 
| 
       121 
     | 
    
         
            -
                        subject[:foo]. 
     | 
| 
      
 122 
     | 
    
         
            +
                        expect(subject[:foo]).to be(:new_serializer)
         
     | 
| 
       122 
123 
     | 
    
         
             
                      end
         
     | 
| 
       123 
124 
     | 
    
         | 
| 
       124 
125 
     | 
    
         
             
                      it 'warns that there is a name collision' do
         
     | 
| 
         @@ -136,7 +137,7 @@ module VCR 
     | 
|
| 
       136 
137 
     | 
    
         
             
                    end
         
     | 
| 
       137 
138 
     | 
    
         | 
| 
       138 
139 
     | 
    
         
             
                    it 'returns the named serializer' do
         
     | 
| 
       139 
     | 
    
         
            -
                      subject[:yaml]. 
     | 
| 
      
 140 
     | 
    
         
            +
                      expect(subject[:yaml]).to be(VCR::Cassette::Serializers::YAML)
         
     | 
| 
       140 
141 
     | 
    
         
             
                    end
         
     | 
| 
       141 
142 
     | 
    
         
             
                  end
         
     | 
| 
       142 
143 
     | 
    
         | 
| 
         @@ -147,7 +148,7 @@ module VCR 
     | 
|
| 
       147 
148 
     | 
    
         
             
                    it 'serializes things using pysch even if syck is configured as the default YAML engine' do
         
     | 
| 
       148 
149 
     | 
    
         
             
                      ::YAML::ENGINE.yamler = 'syck'
         
     | 
| 
       149 
150 
     | 
    
         
             
                      serialized = subject[:psych].serialize(problematic_syck_string)
         
     | 
| 
       150 
     | 
    
         
            -
                      subject[:psych].deserialize(serialized). 
     | 
| 
      
 151 
     | 
    
         
            +
                      expect(subject[:psych].deserialize(serialized)).to eq(problematic_syck_string)
         
     | 
| 
       151 
152 
     | 
    
         
             
                    end if defined?(::Psych)
         
     | 
| 
       152 
153 
     | 
    
         | 
| 
       153 
154 
     | 
    
         
             
                    it 'raises an error if psych cannot be loaded' do
         
     | 
| 
         @@ -159,8 +160,8 @@ module VCR 
     | 
|
| 
       159 
160 
     | 
    
         
             
                    it 'forcibly serializes things using syck even if psych is the currently configured YAML engine' do
         
     | 
| 
       160 
161 
     | 
    
         
             
                      ::YAML::ENGINE.yamler = 'psych'
         
     | 
| 
       161 
162 
     | 
    
         
             
                      serialized = subject[:syck].serialize(problematic_syck_string)
         
     | 
| 
       162 
     | 
    
         
            -
                      subject[:syck].deserialize(serialized). 
     | 
| 
       163 
     | 
    
         
            -
                    end if defined?(::Psych) && (RUBY_INTERPRETER != :jruby)
         
     | 
| 
      
 163 
     | 
    
         
            +
                      expect(subject[:syck].deserialize(serialized)).not_to eq(problematic_syck_string)
         
     | 
| 
      
 164 
     | 
    
         
            +
                    end if defined?(::Psych) && (RUBY_INTERPRETER != :jruby) && (RUBY_VERSION.to_f < 2.0)
         
     | 
| 
       164 
165 
     | 
    
         
             
                  end
         
     | 
| 
       165 
166 
     | 
    
         
             
                end
         
     | 
| 
       166 
167 
     | 
    
         
             
              end
         
     |