# Dynamic ERB cassettes

By default, cassettes are static: the exact response that was received when the cassette was recorded will be replayed for all future requests. Usually, this is fine, but in some cases you need something more dynamic. You can use ERB for this.

To enable ERB evaluation of a cassette, pass the `:erb => true` option to a cassette. If you want to pass variables to the cassette, you can pass the names and values of the variables in a hash (`:erb => { ... }`).

## Enable dynamic ERB cassette evalutation using :erb => true

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

```
---
http_interactions:
- request:
    method: get
    uri: http://example.com/foo?a=<%= 'b' * 3 %>
    body:
      encoding: UTF-8
      string: ''
    headers: {}
  response:
    status:
      code: 200
      message: OK
    headers:
      Content-Type:
      - text/html;charset=utf-8
      Content-Length:
      - '9'
    body:
      encoding: UTF-8
      string: Hello <%= 'bar'.next %>
    http_version: '1.1'
  recorded_at: Tue, 01 Nov 2011 04:58:44 GMT
recorded_with: VCR 2.0.0
```

*And* a file named "dynamic\_erb\_example.rb" with:

```
require 'vcr'

VCR.configure do |c|
  c.hook_into :webmock
  c.cassette_library_dir = 'cassettes'
end

VCR.use_cassette('dynamic', :erb => true) do
  response = Net::HTTP.get_response('example.com', '/foo?a=bbb')
  puts "Response: #{response.body}"
end
```

*When* I run `ruby dynamic_erb_example.rb`

*Then* it should pass with "Response: Hello bas".

## Pass arguments to the ERB using :erb => { ... }

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

```
---
http_interactions:
- request:
    method: get
    uri: http://example.com/foo?a=<%= arg1 %>
    body:
      encoding: UTF-8
      string: ''
    headers: {}
  response:
    status:
      code: 200
      message: OK
    headers:
      Content-Type:
      - text/html;charset=utf-8
      Content-Length:
      - '9'
    body:
      encoding: UTF-8
      string: Hello <%= arg2 %>
    http_version: '1.1'
  recorded_at: Tue, 01 Nov 2011 04:58:44 GMT
recorded_with: VCR 2.0.0
```

*And* a file named "dynamic\_erb\_example.rb" with:

```
require 'vcr'

VCR.configure do |c|
  c.hook_into :webmock
  c.cassette_library_dir = 'cassettes'
end

VCR.use_cassette('dynamic', :erb => { :arg1 => 7, :arg2 => 'baz' }) do
  response = Net::HTTP.get_response('example.com', '/foo?a=7')
  puts "Response: #{response.body}"
end
```

*When* I run `ruby dynamic_erb_example.rb`

*Then* it should pass with "Response: Hello baz".


---

# Agent Instructions: 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://andrewmcodes.gitbook.io/vcr/cassettes/dynamic_erb.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.
