class Cocaine::CommandLine
Attributes
logger[RW]
runner[RW]
exit_status[R]
Public Class Methods
new(binary, params = "", options = {})
click to toggle source
# File lib/cocaine/command_line.rb, line 54 def initialize(binary, params = "", options = {}) @binary = binary.dup @params = params.dup @options = options.dup @runner = @options.delete(:runner) || self.class.runner @logger = @options.delete(:logger) || self.class.logger @swallow_stderr = @options.delete(:swallow_stderr) @expected_outcodes = @options.delete(:expected_outcodes) || [0] @environment = @options.delete(:environment) || {} @runner_options = @options.delete(:runner_options) || {} end
Public Instance Methods
command(interpolations = {})
click to toggle source
# File lib/cocaine/command_line.rb, line 66 def command(interpolations = {}) cmd = [@binary, interpolate(@params, interpolations)] cmd << bit_bucket if @swallow_stderr cmd.join(" ").strip end
environment()
click to toggle source
# File lib/cocaine/command_line.rb, line 17 def environment @supplemental_environment ||= {} end
fake!()
click to toggle source
# File lib/cocaine/command_line.rb, line 29 def fake! @runner = FakeRunner.new end
java?()
click to toggle source
# File lib/cocaine/command_line.rb, line 37 def java? RUBY_PLATFORM =~ /java/ end
path()
click to toggle source
# File lib/cocaine/command_line.rb, line 7 def path @supplemental_path end
path=(supplemental_path)
click to toggle source
# File lib/cocaine/command_line.rb, line 11 def path=(supplemental_path) @supplemental_path = supplemental_path @supplemental_environment ||= {} @supplemental_environment['PATH'] = (Array(supplemental_path) + [ENV['PATH']]).join(File::PATH_SEPARATOR) end
run(interpolations = {})
click to toggle source
# File lib/cocaine/command_line.rb, line 72 def run(interpolations = {}) output = '' @exit_status = nil begin full_command = command(interpolations) log("#{colored("Command")} :: #{full_command}") output = execute(full_command) rescue Errno::ENOENT => e raise Cocaine::CommandNotFoundError, e.message ensure @exit_status = $?.exitstatus if $?.respond_to?(:exitstatus) end if @exit_status == 127 raise Cocaine::CommandNotFoundError end unless @expected_outcodes.include?(@exit_status) message = [ "Command '#{full_command}' returned #{@exit_status}. Expected #{@expected_outcodes.join(", ")}", "Here is the command output:\n", output ].join("\n") raise Cocaine::ExitStatusError, message end output end
runner()
click to toggle source
# File lib/cocaine/command_line.rb, line 21 def runner @runner || best_runner end
runner_options()
click to toggle source
# File lib/cocaine/command_line.rb, line 25 def runner_options @default_runner_options ||= {} end
unfake!()
click to toggle source
# File lib/cocaine/command_line.rb, line 33 def unfake! @runner = nil end
unix?()
click to toggle source
# File lib/cocaine/command_line.rb, line 100 def unix? RbConfig::CONFIG['host_os'] !~ /mswin|mingw/ end
Private Instance Methods
best_runner()
click to toggle source
# File lib/cocaine/command_line.rb, line 43 def best_runner [PosixRunner, ProcessRunner, BackticksRunner].detect do |runner| runner.supported? end.new end
bit_bucket()
click to toggle source
# File lib/cocaine/command_line.rb, line 165 def bit_bucket unix? ? "2>/dev/null" : "2>NUL" end
colored(text, ansi_color = "\e[32m")
click to toggle source
# File lib/cocaine/command_line.rb, line 106 def colored(text, ansi_color = "\e[32m") if @logger && @logger.respond_to?(:tty?) && @logger.tty? "#{ansi_color}#{text}\e[0m" else text end end
execute(command)
click to toggle source
# File lib/cocaine/command_line.rb, line 120 def execute(command) runner.call(command, environment, runner_options) end
interpolate(pattern, interpolations)
click to toggle source
# File lib/cocaine/command_line.rb, line 132 def interpolate(pattern, interpolations) interpolations = stringify_keys(interpolations) pattern.gsub(/:\{?(\w+)\b\}?/) do |match| key = match.tr(":{}", "") if interpolations.key?(key) shell_quote_all_values(interpolations[key]) else match end end end
log(text)
click to toggle source
# File lib/cocaine/command_line.rb, line 114 def log(text) if @logger @logger.info(text) end end
shell_quote(string)
click to toggle source
# File lib/cocaine/command_line.rb, line 152 def shell_quote(string) return "" if string.nil? if unix? if string.empty? "''" else string.split("'").map{|m| "'#{m}'" }.join("\\'") end else %Q{"#{string}"} end end
shell_quote_all_values(values)
click to toggle source
# File lib/cocaine/command_line.rb, line 148 def shell_quote_all_values(values) Array(values).map(&method(:shell_quote)).join(" ") end
stringify_keys(hash)
click to toggle source
# File lib/cocaine/command_line.rb, line 144 def stringify_keys(hash) Hash[hash.map{ |k, v| [k.to_s, v] }] end