Sha256: c9aab2cb37a3d9e5ca29b4ed554316241232d2d386f7dd56915afcdf758eb85f

Contents?: true

Size: 1.1 KB

Versions: 7

Compression:

Stored size: 1.1 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
      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

7 entries across 7 versions & 1 rubygems

Version Path
aruba-0.3.6 lib/aruba/process.rb
aruba-0.3.5 lib/aruba/process.rb
aruba-0.3.4 lib/aruba/process.rb
aruba-0.3.3 lib/aruba/process.rb
aruba-0.3.2 lib/aruba/process.rb
aruba-0.3.1 lib/aruba/process.rb
aruba-0.3.0 lib/aruba/process.rb