Class: Kaiser::CommandRunner

Inherits:
Object
  • Object
show all
Defined in:
lib/kaiser/command_runner.rb

Overview

Make running easy

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(out, cmd) ⇒ CommandRunner

Returns a new instance of CommandRunner.



19
20
21
22
# File 'lib/kaiser/command_runner.rb', line 19

def initialize(out, cmd)
  @out = out
  @cmd = cmd.tr "\n", ' '
end

Class Method Details

.run(out, cmd, &block) ⇒ Object



9
10
11
12
# 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) ⇒ Object

Raises:



14
15
16
17
# 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

Instance Method Details



24
25
26
27
28
# File 'lib/kaiser/command_runner.rb', line 24

def print_and_return_status(status = 0)
  @out.puts "$? = #{status}"
  @out.flush
  status
end


30
31
32
33
34
35
36
37
38
# 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) ⇒ Object



40
41
42
43
44
45
46
47
48
# 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