class WebSocketVCR::Cassette

Attributes

name[R]
options[R]
recording[R]
recording?[R]
sessions[R]

Public Class Methods

new(name, options) click to toggle source
# File lib/simple_websocket_vcr/cassette.rb, line 12
def initialize(name, options)
  @name = name
  @options = options
  @using_json = WebSocketVCR.configuration.json_cassettes
  @name += @using_json ? '.json' : '.yml'

  if File.exist?(filename) && @options[:record] != :all
    @recording = false
    @sessions = initialize_sessions filename
  else
    fail "No cassette '#{name}' found and recording has been turned off" if @options[:record] == :none
    @recording = true
    @sessions = []
  end
end

Public Instance Methods

next_session() click to toggle source
# File lib/simple_websocket_vcr/cassette.rb, line 28
def next_session
  if recording?
    erb_variables = @options[:reverse_substitution] ? @options[:erb] : nil
    session = if @using_json
                RecordedJsonSession.new([], erb_variables)
              else
                RecordedYamlSession.new([], erb_variables)
              end
    @sessions.push(session)
    @sessions.last
  else
    fail NoMoreSessionsError if @sessions.empty?
    @sessions.shift
  end
end
save() click to toggle source
# File lib/simple_websocket_vcr/cassette.rb, line 44
def save
  return unless recording?
  dirname = File.dirname(filename)
  # make sure the directory structure is there
  FileUtils.mkdir_p(dirname) unless File.directory?(dirname)
  if @using_json
    text = JSON.pretty_generate(@sessions.map(&:record_entries))
  else
    text = { 'websocket_interactions' => @sessions.map(&:record_entries) }.to_yaml(Indent: 8)
  end
  File.open(filename, 'w') { |f| f.write(text) }
end

Protected Instance Methods

filename() click to toggle source
# File lib/simple_websocket_vcr/cassette.rb, line 59
def filename
  "#{WebSocketVCR.configuration.cassette_library_dir}/#{name}"
end

Private Instance Methods

initialize_sessions(filename) click to toggle source
# File lib/simple_websocket_vcr/cassette.rb, line 65
def initialize_sessions(filename)
  file_content = File.open(filename, &:read)

  # parse JSON/YAML
  if @using_json
    parsed_content = JSON.parse(file_content)
    sessions = RecordedJsonSession.load(parsed_content, @options[:erb])
  else
    parsed_content = YAML.load(file_content)
    sessions = RecordedYamlSession.load(parsed_content, @options[:erb])
  end
  sessions
end