module Subshell

Constants

VERSION

Public Class Methods

exec(command, options = {}) click to toggle source
# File lib/subshell.rb, line 20
def exec(command, options = {})
  options = @default_options.merge(options)
  output, exit_status = run_command(command, options)

  if exit_status == options[:expected_status]
    log_debug options, "Subshell.exec \"#{command}\" succeeded with output:\n#{output}"
    output
  else
    error = "Subshell.exec #{command} failed with status #{exit_status} (expected #{options[:expected_status]}):\n#{output}"
    log_error options, error
    fail error
  end
end
set_defaults(options) click to toggle source
# File lib/subshell.rb, line 34
def set_defaults(options)
  @default_options.merge!(options)
end

Private Class Methods

log_debug(options, message) click to toggle source
# File lib/subshell.rb, line 57
def log_debug(options, message)
  log_message options, :debug, message
end
log_error(options, message) click to toggle source
# File lib/subshell.rb, line 61
def log_error(options, message)
  log_message options, :error, message
end
log_message(options, level, message) click to toggle source
# File lib/subshell.rb, line 50
def log_message(options, level, message)
  unless options[:quiet]
    options[:logger].send(level, message) if options[:logger]
    puts message if options[:debug]
  end
end
run_command(command, options = {}) click to toggle source
# File lib/subshell.rb, line 40
def run_command(command, options = {})
  log_debug options,"Subshell.exec: #{command}"
  command = "#{command} 2>&1" if options[:redirect_stderr_to_stdout]
  process = IO.popen(command, 'r')
  _pid, status = Process.wait2(process.pid)
  output = process.read
  output.strip! if options[:strip_whitespace]
  [output, status.exitstatus]
end