Sha256: 759830ae6bee6e51de25803fdd630a1e930c3465496cfbb3b7910549742a3300

Contents?: true

Size: 1.14 KB

Versions: 1

Compression:

Stored size: 1.14 KB

Contents

require 'childprocess'
require 'tempfile'
require 'shellwords'

module Aruba
  class Process
    include Shellwords

    def initialize(cmd, exit_timeout, io_wait)
      @exit_timeout = exit_timeout
      @io_wait = io_wait

      @out = Tempfile.new("aruba-out")
      @err = Tempfile.new("aruba-err")
      @process = ChildProcess.build(*shellwords(cmd))
      @process.io.stdout = @out
      @process.io.stderr = @err
      @process.duplex = true
    end

    def run!(&block)
      @process.start
      yield self if block_given?
    end

    def stdin
      wait_for_io do
        @process.io.stdin.sync = true
        @process.io.stdin
      end
    end

    def output
      stdout + stderr
    end

    def stdout
      wait_for_io do
        @out.rewind
        @out.read
      end
    end

    def stderr
      wait_for_io do
        @err.rewind
        @err.read
      end
    end

    def stop
      if @process
        stdout && stderr # flush output
        @process.poll_for_exit(@exit_timeout)
        @process.exit_code
      end
    end

    private

    def wait_for_io(&block)
      sleep @io_wait if @process.alive?
      yield
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
aruba-0.3.7 lib/aruba/process.rb