# 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