class Coque::Rb

Constants

NOOP

Attributes

block[R]
post_block[R]
pre_block[R]

Public Class Methods

new(context = Context.new, &block) click to toggle source
# File lib/coque/rb.rb, line 5
def initialize(context = Context.new, &block)
  if block_given?
    @block = block
  else
    @block = NOOP
  end
  @pre_block = nil
  @post_block = nil
  @context = context
end

Public Instance Methods

clone() click to toggle source
# File lib/coque/rb.rb, line 16
def clone
  self.class.new(context, &block).pre(&pre_block).post(&post_block)
end
get_result() click to toggle source
# File lib/coque/rb.rb, line 34
def get_result
  stdin, stdoutr, stdoutw = get_default_fds

  pid = fork do
    STDOUT.reopen(stdoutw)
    Dir.chdir(context.dir)
    if context.disinherits_env?
      ENV.clear
    end
    context.env.each do |k,v|
      ENV[k] = v
    end
    @pre_block.call if @pre_block
    stdin.each_line(&@block)
    @post_block.call if @post_block
  end
  stdoutw.close
  Result.new(pid, stdoutr)
end
post(&block) click to toggle source
# File lib/coque/rb.rb, line 27
def post(&block)
  if block_given?
    @post_block = block
  end
  self
end
pre(&block) click to toggle source
# File lib/coque/rb.rb, line 20
def pre(&block)
  if block_given?
    @pre_block = block
  end
  self
end