class Kaiser::CommandRunner
Make running easy
Public Class Methods
new(out, cmd)
click to toggle source
# File lib/kaiser/command_runner.rb, line 19 def initialize(out, cmd) @out = out @cmd = cmd.tr "\n", ' ' end
run(out, cmd, &block)
click to toggle source
# File lib/kaiser/command_runner.rb, line 9 def self.run(out, cmd, &block) out.puts "> #{cmd}" CommandRunner.new(out, cmd).run_command(&block) end
run!(out, cmd, &block)
click to toggle source
# File lib/kaiser/command_runner.rb, line 14 def self.run!(out, cmd, &block) status = run(out, cmd, &block) raise Kaiser::CmdError.new(cmd, status) if status.to_s != '0' end
Public Instance Methods
print_and_return_status(status = 0)
click to toggle source
# File lib/kaiser/command_runner.rb, line 24 def print_and_return_status(status = 0) @out.puts "$? = #{status}" @out.flush status end
print_lines(lines) { |chomp| ... }
click to toggle source
# File lib/kaiser/command_runner.rb, line 30 def print_lines(lines) lines.each do |line| @out.print line @out.flush yield line.chomp if block_given? end rescue Errno::EIO # Happens when `lines` stream is closed end
run_command(&block)
click to toggle source
# File lib/kaiser/command_runner.rb, line 40 def run_command(&block) PTY.spawn("#{@cmd} 2>&1") do |stdout, _stdin, pid| print_lines(stdout, &block) Process.wait(pid) end print_and_return_status $CHILD_STATUS.exitstatus rescue PTY::ChildExited => e print_and_return_status(e.status) end