class Cheetah::DefaultRecorder

A default recorder. It uses the `Logger::INFO` level for normal messages and the `Logger::ERROR` level for messages about errors (non-zero exit status or non-empty error output). Used by {Cheetah.run} when a logger is passed.

Constants

STREAM_INFO

@private

Public Class Methods

new(logger) click to toggle source
# File lib/cheetah.rb, line 152
def initialize(logger)
  @logger = logger

  @stream_used   = { stdin: false, stdout: false, stderr: false }
  @stream_buffer = { stdin: +"", stdout: +"", stderr: +"" }
end

Public Instance Methods

record_commands(commands) click to toggle source
# File lib/cheetah.rb, line 159
def record_commands(commands)
  @logger.info "Executing #{format_commands(commands)}."
end
record_status(status) click to toggle source
# File lib/cheetah.rb, line 175
def record_status(status)
  log_stream_remainder(:stdin)
  log_stream_remainder(:stdout)
  log_stream_remainder(:stderr)

  @logger.send status.success? ? :info : :error,
               "Status: #{status.exitstatus}"
end
record_stderr(stderr) click to toggle source
# File lib/cheetah.rb, line 171
def record_stderr(stderr)
  log_stream_increment(:stderr, stderr)
end
record_stdin(stdin) click to toggle source
# File lib/cheetah.rb, line 163
def record_stdin(stdin)
  log_stream_increment(:stdin, stdin)
end
record_stdout(stdout) click to toggle source
# File lib/cheetah.rb, line 167
def record_stdout(stdout)
  log_stream_increment(:stdout, stdout)
end

Protected Instance Methods

format_commands(commands) click to toggle source
# File lib/cheetah.rb, line 186
def format_commands(commands)
  '"' + commands.map { |c| Shellwords.join(c) }.join(" | ") + '"'
end
log_stream_increment(stream, data) click to toggle source
# File lib/cheetah.rb, line 190
def log_stream_increment(stream, data)
  @stream_buffer[stream] + data =~ /\A((?:.*\n)*)(.*)\z/
  lines = Regexp.last_match(1)
  rest = Regexp.last_match(2)

  lines.each_line { |l| log_stream_line(stream, l) }

  @stream_used[stream] = true
  @stream_buffer[stream] = rest
end
log_stream_line(stream, line) click to toggle source
# File lib/cheetah.rb, line 207
def log_stream_line(stream, line)
  @logger.send(
    STREAM_INFO[stream][:method],
    "#{STREAM_INFO[stream][:name]}: #{line.chomp}"
  )
end
log_stream_remainder(stream) click to toggle source
# File lib/cheetah.rb, line 201
def log_stream_remainder(stream)
  return if !@stream_used[stream] || @stream_buffer[stream].empty?

  log_stream_line(stream, @stream_buffer[stream])
end