Class: Qualspec::Recorder
- Inherits:
-
Object
- Object
- Qualspec::Recorder
- Defined in:
- lib/qualspec/recorder.rb
Class Method Summary collapse
- .available? ⇒ Boolean
- .cassette_exists?(name) ⇒ Boolean
- .configured? ⇒ Boolean
- .playback(name, &block) ⇒ Object
- .record(name, &block) ⇒ Object
- .setup(cassette_dir: '.qualspec_cassettes') ⇒ Object
-
.use_cassette(name, &block) ⇒ Object
Replay a cassette if it already exists (no API key required), otherwise record a fresh one.
Class Method Details
.available? ⇒ Boolean
6 7 8 9 10 11 |
# File 'lib/qualspec/recorder.rb', line 6 def available? require 'vcr' true rescue LoadError false end |
.cassette_exists?(name) ⇒ Boolean
68 69 70 71 |
# File 'lib/qualspec/recorder.rb', line 68 def cassette_exists?(name) require_vcr! File.exist?(File.join(VCR.configuration.cassette_library_dir, "#{name}.yml")) end |
.configured? ⇒ Boolean
45 46 47 |
# File 'lib/qualspec/recorder.rb', line 45 def configured? @configured == true end |
.playback(name, &block) ⇒ Object
54 55 56 57 |
# File 'lib/qualspec/recorder.rb', line 54 def playback(name, &block) setup unless configured? VCR.use_cassette(name, record: :none, &block) end |
.record(name, &block) ⇒ Object
49 50 51 52 |
# File 'lib/qualspec/recorder.rb', line 49 def record(name, &block) setup unless configured? VCR.use_cassette(name, &block) end |
.setup(cassette_dir: '.qualspec_cassettes') ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/qualspec/recorder.rb', line 13 def setup(cassette_dir: '.qualspec_cassettes') require_vcr! recorder = self VCR.configure do |config| config.cassette_library_dir = cassette_dir config.hook_into :faraday config. = { record: :new_episodes, match_requests_on: %i[method uri body_without_model] } # Filter out API keys — guard against adding duplicate filters unless @api_key_filter_registered config.filter_sensitive_data('<API_KEY>') { Qualspec.configuration.api_key } @api_key_filter_registered = true end end # Register custom matcher once — ignores the `model` field so cassettes # recorded with one model work in CI where a different model is configured. unless @matcher_registered VCR.configure do |config| config.register_request_matcher(:body_without_model) do |r1, r2| recorder.send(:normalize_body_for_match, r1.body) == recorder.send(:normalize_body_for_match, r2.body) end end @matcher_registered = true end @configured = true end |
.use_cassette(name, &block) ⇒ Object
Replay a cassette if it already exists (no API key required), otherwise record a fresh one. Ideal for examples that ship a committed cassette so they run for free, but still record on first run.
62 63 64 65 66 |
# File 'lib/qualspec/recorder.rb', line 62 def use_cassette(name, &block) setup unless configured? mode = cassette_exists?(name) ? :none : :new_episodes VCR.use_cassette(name, record: mode, &block) end |