class Foreman::Process
Attributes
Public Class Methods
Create a Process
@param [String] command The command to run @param [Hash] options
@option options [String] :cwd (./) Change to this working directory before executing the process @option options [Hash] :env ({}) Environment variables to set for this process
# File lib/foreman/process.rb, line 17 def initialize(command, options={}) @command = command @options = options.dup @options[:env] ||= {} end
Public Instance Methods
Returns the working directory for this Process
@returns [String]
# File lib/foreman/process.rb, line 76 def cwd File.expand_path(@options[:cwd] || ".") end
Exec a Process
@param [Hash] options
@option options :env ({}) Environment variables to set for this execution
@return Does not return
# File lib/foreman/process.rb, line 65 def exec(options={}) env = @options[:env].merge(options[:env] || {}) env.each { |k, v| ENV[k] = v } Dir.chdir(cwd) Kernel.exec expanded_command(env) end
Get environment-expanded command for a Process
@param [Hash] custom_env ({}) Environment variables to merge with defaults
@return [String] The expanded command
# File lib/foreman/process.rb, line 30 def expanded_command(custom_env={}) env = @options[:env].merge(custom_env) expanded_command = command.dup env.each do |key, val| expanded_command.gsub!("$#{key}", val) end expanded_command end
Run a Process
@param [Hash] options
@option options :env ({}) Environment variables to set for this execution @option options :output ($stdout) The output stream
@returns [Fixnum] pid The pid
of the process
# File lib/foreman/process.rb, line 48 def run(options={}) env = @options[:env].merge(options[:env] || {}) output = options[:output] || $stdout runner = "#{Foreman.runner}".shellescape Dir.chdir(cwd) do Process.spawn env, expanded_command(env), :out => output, :err => output end end