Class: VCR::Cassette

Inherits:
Object
  • Object
show all
Defined in:
lib/vcr/cassette.rb,
lib/vcr/cassette/migrator.rb,
lib/vcr/cassette/persisters.rb,
lib/vcr/cassette/serializers.rb,
lib/vcr/cassette/erb_renderer.rb,
lib/vcr/cassette/serializers/yaml.rb,
lib/vcr/cassette/serializers/syck.rb,
lib/vcr/cassette/serializers/json.rb,
lib/vcr/cassette/serializers/psych.rb,
lib/vcr/cassette/http_interaction_list.rb,
lib/vcr/cassette/persisters/file_system.rb

Overview

The media VCR uses to store HTTP interactions for later re-use.

Defined Under Namespace

Classes: Persisters, Serializers

Constant Summary

VALID_RECORD_MODES =

The supported record modes.

  • :all -- Record every HTTP interactions; do not play any back.
  • :none -- Do not record any HTTP interactions; play them back.
  • :new_episodes -- Playback previously recorded HTTP interactions and record new ones.
  • :once -- Record the HTTP interactions if the cassette has not already been recorded; otherwise, playback the HTTP interactions.
[:all, :none, :new_episodes, :once]

Instance Attribute Summary (collapse)

Instance Method Summary (collapse)

Constructor Details

- (Cassette) initialize(name, options = {})

A new instance of Cassette

Parameters:

  • name (#to_s)

    The name of the cassette. VCR will sanitize this to ensure it is a valid file name.

  • options (Hash) (defaults to: {})

    The cassette options. The given options will be merged with the configured default_cassette_options.

See Also:



45
46
47
48
49
50
51
52
53
54
# File 'lib/vcr/cassette.rb', line 45

def initialize(name, options = {})
  @name    = name
  @options = VCR.configuration.default_cassette_options.merge(options)

  assert_valid_options!
  extract_options
  raise_error_unless_valid_record_mode

  log "Initialized with options: #{@options.inspect}"
end

Instance Attribute Details

- (Boolean, Hash) erb (readonly)

The cassette's ERB option. The file will be treated as an ERB template if this has a truthy value. A hash, if provided, will be used as local variables for the ERB template.

Returns:

  • (Boolean, Hash)

    The cassette's ERB option. The file will be treated as an ERB template if this has a truthy value. A hash, if provided, will be used as local variables for the ERB template.



34
35
36
# File 'lib/vcr/cassette.rb', line 34

def erb
  @erb
end

- (Array<Symbol, #call>) match_requests_on (readonly)

List of request matchers. Used to find a response from an existing HTTP interaction to play back.

Returns:

  • (Array<Symbol, #call>)

    List of request matchers. Used to find a response from an existing HTTP interaction to play back.



29
30
31
# File 'lib/vcr/cassette.rb', line 29

def match_requests_on
  @match_requests_on
end

- (#to_s) name (readonly)

The name of the cassette. Used to determine the cassette's file name.

Returns:

  • (#to_s)

    The name of the cassette. Used to determine the cassette's file name.

See Also:



21
22
23
# File 'lib/vcr/cassette.rb', line 21

def name
  @name
end

- (Integer?) re_record_interval (readonly)

How frequently (in seconds) the cassette should be re-recorded.

Returns:

  • (Integer, nil)

    How frequently (in seconds) the cassette should be re-recorded.



37
38
39
# File 'lib/vcr/cassette.rb', line 37

def re_record_interval
  @re_record_interval
end

- (Symbol) record_mode (readonly)

The record mode. Determines whether the cassette records HTTP interactions, plays them back, or does both.

Returns:

  • (Symbol)

    The record mode. Determines whether the cassette records HTTP interactions, plays them back, or does both.



25
26
27
# File 'lib/vcr/cassette.rb', line 25

def record_mode
  @record_mode
end

- (Array<Symbol>) tags (readonly)

If set, VCR::Configuration#before_record and VCR::Configuration#before_playback hooks with a corresponding tag will apply.

Returns:



41
42
43
# File 'lib/vcr/cassette.rb', line 41

def tags
  @tags
end

Instance Method Details

- (Object) eject

Ejects the current cassette. The cassette will no longer be used. In addition, any newly recorded HTTP interactions will be written to disk.



59
60
61
62
# File 'lib/vcr/cassette.rb', line 59

def eject
  write_recorded_interactions_to_disk
  http_interactions.assert_no_unused_interactions! unless @allow_unused_http_interactions
end

- (String) file

Note:

VCR will take care of sanitizing the cassette name to make it a valid file name.

The file for this cassette.

Returns:

  • (String)

    The file for this cassette.

Raises:

  • (NotImplementedError)

    if the configured cassette persister does not support resolving file paths.



89
90
91
92
93
94
# File 'lib/vcr/cassette.rb', line 89

def file
  unless @persister.respond_to?(:absolute_path_to_file)
    raise NotImplementedError, "The configured cassette persister does not support resolving file paths"
  end
  @persister.absolute_path_to_file(storage_key)
end

- (Boolean) recording?

Whether or not the cassette is recording.

Returns:

  • (Boolean)

    Whether or not the cassette is recording.



97
98
99
100
101
102
103
# File 'lib/vcr/cassette.rb', line 97

def recording?
  case record_mode
    when :none; false
    when :once; raw_cassette_bytes.to_s.empty?
    else true
  end
end

- (Hash) serializable_hash

The hash that will be serialized when the cassette is written to disk.

Returns:

  • (Hash)

    The hash that will be serialized when the cassette is written to disk.



106
107
108
109
110
111
# File 'lib/vcr/cassette.rb', line 106

def serializable_hash
  {
    "http_interactions" => interactions_to_record.map(&:to_hash),
    "recorded_with"     => "VCR #{VCR.version}"
  }
end