vcr 1.3.1 → 1.3.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.
- data/CHANGELOG.md +14 -2
- data/Gemfile +3 -0
- data/Gemfile.lock +20 -2
- data/README.md +6 -1
- data/Rakefile +6 -44
- data/benchmarks/http_stubbing_libraries.rb +4 -4
- data/cucumber.yml +14 -0
- data/features/README.md +21 -0
- data/features/cassettes/automatic_re_recording.feature +68 -0
- data/features/cassettes/dynamic_erb.feature +90 -0
- data/features/cassettes/format.feature +81 -0
- data/features/cassettes/no_cassette.feature +38 -0
- data/features/cassettes/record_modes/all.feature +78 -0
- data/features/cassettes/record_modes/new_episodes.feature +71 -0
- data/features/cassettes/record_modes/none.feature +65 -0
- data/features/cassettes/request_matching.feature +379 -0
- data/features/configuration/cassette_library_dir.feature +28 -0
- data/features/configuration/default_cassette_options.feature +80 -0
- data/features/configuration/ignore_localhost.feature +103 -0
- data/features/configuration/stub_with.feature +164 -0
- data/features/http_libraries/net_http.feature +137 -0
- data/features/step_definitions/cli_steps.rb +82 -0
- data/features/support/aruba_workaround/aruba_patches.rb +36 -0
- data/features/support/aruba_workaround/background_process.rb +4 -0
- data/features/support/env.rb +16 -102
- data/features/support/http_lib_filters.rb +37 -0
- data/features/support/vcr_cucumber_helpers.rb +34 -0
- data/features/test_frameworks/cucumber.feature +109 -0
- data/features/test_frameworks/rspec.feature +110 -0
- data/features/test_frameworks/shoulda.feature +64 -0
- data/features/test_frameworks/test_unit.feature +46 -0
- data/lib/vcr/cassette.rb +1 -1
- data/lib/vcr/structs.rb +64 -13
- data/lib/vcr/version.rb +1 -1
- data/{FullBuildRakeFile → script/FullBuildRakeFile} +0 -0
- data/script/full_build +1 -0
- data/spec/extensions/net_http_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- data/spec/structs_spec.rb +47 -16
- data/spec/support/vcr_localhost_server.rb +11 -5
- data/vcr.gemspec +2 -1
- metadata +82 -77
- data/features/fixtures/vcr_cassettes/1.9.1/cucumber_tags/regex_cassette.yml +0 -43
- data/features/fixtures/vcr_cassettes/1.9.1/cucumber_tags/replay_cassette1.yml +0 -43
- data/features/fixtures/vcr_cassettes/1.9.1/cucumber_tags/replay_cassette2.yml +0 -63
- data/features/fixtures/vcr_cassettes/1.9.1/cucumber_tags/replay_cassette3.yml +0 -85
- data/features/fixtures/vcr_cassettes/1.9.1/erb_cassette.yml +0 -36
- data/features/fixtures/vcr_cassettes/1.9.1/match_requests_on.yml +0 -35
- data/features/fixtures/vcr_cassettes/1.9.1/nested_replay_cassette.yml +0 -32
- data/features/fixtures/vcr_cassettes/1.9.1/not_the_real_response.yml +0 -43
- data/features/fixtures/vcr_cassettes/1.9.1/record_all.yml +0 -62
- data/features/fixtures/vcr_cassettes/1.9.1/replay_localhost_cassette.yml +0 -32
- data/features/fixtures/vcr_cassettes/not_1.9.1/cucumber_tags/regex_cassette.yml +0 -43
- data/features/fixtures/vcr_cassettes/not_1.9.1/cucumber_tags/replay_cassette1.yml +0 -43
- data/features/fixtures/vcr_cassettes/not_1.9.1/cucumber_tags/replay_cassette2.yml +0 -47
- data/features/fixtures/vcr_cassettes/not_1.9.1/cucumber_tags/replay_cassette3.yml +0 -85
- data/features/fixtures/vcr_cassettes/not_1.9.1/erb_cassette.yml +0 -36
- data/features/fixtures/vcr_cassettes/not_1.9.1/match_requests_on.yml +0 -35
- data/features/fixtures/vcr_cassettes/not_1.9.1/nested_replay_cassette.yml +0 -24
- data/features/fixtures/vcr_cassettes/not_1.9.1/not_the_real_response.yml +0 -43
- data/features/fixtures/vcr_cassettes/not_1.9.1/record_all.yml +0 -61
- data/features/fixtures/vcr_cassettes/not_1.9.1/replay_localhost_cassette.yml +0 -32
- data/features/http_client.feature +0 -16
- data/features/net_http.feature +0 -38
- data/features/record_response.feature +0 -95
- data/features/replay_recorded_response.feature +0 -96
- data/features/rspec.feature +0 -100
- data/features/step_definitions/http_client_steps.rb +0 -7
- data/features/step_definitions/net_http_steps.rb +0 -49
- data/features/step_definitions/vcr_steps.rb +0 -252
- data/features/webmock.feature +0 -26
- data/full_build +0 -1
| @@ -0,0 +1,64 @@ | |
| 1 | 
            +
            Feature: Usage with shoulda
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              When using a test framework that provides setup and teardown hooks
         | 
| 4 | 
            +
              (such as shoulda), you can use `VCR.insert_cassette` and
         | 
| 5 | 
            +
              `VCR.eject_cassette` to use a cassette for some tests.
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              The first argument to `VCR.insert_cassette` should be the cassette
         | 
| 8 | 
            +
              name; you can follow that with a hash of cassette options.
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              Note that you _must_ eject every cassette you insert; if you use
         | 
| 11 | 
            +
              `VCR.insert_cassette` rather than wrapping code in `VCR.use_cassette`,
         | 
| 12 | 
            +
              then it is your responsibility to ensure it is ejected, even if
         | 
| 13 | 
            +
              errors occur.
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              Scenario: Use `VCR.insert_cassette` and `VCR.eject_cassette`
         | 
| 16 | 
            +
                Given a file named "test/test_helper.rb" with:
         | 
| 17 | 
            +
                  """
         | 
| 18 | 
            +
                  require 'test/unit'
         | 
| 19 | 
            +
                  require 'shoulda'
         | 
| 20 | 
            +
                  require 'vcr_cucumber_helpers'
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  if ARGV.include?('--with-server')
         | 
| 23 | 
            +
                    start_sinatra_app(:port => 7777) do
         | 
| 24 | 
            +
                      get('/') { "Hello" }
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  require 'vcr'
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  VCR.config do |c|
         | 
| 31 | 
            +
                    c.stub_with :webmock
         | 
| 32 | 
            +
                    c.cassette_library_dir = 'test/fixtures/vcr_cassettes'
         | 
| 33 | 
            +
                    c.default_cassette_options = { :record => :new_episodes }
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
                  """
         | 
| 36 | 
            +
                And a file named "test/vcr_example_test.rb" with:
         | 
| 37 | 
            +
                  """
         | 
| 38 | 
            +
                  require 'test_helper'
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                  class VCRExampleTest < Test::Unit::TestCase
         | 
| 41 | 
            +
                    context 'using a VCR cassette' do
         | 
| 42 | 
            +
                      setup do
         | 
| 43 | 
            +
                        VCR.insert_cassette('shoulda_example')
         | 
| 44 | 
            +
                      end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                      should 'make an HTTP request' do
         | 
| 47 | 
            +
                        response = Net::HTTP.get_response('localhost', '/', 7777)
         | 
| 48 | 
            +
                        assert_equal "Hello", response.body
         | 
| 49 | 
            +
                      end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                      teardown do
         | 
| 52 | 
            +
                        VCR.eject_cassette
         | 
| 53 | 
            +
                      end
         | 
| 54 | 
            +
                    end
         | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
                  """
         | 
| 57 | 
            +
                And the directory "test/fixtures/vcr_cassettes" does not exist
         | 
| 58 | 
            +
                When I run "ruby -Itest test/vcr_example_test.rb -- --with-server"
         | 
| 59 | 
            +
                Then it should pass with "1 tests, 1 assertions, 0 failures, 0 errors"
         | 
| 60 | 
            +
                And the file "test/fixtures/vcr_cassettes/shoulda_example.yml" should contain "body: Hello"
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                # Run again without starting the sinatra server so the response will be replayed
         | 
| 63 | 
            +
                When I run "ruby -Itest test/vcr_example_test.rb"
         | 
| 64 | 
            +
                Then it should pass with "1 tests, 1 assertions, 0 failures, 0 errors"
         | 
| @@ -0,0 +1,46 @@ | |
| 1 | 
            +
            Feature: Usage with Test::Unit
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              To use VCR with Test::Unit, wrap the body of any test method in
         | 
| 4 | 
            +
              `VCR.use_cassette`.
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              Scenario: Use `VCR.use_cassette` in a test
         | 
| 7 | 
            +
                Given a file named "test/test_helper.rb" with:
         | 
| 8 | 
            +
                  """
         | 
| 9 | 
            +
                  require 'test/unit'
         | 
| 10 | 
            +
                  require 'vcr_cucumber_helpers'
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  if ARGV.include?('--with-server')
         | 
| 13 | 
            +
                    start_sinatra_app(:port => 7777) do
         | 
| 14 | 
            +
                      get('/') { "Hello" }
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  require 'vcr'
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  VCR.config do |c|
         | 
| 21 | 
            +
                    c.stub_with :webmock
         | 
| 22 | 
            +
                    c.cassette_library_dir = 'test/fixtures/vcr_cassettes'
         | 
| 23 | 
            +
                    c.default_cassette_options = { :record => :new_episodes }
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
                  """
         | 
| 26 | 
            +
                And a file named "test/vcr_example_test.rb" with:
         | 
| 27 | 
            +
                  """
         | 
| 28 | 
            +
                  require 'test_helper'
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  class VCRExampleTest < Test::Unit::TestCase
         | 
| 31 | 
            +
                    def test_use_vcr
         | 
| 32 | 
            +
                      VCR.use_cassette('test_unit_example') do
         | 
| 33 | 
            +
                        response = Net::HTTP.get_response('localhost', '/', 7777)
         | 
| 34 | 
            +
                        assert_equal "Hello", response.body
         | 
| 35 | 
            +
                      end
         | 
| 36 | 
            +
                    end
         | 
| 37 | 
            +
                  end
         | 
| 38 | 
            +
                  """
         | 
| 39 | 
            +
                And the directory "test/fixtures/vcr_cassettes" does not exist
         | 
| 40 | 
            +
                When I run "ruby -Itest test/vcr_example_test.rb -- --with-server"
         | 
| 41 | 
            +
                Then it should pass with "1 tests, 1 assertions, 0 failures, 0 errors"
         | 
| 42 | 
            +
                And the file "test/fixtures/vcr_cassettes/test_unit_example.yml" should contain "body: Hello"
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                # Run again without starting the sinatra server so the response will be replayed
         | 
| 45 | 
            +
                When I run "ruby -Itest test/vcr_example_test.rb"
         | 
| 46 | 
            +
                Then it should pass with "1 tests, 1 assertions, 0 failures, 0 errors"
         | 
    
        data/lib/vcr/cassette.rb
    CHANGED
    
    | @@ -9,7 +9,7 @@ module VCR | |
| 9 9 |  | 
| 10 10 | 
             
                VALID_RECORD_MODES = [:all, :none, :new_episodes].freeze
         | 
| 11 11 |  | 
| 12 | 
            -
                attr_reader :name, :record_mode, :match_requests_on
         | 
| 12 | 
            +
                attr_reader :name, :record_mode, :match_requests_on, :erb, :re_record_interval
         | 
| 13 13 |  | 
| 14 14 | 
             
                def initialize(name, options = {})
         | 
| 15 15 | 
             
                  options = VCR::Config.default_cassette_options.merge(options)
         | 
    
        data/lib/vcr/structs.rb
    CHANGED
    
    | @@ -1,7 +1,39 @@ | |
| 1 1 | 
             
            require 'forwardable'
         | 
| 2 2 |  | 
| 3 3 | 
             
            module VCR
         | 
| 4 | 
            +
              module BodyNormalizer
         | 
| 5 | 
            +
                def initialize(*args)
         | 
| 6 | 
            +
                  super
         | 
| 7 | 
            +
                  normalize_body
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                private
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                def normalize_body
         | 
| 13 | 
            +
                  # Ensure that the body is a raw string, in case the string instance
         | 
| 14 | 
            +
                  # has been subclassed or extended with additional instance variables
         | 
| 15 | 
            +
                  # or attributes, so that it is serialized to YAML as a raw string.
         | 
| 16 | 
            +
                  # This is needed for rest-client.  See this ticket for more info:
         | 
| 17 | 
            +
                  # http://github.com/myronmarston/vcr/issues/4
         | 
| 18 | 
            +
                  self.body = case body
         | 
| 19 | 
            +
                    when nil, ''; nil
         | 
| 20 | 
            +
                    else String.new(body)
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
             | 
| 4 25 | 
             
              module HeaderNormalizer
         | 
| 26 | 
            +
                # These headers get added by the various HTTP clients automatically,
         | 
| 27 | 
            +
                # and we don't care about them.  We store the headers for the purposes
         | 
| 28 | 
            +
                # of request matching, and we only care to match on headers users
         | 
| 29 | 
            +
                # explicitly set.
         | 
| 30 | 
            +
                HEADERS_TO_SKIP = {
         | 
| 31 | 
            +
                  'connection' => %w[ close Keep-Alive ],
         | 
| 32 | 
            +
                  'accept'     => %w[ */* ],
         | 
| 33 | 
            +
                  'expect'     => [''],
         | 
| 34 | 
            +
                  'user-agent' => ["Typhoeus - http://github.com/pauldix/typhoeus/tree/master", 'Ruby']
         | 
| 35 | 
            +
                }
         | 
| 36 | 
            +
             | 
| 5 37 | 
             
                def initialize(*args)
         | 
| 6 38 | 
             
                  super
         | 
| 7 39 | 
             
                  normalize_headers
         | 
| @@ -9,18 +41,30 @@ module VCR | |
| 9 41 |  | 
| 10 42 | 
             
                private
         | 
| 11 43 |  | 
| 44 | 
            +
                def important_header_values(k, values)
         | 
| 45 | 
            +
                  skip_values = HEADERS_TO_SKIP[k] || []
         | 
| 46 | 
            +
                  values - skip_values
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
             | 
| 12 49 | 
             
                def normalize_headers
         | 
| 13 50 | 
             
                  new_headers = {}
         | 
| 14 51 |  | 
| 15 52 | 
             
                  headers.each do |k, v|
         | 
| 16 | 
            -
                     | 
| 53 | 
            +
                    k = k.downcase
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                    val_array = case v
         | 
| 17 56 | 
             
                      when Array then v
         | 
| 18 57 | 
             
                      when nil then []
         | 
| 19 58 | 
             
                      else [v]
         | 
| 20 59 | 
             
                    end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                    important_vals = important_header_values(k, val_array)
         | 
| 62 | 
            +
                    next unless important_vals.size > 0
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                    new_headers[k] = important_vals
         | 
| 21 65 | 
             
                  end if headers
         | 
| 22 66 |  | 
| 23 | 
            -
                  self.headers = new_headers
         | 
| 67 | 
            +
                  self.headers = new_headers.empty? ? nil : new_headers
         | 
| 24 68 | 
             
                end
         | 
| 25 69 | 
             
              end
         | 
| 26 70 |  | 
| @@ -55,9 +99,24 @@ module VCR | |
| 55 99 | 
             
                end
         | 
| 56 100 | 
             
              end
         | 
| 57 101 |  | 
| 102 | 
            +
              module StatusMessageNormalizer
         | 
| 103 | 
            +
                def initialize(*args)
         | 
| 104 | 
            +
                  super
         | 
| 105 | 
            +
                  normalize_status_message
         | 
| 106 | 
            +
                end
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                private
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                def normalize_status_message
         | 
| 111 | 
            +
                  self.message = message.strip if message
         | 
| 112 | 
            +
                  self.message = nil if message == ''
         | 
| 113 | 
            +
                end
         | 
| 114 | 
            +
              end
         | 
| 115 | 
            +
             | 
| 58 116 | 
             
              class Request < Struct.new(:method, :uri, :body, :headers)
         | 
| 59 117 | 
             
                include HeaderNormalizer
         | 
| 60 118 | 
             
                include URINormalizer
         | 
| 119 | 
            +
                include BodyNormalizer
         | 
| 61 120 |  | 
| 62 121 | 
             
                def self.from_net_http_request(net_http, request)
         | 
| 63 122 | 
             
                  new(
         | 
| @@ -74,6 +133,8 @@ module VCR | |
| 74 133 | 
             
              end
         | 
| 75 134 |  | 
| 76 135 | 
             
              class ResponseStatus < Struct.new(:code, :message)
         | 
| 136 | 
            +
                include StatusMessageNormalizer
         | 
| 137 | 
            +
             | 
| 77 138 | 
             
                def self.from_net_http_response(response)
         | 
| 78 139 | 
             
                  new(response.code.to_i, response.message)
         | 
| 79 140 | 
             
                end
         | 
| @@ -81,17 +142,7 @@ module VCR | |
| 81 142 |  | 
| 82 143 | 
             
              class Response < Struct.new(:status, :headers, :body, :http_version)
         | 
| 83 144 | 
             
                include HeaderNormalizer
         | 
| 84 | 
            -
             | 
| 85 | 
            -
                def initialize(*args)
         | 
| 86 | 
            -
                  super
         | 
| 87 | 
            -
             | 
| 88 | 
            -
                  # Ensure that the body is a raw string, in case the string instance
         | 
| 89 | 
            -
                  # has been subclassed or extended with additional instance variables
         | 
| 90 | 
            -
                  # or attributes, so that it is serialized to YAML as a raw string.
         | 
| 91 | 
            -
                  # This is needed for rest-client.  See this ticket for more info:
         | 
| 92 | 
            -
                  # http://github.com/myronmarston/vcr/issues/4
         | 
| 93 | 
            -
                  self.body = String.new(body) if body
         | 
| 94 | 
            -
                end
         | 
| 145 | 
            +
                include BodyNormalizer
         | 
| 95 146 |  | 
| 96 147 | 
             
                def self.from_net_http_response(response)
         | 
| 97 148 | 
             
                  new(
         | 
    
        data/lib/vcr/version.rb
    CHANGED
    
    
| 
            File without changes
         | 
    
        data/script/full_build
    ADDED
    
    | @@ -0,0 +1 @@ | |
| 1 | 
            +
            rvm 1.8.6,1.8.7,1.9.1,1.9.2,ree,jruby,rbx-head rake -f script/FullBuildRakeFile build | tee tmp/full_build.out
         | 
| @@ -43,7 +43,7 @@ describe "Net::HTTP Extensions" do | |
| 43 43 | 
             
                    interaction.request.headers.should_not have_key('content-type')
         | 
| 44 44 | 
             
                    interaction.request.headers.should_not have_key('host')
         | 
| 45 45 | 
             
                  end
         | 
| 46 | 
            -
                  Net::HTTP.new('example.com', 80).send_request('POST', '/', '', {})
         | 
| 46 | 
            +
                  Net::HTTP.new('example.com', 80).send_request('POST', '/', '', { 'x-http-user' => 'me' })
         | 
| 47 47 | 
             
                end
         | 
| 48 48 |  | 
| 49 49 | 
             
                it "records headers for which Net::HTTP usually sets defaults when the user manually sets their values" do
         | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | @@ -9,7 +9,7 @@ YAML_SERIALIZATION_VERSION = RUBY_VERSION == '1.9.1' ? '1.9.1' : 'not_1.9.1' | |
| 9 9 |  | 
| 10 10 | 
             
            # Requires supporting files with custom matchers and macros, etc,
         | 
| 11 11 | 
             
            # in ./support/ and its subdirectories.
         | 
| 12 | 
            -
            Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f}
         | 
| 12 | 
            +
            Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require File.join("support", File.basename(f))}
         | 
| 13 13 |  | 
| 14 14 | 
             
            require 'vcr'
         | 
| 15 15 | 
             
            require 'monkey_patches'
         | 
    
        data/spec/structs_spec.rb
    CHANGED
    
    | @@ -2,20 +2,38 @@ require 'spec_helper' | |
| 2 2 |  | 
| 3 3 | 
             
            shared_examples_for "a header normalizer" do
         | 
| 4 4 | 
             
              let(:instance) do
         | 
| 5 | 
            -
                with_headers('Some_Header' => 'value1', 'aNother' => ['a', 'b'], 'third' => [], ' | 
| 5 | 
            +
                with_headers('Some_Header' => 'value1', 'aNother' => ['a', 'b'], 'third' => [], 'fourth' => nil)
         | 
| 6 6 | 
             
              end
         | 
| 7 7 |  | 
| 8 8 | 
             
              it 'normalizes the hash to lower case keys and arrays of values' do
         | 
| 9 | 
            -
                instance.headers.should ==  | 
| 10 | 
            -
             | 
| 11 | 
            -
                  'another'     => ['a', 'b'],
         | 
| 12 | 
            -
                  'third'       => [],
         | 
| 13 | 
            -
                  'fourth'      => []
         | 
| 14 | 
            -
                }
         | 
| 9 | 
            +
                instance.headers['some_header'].should == ['value1']
         | 
| 10 | 
            +
                instance.headers['another'].should == ['a', 'b']
         | 
| 15 11 | 
             
              end
         | 
| 16 12 |  | 
| 17 | 
            -
              it ' | 
| 18 | 
            -
                 | 
| 13 | 
            +
              it 'removes empty headers' do
         | 
| 14 | 
            +
                instance.headers.should_not have_key('third')
         | 
| 15 | 
            +
                instance.headers.should_not have_key('fourth')
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              it 'filters out unimportant default values set by the HTTP library' do
         | 
| 19 | 
            +
                instance = with_headers('accept' => ['*/*'], 'connection' => 'close', 'http-user' => ['foo'], 'expect' => ['', 'bar'])
         | 
| 20 | 
            +
                instance.headers.should == { 'http-user' => ['foo'], 'expect' => ['bar'] }
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              it 'sets empty hash header to nil' do
         | 
| 24 | 
            +
                with_headers({}).headers.should be_nil
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
            end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            shared_examples_for "a body normalizer" do
         | 
| 29 | 
            +
              it 'sets empty string to nil' do
         | 
| 30 | 
            +
                instance('').body.should be_nil
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
              it "ensures the body is serialized to yaml as a raw string" do
         | 
| 34 | 
            +
                body = "My String"
         | 
| 35 | 
            +
                body.instance_variable_set(:@foo, 7)
         | 
| 36 | 
            +
                instance(body).body.to_yaml.should == "My String".to_yaml
         | 
| 19 37 | 
             
              end
         | 
| 20 38 | 
             
            end
         | 
| 21 39 |  | 
| @@ -67,7 +85,7 @@ describe VCR::Request do | |
| 67 85 | 
             
                it            { should be_instance_of(VCR::Request) }
         | 
| 68 86 | 
             
                its(:method)  { should == :post  }
         | 
| 69 87 | 
             
                its(:body)    { should == 'id=7'  }
         | 
| 70 | 
            -
                its(:headers) { should == { " | 
| 88 | 
            +
                its(:headers) { should == { "content-type" => ["application/x-www-form-urlencoded"] } }
         | 
| 71 89 |  | 
| 72 90 | 
             
                it 'sets the uri using the http_stubbing_adapter.request_uri' do
         | 
| 73 91 | 
             
                  VCR.http_stubbing_adapter.should_receive(:request_uri).with(net_http, request).and_return('foo/bar')
         | 
| @@ -80,6 +98,12 @@ describe VCR::Request do | |
| 80 98 | 
             
                  described_class.new(:get, 'http://example.com/', nil, headers)
         | 
| 81 99 | 
             
                end
         | 
| 82 100 | 
             
              end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
              it_behaves_like 'a body normalizer' do
         | 
| 103 | 
            +
                def instance(body)
         | 
| 104 | 
            +
                  described_class.new(:get, 'http://example.com/', body, {})
         | 
| 105 | 
            +
                end
         | 
| 106 | 
            +
              end
         | 
| 83 107 | 
             
            end
         | 
| 84 108 |  | 
| 85 109 | 
             
            describe VCR::ResponseStatus do
         | 
| @@ -91,6 +115,15 @@ describe VCR::ResponseStatus do | |
| 91 115 | 
             
                its(:code)    { should == 200 }
         | 
| 92 116 | 
             
                its(:message) { should == 'OK' }
         | 
| 93 117 | 
             
              end
         | 
| 118 | 
            +
             | 
| 119 | 
            +
              it 'chomps leading and trailing spaces on the status message' do
         | 
| 120 | 
            +
                described_class.new(200, ' OK ').message.should == 'OK'
         | 
| 121 | 
            +
              end
         | 
| 122 | 
            +
             | 
| 123 | 
            +
              it 'sets status message to nil when it is the empty string' do
         | 
| 124 | 
            +
                described_class.new(200, '').message.should be_nil
         | 
| 125 | 
            +
                described_class.new(200, '  ').message.should be_nil
         | 
| 126 | 
            +
              end
         | 
| 94 127 | 
             
            end
         | 
| 95 128 |  | 
| 96 129 | 
             
            describe VCR::Response do
         | 
| @@ -103,7 +136,6 @@ describe VCR::Response do | |
| 103 136 | 
             
                its(:http_version) { should == '1.1' }
         | 
| 104 137 | 
             
                its(:headers)      { should == {
         | 
| 105 138 | 
             
                  "last-modified"  => ['Tue, 15 Nov 2005 13:24:10 GMT'],
         | 
| 106 | 
            -
                  "connection"     => ['close'],
         | 
| 107 139 | 
             
                  "etag"           => ["\"24ec5-1b6-4059a80bfd280\""],
         | 
| 108 140 | 
             
                  "content-type"   => ["text/html; charset=UTF-8"],
         | 
| 109 141 | 
             
                  "date"           => ['Wed, 31 Mar 2010 02:43:26 GMT'],
         | 
| @@ -125,11 +157,10 @@ describe VCR::Response do | |
| 125 157 | 
             
                end
         | 
| 126 158 | 
             
              end
         | 
| 127 159 |  | 
| 128 | 
            -
               | 
| 129 | 
            -
                body | 
| 130 | 
            -
             | 
| 131 | 
            -
                 | 
| 132 | 
            -
                instance.body.to_yaml.should == "My String".to_yaml
         | 
| 160 | 
            +
              it_behaves_like 'a body normalizer' do
         | 
| 161 | 
            +
                def instance(body)
         | 
| 162 | 
            +
                  described_class.new(:status, {}, body, '1.1')
         | 
| 163 | 
            +
                end
         | 
| 133 164 | 
             
              end
         | 
| 134 165 | 
             
            end
         | 
| 135 166 |  | 
| @@ -1,5 +1,6 @@ | |
| 1 1 | 
             
            require 'rack'
         | 
| 2 2 | 
             
            require 'rack/handler/webrick'
         | 
| 3 | 
            +
            require 'net/http'
         | 
| 3 4 |  | 
| 4 5 | 
             
            # The code for this is inspired by Capybara's server:
         | 
| 5 6 | 
             
            #   http://github.com/jnicklas/capybara/blob/0.3.9/lib/capybara/server.rb
         | 
| @@ -21,8 +22,8 @@ module VCR | |
| 21 22 |  | 
| 22 23 | 
             
                attr_reader :port
         | 
| 23 24 |  | 
| 24 | 
            -
                def initialize(rack_app)
         | 
| 25 | 
            -
                  @port = find_available_port
         | 
| 25 | 
            +
                def initialize(rack_app, port = nil)
         | 
| 26 | 
            +
                  @port = port || find_available_port
         | 
| 26 27 | 
             
                  @rack_app = rack_app
         | 
| 27 28 | 
             
                  concurrently { boot }
         | 
| 28 29 | 
             
                  wait_until(10, "Boot failed.") { booted? }
         | 
| @@ -53,9 +54,7 @@ module VCR | |
| 53 54 | 
             
                end
         | 
| 54 55 |  | 
| 55 56 | 
             
                def concurrently
         | 
| 56 | 
            -
                  if  | 
| 57 | 
            -
                    # Patron times out when the server is running in a separate thread in the same process,
         | 
| 58 | 
            -
                    # so use a separate process.
         | 
| 57 | 
            +
                  if should_use_subprocess?
         | 
| 59 58 | 
             
                    pid = Process.fork do
         | 
| 60 59 | 
             
                      yield
         | 
| 61 60 | 
             
                      exit # manually exit; otherwise this sub-process will re-run the specs that haven't run yet.
         | 
| @@ -77,6 +76,13 @@ module VCR | |
| 77 76 | 
             
                  end
         | 
| 78 77 | 
             
                end
         | 
| 79 78 |  | 
| 79 | 
            +
                def should_use_subprocess?
         | 
| 80 | 
            +
                  # Patron times out when the server is running in a separate thread in the same process,
         | 
| 81 | 
            +
                  # so use a separate process.
         | 
| 82 | 
            +
                  # In all other cases, we can use a thread (it's faster!)
         | 
| 83 | 
            +
                  defined?(Patron)
         | 
| 84 | 
            +
                end
         | 
| 85 | 
            +
             | 
| 80 86 | 
             
                def wait_until(timeout, error_message, &block)
         | 
| 81 87 | 
             
                  start_time = Time.now
         | 
| 82 88 |  | 
    
        data/vcr.gemspec
    CHANGED
    
    
    
        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:  | 
| 4 | 
            +
              hash: 31
         | 
| 5 5 | 
             
              prerelease: false
         | 
| 6 6 | 
             
              segments: 
         | 
| 7 7 | 
             
              - 1
         | 
| 8 8 | 
             
              - 3
         | 
| 9 | 
            -
              -  | 
| 10 | 
            -
              version: 1.3. | 
| 9 | 
            +
              - 2
         | 
| 10 | 
            +
              version: 1.3.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-11- | 
| 18 | 
            +
            date: 2010-11-16 00:00:00 -08:00
         | 
| 19 19 | 
             
            default_executable: 
         | 
| 20 20 | 
             
            dependencies: 
         | 
| 21 21 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| @@ -133,6 +133,22 @@ dependencies: | |
| 133 133 | 
             
              prerelease: false
         | 
| 134 134 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 135 135 | 
             
              version_requirements: &id008 !ruby/object:Gem::Requirement 
         | 
| 136 | 
            +
                none: false
         | 
| 137 | 
            +
                requirements: 
         | 
| 138 | 
            +
                - - ~>
         | 
| 139 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 140 | 
            +
                    hash: 19
         | 
| 141 | 
            +
                    segments: 
         | 
| 142 | 
            +
                    - 1
         | 
| 143 | 
            +
                    - 1
         | 
| 144 | 
            +
                    - 0
         | 
| 145 | 
            +
                    version: 1.1.0
         | 
| 146 | 
            +
              requirement: *id008
         | 
| 147 | 
            +
              type: :development
         | 
| 148 | 
            +
              name: sinatra
         | 
| 149 | 
            +
              prerelease: false
         | 
| 150 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 151 | 
            +
              version_requirements: &id009 !ruby/object:Gem::Requirement 
         | 
| 136 152 | 
             
                none: false
         | 
| 137 153 | 
             
                requirements: 
         | 
| 138 154 | 
             
                - - ~>
         | 
| @@ -143,12 +159,12 @@ dependencies: | |
| 143 159 | 
             
                    - 0
         | 
| 144 160 | 
             
                    - 0
         | 
| 145 161 | 
             
                    version: 1.0.0
         | 
| 146 | 
            -
              requirement: * | 
| 162 | 
            +
              requirement: *id009
         | 
| 147 163 | 
             
              type: :development
         | 
| 148 164 | 
             
              name: bundler
         | 
| 149 165 | 
             
              prerelease: false
         | 
| 150 166 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 151 | 
            -
              version_requirements: & | 
| 167 | 
            +
              version_requirements: &id010 !ruby/object:Gem::Requirement 
         | 
| 152 168 | 
             
                none: false
         | 
| 153 169 | 
             
                requirements: 
         | 
| 154 170 | 
             
                - - ~>
         | 
| @@ -159,12 +175,12 @@ dependencies: | |
| 159 175 | 
             
                    - 9
         | 
| 160 176 | 
             
                    - 4
         | 
| 161 177 | 
             
                    version: 0.9.4
         | 
| 162 | 
            -
              requirement: * | 
| 178 | 
            +
              requirement: *id010
         | 
| 163 179 | 
             
              type: :development
         | 
| 164 180 | 
             
              name: cucumber
         | 
| 165 181 | 
             
              prerelease: false
         | 
| 166 182 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 167 | 
            -
              version_requirements: & | 
| 183 | 
            +
              version_requirements: &id011 !ruby/object:Gem::Requirement 
         | 
| 168 184 | 
             
                none: false
         | 
| 169 185 | 
             
                requirements: 
         | 
| 170 186 | 
             
                - - ~>
         | 
| @@ -175,12 +191,12 @@ dependencies: | |
| 175 191 | 
             
                    - 6
         | 
| 176 192 | 
             
                    - 0
         | 
| 177 193 | 
             
                    version: 1.6.0
         | 
| 178 | 
            -
              requirement: * | 
| 194 | 
            +
              requirement: *id011
         | 
| 179 195 | 
             
              type: :development
         | 
| 180 196 | 
             
              name: webmock
         | 
| 181 197 | 
             
              prerelease: false
         | 
| 182 198 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 183 | 
            -
              version_requirements: & | 
| 199 | 
            +
              version_requirements: &id012 !ruby/object:Gem::Requirement 
         | 
| 184 200 | 
             
                none: false
         | 
| 185 201 | 
             
                requirements: 
         | 
| 186 202 | 
             
                - - ~>
         | 
| @@ -191,12 +207,12 @@ dependencies: | |
| 191 207 | 
             
                    - 7
         | 
| 192 208 | 
             
                    - 8
         | 
| 193 209 | 
             
                    version: 0.7.8
         | 
| 194 | 
            -
              requirement: * | 
| 210 | 
            +
              requirement: *id012
         | 
| 195 211 | 
             
              type: :development
         | 
| 196 212 | 
             
              name: curb
         | 
| 197 213 | 
             
              prerelease: false
         | 
| 198 214 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 199 | 
            -
              version_requirements: & | 
| 215 | 
            +
              version_requirements: &id013 !ruby/object:Gem::Requirement 
         | 
| 200 216 | 
             
                none: false
         | 
| 201 217 | 
             
                requirements: 
         | 
| 202 218 | 
             
                - - ~>
         | 
| @@ -207,12 +223,12 @@ dependencies: | |
| 207 223 | 
             
                    - 4
         | 
| 208 224 | 
             
                    - 6
         | 
| 209 225 | 
             
                    version: 0.4.6
         | 
| 210 | 
            -
              requirement: * | 
| 226 | 
            +
              requirement: *id013
         | 
| 211 227 | 
             
              type: :development
         | 
| 212 228 | 
             
              name: patron
         | 
| 213 229 | 
             
              prerelease: false
         | 
| 214 230 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 215 | 
            -
              version_requirements: & | 
| 231 | 
            +
              version_requirements: &id014 !ruby/object:Gem::Requirement 
         | 
| 216 232 | 
             
                none: false
         | 
| 217 233 | 
             
                requirements: 
         | 
| 218 234 | 
             
                - - ~>
         | 
| @@ -223,12 +239,12 @@ dependencies: | |
| 223 239 | 
             
                    - 2
         | 
| 224 240 | 
             
                    - 7
         | 
| 225 241 | 
             
                    version: 0.2.7
         | 
| 226 | 
            -
              requirement: * | 
| 242 | 
            +
              requirement: *id014
         | 
| 227 243 | 
             
              type: :development
         | 
| 228 244 | 
             
              name: em-http-request
         | 
| 229 245 | 
             
              prerelease: false
         | 
| 230 246 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 231 | 
            -
              version_requirements: & | 
| 247 | 
            +
              version_requirements: &id015 !ruby/object:Gem::Requirement 
         | 
| 232 248 | 
             
                none: false
         | 
| 233 249 | 
             
                requirements: 
         | 
| 234 250 | 
             
                - - ~>
         | 
| @@ -239,7 +255,7 @@ dependencies: | |
| 239 255 | 
             
                    - 2
         | 
| 240 256 | 
             
                    - 0
         | 
| 241 257 | 
             
                    version: 0.2.0
         | 
| 242 | 
            -
              requirement: * | 
| 258 | 
            +
              requirement: *id015
         | 
| 243 259 | 
             
              type: :development
         | 
| 244 260 | 
             
              name: typhoeus
         | 
| 245 261 | 
             
              prerelease: false
         | 
| @@ -256,7 +272,6 @@ files: | |
| 256 272 | 
             
            - .gitignore
         | 
| 257 273 | 
             
            - .gitmodules
         | 
| 258 274 | 
             
            - CHANGELOG.md
         | 
| 259 | 
            -
            - FullBuildRakeFile
         | 
| 260 275 | 
             
            - Gemfile
         | 
| 261 276 | 
             
            - Gemfile.lock
         | 
| 262 277 | 
             
            - Guardfile
         | 
| @@ -265,37 +280,31 @@ files: | |
| 265 280 | 
             
            - Rakefile
         | 
| 266 281 | 
             
            - TODO.md
         | 
| 267 282 | 
             
            - benchmarks/http_stubbing_libraries.rb
         | 
| 268 | 
            -
            -  | 
| 269 | 
            -
            - features/ | 
| 270 | 
            -
            - features/ | 
| 271 | 
            -
            - features/ | 
| 272 | 
            -
            - features/ | 
| 273 | 
            -
            - features/ | 
| 274 | 
            -
            - features/ | 
| 275 | 
            -
            - features/ | 
| 276 | 
            -
            - features/ | 
| 277 | 
            -
            - features/ | 
| 278 | 
            -
            - features/ | 
| 279 | 
            -
            - features/ | 
| 280 | 
            -
            - features/ | 
| 281 | 
            -
            - features/ | 
| 282 | 
            -
            - features/ | 
| 283 | 
            -
            - features/ | 
| 284 | 
            -
            - features/ | 
| 285 | 
            -
            - features/ | 
| 286 | 
            -
            - features/fixtures/vcr_cassettes/not_1.9.1/record_all.yml
         | 
| 287 | 
            -
            - features/fixtures/vcr_cassettes/not_1.9.1/replay_localhost_cassette.yml
         | 
| 288 | 
            -
            - features/http_client.feature
         | 
| 289 | 
            -
            - features/net_http.feature
         | 
| 290 | 
            -
            - features/record_response.feature
         | 
| 291 | 
            -
            - features/replay_recorded_response.feature
         | 
| 292 | 
            -
            - features/rspec.feature
         | 
| 293 | 
            -
            - features/step_definitions/http_client_steps.rb
         | 
| 294 | 
            -
            - features/step_definitions/net_http_steps.rb
         | 
| 295 | 
            -
            - features/step_definitions/vcr_steps.rb
         | 
| 283 | 
            +
            - cucumber.yml
         | 
| 284 | 
            +
            - features/README.md
         | 
| 285 | 
            +
            - features/cassettes/automatic_re_recording.feature
         | 
| 286 | 
            +
            - features/cassettes/dynamic_erb.feature
         | 
| 287 | 
            +
            - features/cassettes/format.feature
         | 
| 288 | 
            +
            - features/cassettes/no_cassette.feature
         | 
| 289 | 
            +
            - features/cassettes/record_modes/all.feature
         | 
| 290 | 
            +
            - features/cassettes/record_modes/new_episodes.feature
         | 
| 291 | 
            +
            - features/cassettes/record_modes/none.feature
         | 
| 292 | 
            +
            - features/cassettes/request_matching.feature
         | 
| 293 | 
            +
            - features/configuration/cassette_library_dir.feature
         | 
| 294 | 
            +
            - features/configuration/default_cassette_options.feature
         | 
| 295 | 
            +
            - features/configuration/ignore_localhost.feature
         | 
| 296 | 
            +
            - features/configuration/stub_with.feature
         | 
| 297 | 
            +
            - features/http_libraries/net_http.feature
         | 
| 298 | 
            +
            - features/step_definitions/cli_steps.rb
         | 
| 299 | 
            +
            - features/support/aruba_workaround/aruba_patches.rb
         | 
| 300 | 
            +
            - features/support/aruba_workaround/background_process.rb
         | 
| 296 301 | 
             
            - features/support/env.rb
         | 
| 297 | 
            -
            - features/ | 
| 298 | 
            -
            -  | 
| 302 | 
            +
            - features/support/http_lib_filters.rb
         | 
| 303 | 
            +
            - features/support/vcr_cucumber_helpers.rb
         | 
| 304 | 
            +
            - features/test_frameworks/cucumber.feature
         | 
| 305 | 
            +
            - features/test_frameworks/rspec.feature
         | 
| 306 | 
            +
            - features/test_frameworks/shoulda.feature
         | 
| 307 | 
            +
            - features/test_frameworks/test_unit.feature
         | 
| 299 308 | 
             
            - lib/vcr.rb
         | 
| 300 309 | 
             
            - lib/vcr/basic_object.rb
         | 
| 301 310 | 
             
            - lib/vcr/cassette.rb
         | 
| @@ -315,6 +324,8 @@ files: | |
| 315 324 | 
             
            - lib/vcr/rspec.rb
         | 
| 316 325 | 
             
            - lib/vcr/structs.rb
         | 
| 317 326 | 
             
            - lib/vcr/version.rb
         | 
| 327 | 
            +
            - script/FullBuildRakeFile
         | 
| 328 | 
            +
            - script/full_build
         | 
| 318 329 | 
             
            - spec/cassette_spec.rb
         | 
| 319 330 | 
             
            - spec/config_spec.rb
         | 
| 320 331 | 
             
            - spec/cucumber_tags_spec.rb
         | 
| @@ -403,36 +414,30 @@ signing_key: | |
| 403 414 | 
             
            specification_version: 3
         | 
| 404 415 | 
             
            summary: Record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate tests.
         | 
| 405 416 | 
             
            test_files: 
         | 
| 406 | 
            -
            - features/ | 
| 407 | 
            -
            - features/ | 
| 408 | 
            -
            - features/ | 
| 409 | 
            -
            - features/ | 
| 410 | 
            -
            - features/ | 
| 411 | 
            -
            - features/ | 
| 412 | 
            -
            - features/ | 
| 413 | 
            -
            - features/ | 
| 414 | 
            -
            - features/ | 
| 415 | 
            -
            - features/ | 
| 416 | 
            -
            - features/ | 
| 417 | 
            -
            - features/ | 
| 418 | 
            -
            - features/ | 
| 419 | 
            -
            - features/ | 
| 420 | 
            -
            - features/ | 
| 421 | 
            -
            - features/ | 
| 422 | 
            -
            - features/ | 
| 423 | 
            -
            - features/fixtures/vcr_cassettes/not_1.9.1/not_the_real_response.yml
         | 
| 424 | 
            -
            - features/fixtures/vcr_cassettes/not_1.9.1/record_all.yml
         | 
| 425 | 
            -
            - features/fixtures/vcr_cassettes/not_1.9.1/replay_localhost_cassette.yml
         | 
| 426 | 
            -
            - features/http_client.feature
         | 
| 427 | 
            -
            - features/net_http.feature
         | 
| 428 | 
            -
            - features/record_response.feature
         | 
| 429 | 
            -
            - features/replay_recorded_response.feature
         | 
| 430 | 
            -
            - features/rspec.feature
         | 
| 431 | 
            -
            - features/step_definitions/http_client_steps.rb
         | 
| 432 | 
            -
            - features/step_definitions/net_http_steps.rb
         | 
| 433 | 
            -
            - features/step_definitions/vcr_steps.rb
         | 
| 417 | 
            +
            - features/README.md
         | 
| 418 | 
            +
            - features/cassettes/automatic_re_recording.feature
         | 
| 419 | 
            +
            - features/cassettes/dynamic_erb.feature
         | 
| 420 | 
            +
            - features/cassettes/format.feature
         | 
| 421 | 
            +
            - features/cassettes/no_cassette.feature
         | 
| 422 | 
            +
            - features/cassettes/record_modes/all.feature
         | 
| 423 | 
            +
            - features/cassettes/record_modes/new_episodes.feature
         | 
| 424 | 
            +
            - features/cassettes/record_modes/none.feature
         | 
| 425 | 
            +
            - features/cassettes/request_matching.feature
         | 
| 426 | 
            +
            - features/configuration/cassette_library_dir.feature
         | 
| 427 | 
            +
            - features/configuration/default_cassette_options.feature
         | 
| 428 | 
            +
            - features/configuration/ignore_localhost.feature
         | 
| 429 | 
            +
            - features/configuration/stub_with.feature
         | 
| 430 | 
            +
            - features/http_libraries/net_http.feature
         | 
| 431 | 
            +
            - features/step_definitions/cli_steps.rb
         | 
| 432 | 
            +
            - features/support/aruba_workaround/aruba_patches.rb
         | 
| 433 | 
            +
            - features/support/aruba_workaround/background_process.rb
         | 
| 434 434 | 
             
            - features/support/env.rb
         | 
| 435 | 
            -
            - features/ | 
| 435 | 
            +
            - features/support/http_lib_filters.rb
         | 
| 436 | 
            +
            - features/support/vcr_cucumber_helpers.rb
         | 
| 437 | 
            +
            - features/test_frameworks/cucumber.feature
         | 
| 438 | 
            +
            - features/test_frameworks/rspec.feature
         | 
| 439 | 
            +
            - features/test_frameworks/shoulda.feature
         | 
| 440 | 
            +
            - features/test_frameworks/test_unit.feature
         | 
| 436 441 | 
             
            - spec/cassette_spec.rb
         | 
| 437 442 | 
             
            - spec/config_spec.rb
         | 
| 438 443 | 
             
            - spec/cucumber_tags_spec.rb
         |