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