Sha256: fc0c52a25d3621b52dd810fba9c863f8ac74ca9a831cefd90a424df44712878a

Contents?: true

Size: 805 Bytes

Versions: 1

Compression:

Stored size: 805 Bytes

Contents

require "open3"

class Rbsh::Pipeline < BasicObject
  attr_writer :_queue

  def initialize(name, *args, &block)
    _push(name, *args)
  end

  def to_ary
    commands = _queue.map do |c|
      [ c[:command], *c[:args] ].compact.map(&:to_s)
    end

    result = []
    ::Open3.pipeline_rw(*commands) do |stdin, stdout, wait_threads|
      stdin.close
      result = stdout.readlines
    end
    result << "\n" if result == []
    result
  end

  def to_s
    result = to_ary
    result.join("")
  end
  alias inspect to_s
  alias to_str to_s

  def equal?(str)
    to_s == str
  end

  def method_missing(name, *args, &block)
    _push(name, *args)
    self
  end

  protected

  def _push(name, *args, &block)
    _queue.push(command: name, args: args)
  end

  def _queue
    @_queue ||= []
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rbsh-0.0.1 lib/rbsh/pipeline.rb