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