> For the complete documentation index, see [llms.txt](https://nicolasiensen.gitbook.io/vcr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://nicolasiensen.gitbook.io/vcr/cassettes/exclusive.md).

# Exclusive Cassette

VCR allows cassettes to be nested. This is particularly useful in a context like cucumber, where you may be using a cassette for an entire scenario, and also using a cassette within a particular step definition.

By default, both the inner and outer cassettes are active. On each request, VCR will look for a matching HTTP interaction in the inner cassette, and it will use the outer cassette as a fall back if none can be found.

If you do not want the HTTP interactions of the outer cassette considered, you can pass the `:exclusive` option, so that the inner cassette is used exclusively.

## Background ()

*Given* a previously recorded cassette file "cassettes/outer.yml" with:

```
--- 
http_interactions: 
- request: 
    method: get
    uri: http://localhost/outer
    body: 
      encoding: UTF-8
      string: ""
    headers: {}
  response: 
    status: 
      code: 200
      message: OK
    headers: 
      Content-Length: 
      - "18"
    body: 
      encoding: UTF-8
      string: Old outer response
    http_version: "1.1"
  recorded_at: Tue, 01 Nov 2011 04:58:44 GMT
recorded_with: VCR 2.0.0
```

*And* a previously recorded cassette file "cassettes/inner.yml" with:

```
--- 
http_interactions: 
- request: 
    method: get
    uri: http://localhost/inner
    body: 
      encoding: UTF-8
      string: ""
    headers: {}
  response: 
    status: 
      code: 200
      message: OK
    headers: 
      Content-Length: 
      - "18"
    body: 
      encoding: UTF-8
      string: Old inner response
    http_version: "1.1"
  recorded_at: Tue, 01 Nov 2011 04:58:44 GMT
recorded_with: VCR 2.0.0
```

*And* a file named "setup.rb" with:

```
include_http_adapter_for("net/http")

$server = start_sinatra_app do
  get('/:path') { "New #{params[:path]} response" }
end

require 'vcr'

VCR.configure do |c|
  c.hook_into :webmock
  c.cassette_library_dir = 'cassettes'
  c.default_cassette_options = {
    :record => :new_episodes,
    :match_requests_on => [:method, :host, :path]
  }
end
```

## Cassettes are not exclusive by default

*Given* a file named "not\_exclusive.rb" with:

```
require 'setup'

VCR.use_cassette('outer') do
  VCR.use_cassette('inner') do
    puts response_body_for(:get, "http://localhost:#{$server.port}/outer")
    puts response_body_for(:get, "http://localhost:#{$server.port}/inner")
  end
end
```

*When* I run `ruby not_exclusive.rb`

*Then* it should pass with:

```
Old outer response
Old inner response
```

## Use an exclusive cassette

*Given* a file named "exclusive.rb" with:

```
require 'setup'

VCR.use_cassette('outer') do
  VCR.use_cassette('inner', :exclusive => true) do
    puts response_body_for(:get, "http://localhost:#{$server.port}/outer")
    puts response_body_for(:get, "http://localhost:#{$server.port}/inner")
  end
end
```

*When* I run `ruby exclusive.rb`

*Then* it should pass with:

```
New outer response
Old inner response
```

*And* the file "cassettes/inner.yml" should contain "New outer response".


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://nicolasiensen.gitbook.io/vcr/cassettes/exclusive.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
