class Foreman::Process

Attributes

command[R]
env[R]

Public Class Methods

new(command, options={}) click to toggle source

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

cwd() click to toggle source

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(options={}) click to toggle source

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
expanded_command(custom_env={}) click to toggle source

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(options={}) click to toggle source

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