class Impersonator::RecordMode

The state of a {Recording recording} in record mode

Attributes

recording_path[R]

recording file path

Public Class Methods

new(recording_path) click to toggle source

@param [String] recording_path the file path to the recording file

# File lib/impersonator/record_mode.rb, line 10
def initialize(recording_path)
  @recording_path = recording_path
end

Public Instance Methods

finish() click to toggle source

Finishes the record session

# File lib/impersonator/record_mode.rb, line 34
def finish
  File.open(recording_path, 'w') do |file|
    YAML.dump(@method_invocations, file)
  end
end
invoke(impersonated_object, method, args) click to toggle source

Records the method invocation

@param [Object, Double] impersonated_object @param [MethodInvocation] method @param [Array<Object>] args

# File lib/impersonator/record_mode.rb, line 26
def invoke(impersonated_object, method, args)
  spiable_block = method&.block_spy&.block
  impersonated_object.send(method.name, *args, &spiable_block).tap do |return_value|
    record(method, return_value)
  end
end
start() click to toggle source

Start a recording session

# File lib/impersonator/record_mode.rb, line 15
def start
  logger.debug 'Recording mode'
  make_sure_recordings_dir_exists
  @method_invocations = []
end

Private Instance Methods

make_sure_recordings_dir_exists() click to toggle source
# File lib/impersonator/record_mode.rb, line 51
def make_sure_recordings_dir_exists
  dirname = File.dirname(recording_path)
  FileUtils.mkdir_p(dirname) unless File.directory?(dirname)
end
record(method, return_value) click to toggle source

Record a {MethodInvocation method invocation} with a given return value @param [Method] method @param [Object] return_value

# File lib/impersonator/record_mode.rb, line 45
def record(method, return_value)
  method_invocation = MethodInvocation.new(method_instance: method, return_value: return_value)

  @method_invocations << method_invocation
end