Class: VCR::Cassette
- Inherits:
-
Object
- Object
- VCR::Cassette
- 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/json.rb,
lib/vcr/cassette/serializers/syck.rb,
lib/vcr/cassette/serializers/yaml.rb,
lib/vcr/cassette/serializers/psych.rb,
lib/vcr/cassette/http_interaction_list.rb,
lib/vcr/cassette/persisters/file_system.rb,
lib/vcr/cassette/serializers/compressed.rb
Overview
The media VCR uses to store HTTP interactions for later re-use.
Defined Under Namespace
Classes: Persisters, Serializers
Constant Summary collapse
- 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
-
#clean_outdated_http_interactions ⇒ Boolean?
readonly
Should outdated interactions be recorded back to file.
-
#erb ⇒ Boolean, Hash
readonly
The cassette's ERB option.
-
#match_requests_on ⇒ Array<Symbol, #call>
readonly
List of request matchers.
-
#name ⇒ #to_s
readonly
The name of the cassette.
-
#re_record_interval ⇒ Integer?
readonly
How frequently (in seconds) the cassette should be re-recorded.
-
#record_mode ⇒ Symbol
readonly
The record mode.
-
#record_on_error ⇒ Boolean
readonly
The cassette's record_on_error mode.
-
#tags ⇒ Array<Symbol>
readonly
If set, VCR::Configuration#before_record and VCR::Configuration#before_playback hooks with a corresponding tag will apply.
Instance Method Summary collapse
-
#eject(options = {}) ⇒ Object
Ejects the current cassette.
-
#file ⇒ String
The file for this cassette.
-
#initialize(name, options = {}) ⇒ Cassette
constructor
A new instance of Cassette.
-
#linked? ⇒ Boolean
False unless wrapped with LinkedCassette.
-
#originally_recorded_at ⇒ Time?
The
recorded_at
time of the first HTTP interaction or nil if the cassette has no prior HTTP interactions. -
#recording? ⇒ Boolean
Whether or not the cassette is recording.
-
#serializable_hash ⇒ Hash
The hash that will be serialized when the cassette is written to disk.
- #should_write_recorded_interactions_to_disk? ⇒ Boolean
Constructor Details
#initialize(name, options = {}) ⇒ Cassette
Returns a new instance of Cassette.
55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/vcr/cassette.rb', line 55 def initialize(name, = {}) @name = name @options = VCR.configuration..merge() @mutex = Mutex.new raise_error_unless_valid_record_mode log "Initialized with options: #{@options.inspect}" end |
Instance Attribute Details
#clean_outdated_http_interactions ⇒ Boolean? (readonly)
Returns Should outdated interactions be recorded back to file.
47 48 49 |
# File 'lib/vcr/cassette.rb', line 47 def clean_outdated_http_interactions @clean_outdated_http_interactions end |
#erb ⇒ Boolean, Hash (readonly)
Returns 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.
41 42 43 |
# File 'lib/vcr/cassette.rb', line 41 def erb @erb end |
#match_requests_on ⇒ Array<Symbol, #call> (readonly)
Returns List of request matchers. Used to find a response from an existing HTTP interaction to play back.
36 37 38 |
# File 'lib/vcr/cassette.rb', line 36 def match_requests_on @match_requests_on end |
#name ⇒ #to_s (readonly)
Returns The name of the cassette. Used to determine the cassette's file name.
21 22 23 |
# File 'lib/vcr/cassette.rb', line 21 def name @name end |
#re_record_interval ⇒ Integer? (readonly)
Returns How frequently (in seconds) the cassette should be re-recorded.
44 45 46 |
# File 'lib/vcr/cassette.rb', line 44 def re_record_interval @re_record_interval end |
#record_mode ⇒ Symbol (readonly)
Returns 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 |
#record_on_error ⇒ Boolean (readonly)
Returns The cassette's record_on_error mode. When the code that uses the cassette raises an error (for example a test failure) and record_on_error is set to false, no cassette will be recorded. This is useful when you are TDD'ing an API integration: when an error is raised that often means your request is invalid, so you don't want the cassette to be recorded.
32 33 34 |
# File 'lib/vcr/cassette.rb', line 32 def record_on_error @record_on_error end |
#tags ⇒ Array<Symbol> (readonly)
Returns If set, VCR::Configuration#before_record and VCR::Configuration#before_playback hooks with a corresponding tag will apply.
51 52 53 |
# File 'lib/vcr/cassette.rb', line 51 def @tags end |
Instance Method Details
#eject(options = {}) ⇒ Object
This is not intended to be called directly. Use VCR.eject_cassette
instead.
Ejects the current cassette. The cassette will no longer be used. In addition, any newly recorded HTTP interactions will be written to disk.
75 76 77 78 79 80 81 |
# File 'lib/vcr/cassette.rb', line 75 def eject( = {}) write_recorded_interactions_to_disk if should_write_recorded_interactions_to_disk? if should_assert_no_unused_interactions? && ![:skip_no_unused_interactions_assertion] http_interactions.assert_no_unused_interactions! end end |
#file ⇒ String
VCR will take care of sanitizing the cassette name to make it a valid file name.
Returns The file for this cassette.
129 130 131 132 133 134 |
# File 'lib/vcr/cassette.rb', line 129 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 |
#linked? ⇒ Boolean
Returns false unless wrapped with LinkedCassette.
168 169 170 |
# File 'lib/vcr/cassette.rb', line 168 def linked? false end |
#originally_recorded_at ⇒ Time?
Returns The recorded_at
time of the first HTTP interaction
or nil if the cassette has no prior HTTP interactions.
163 164 165 |
# File 'lib/vcr/cassette.rb', line 163 def originally_recorded_at @originally_recorded_at ||= previously_recorded_interactions.map(&:recorded_at).min end |
#recording? ⇒ Boolean
Returns Whether or not the cassette is recording.
137 138 139 140 141 142 143 |
# File 'lib/vcr/cassette.rb', line 137 def recording? case record_mode when :none; false when :once; raw_cassette_bytes.to_s.empty? else true end end |
#serializable_hash ⇒ Hash
Returns The hash that will be serialized when the cassette is written to disk.
146 147 148 149 150 151 |
# File 'lib/vcr/cassette.rb', line 146 def serializable_hash { "http_interactions" => interactions_to_record.map(&:to_hash), "recorded_with" => "VCR #{VCR.version}" } end |
#should_write_recorded_interactions_to_disk? ⇒ Boolean
94 95 96 |
# File 'lib/vcr/cassette.rb', line 94 def should_write_recorded_interactions_to_disk? !run_failed? || record_on_error end |