class Aruba::Processes::InProcess

Run command in your ruby process

‘InProcess` is not meant for direct use - `InProcess.new` - by users. Only it’s public methods are part of the public API of aruba, e.g. ‘#stdin`, `#stdout`.

@private

Attributes

exit_status[R]
main_class[R]

@private

Public Class Methods

match?(mode) click to toggle source

Use only if mode is in_process

# File lib/aruba/processes/in_process.rb, line 19
def self.match?(mode)
  mode == :in_process || (mode.is_a?(Class) && mode <= InProcess)
end
new(cmd, exit_timeout, io_wait_timeout, working_directory, environment = Aruba.platform.environment_variables.hash_from_env, main_class = nil, stop_signal = nil, startup_wait_time = 0) click to toggle source
Calls superclass method Aruba::Processes::BasicProcess::new
# File lib/aruba/processes/in_process.rb, line 49
def initialize(cmd, exit_timeout, io_wait_timeout, working_directory, # rubocop:disable Metrics/ParameterLists
               environment = Aruba.platform.environment_variables.hash_from_env,
               main_class = nil, stop_signal = nil, startup_wait_time = 0)
  @cmd               = cmd
  @argv              = arguments
  @stdin             = StringIO.new
  @stdout            = StringIO.new
  @stderr            = StringIO.new
  @kernel            = FakeKernel.new

  super
end

Public Instance Methods

close_io(name) click to toggle source

Close io

# File lib/aruba/processes/in_process.rb, line 111
def close_io(name)
  unless [:stdin, :stdout, :stderr].include? name
    raise ArgumentError, "Only stdin stdout and stderr are allowed to close"
  end

  get_instance_variable(name.to_sym).close
end
interactive?() click to toggle source
# File lib/aruba/processes/in_process.rb, line 131
def interactive?
  false
end
pid() click to toggle source

Output pid of process

This is the PID of the ruby process! So be careful

# File lib/aruba/processes/in_process.rb, line 127
def pid
  $PROCESS_ID
end
start() { |self| ... } click to toggle source

Start command

# File lib/aruba/processes/in_process.rb, line 63
def start
  raise "You need to call aruba.config.main_class = YourMainClass" unless main_class

  @started = true

  Dir.chdir @working_directory do
    before_run

    Aruba.platform.with_environment environment.merge("PWD" => @working_directory) do
      main_class.new(@argv, @stdin, @stdout, @stderr, @kernel).execute!
    end

    after_run

    yield self if block_given?
  end
end
stderr(*) click to toggle source

Access stderr

# File lib/aruba/processes/in_process.rb, line 98
def stderr(*)
  @stderr.string
end
stdin() click to toggle source

Access stdin

# File lib/aruba/processes/in_process.rb, line 88
def stdin
  @stdin.string
end
stdout(*) click to toggle source

Access stdout

# File lib/aruba/processes/in_process.rb, line 93
def stdout(*)
  @stdout.string
end
stop(*) click to toggle source

Stop command

# File lib/aruba/processes/in_process.rb, line 82
def stop(*)
  @started     = false
  @exit_status = @kernel.exitstatus
end
terminate() click to toggle source

Terminate program

# File lib/aruba/processes/in_process.rb, line 120
def terminate
  stop
end
write(input) click to toggle source

Write strint to stdin

@param [String] input

Write string to stdin in
# File lib/aruba/processes/in_process.rb, line 106
def write(input)
  @stdin.write input
end