Class: ConfCtl::StdLineBuffer

Inherits:
Object
  • Object
show all
Defined in:
lib/confctl/std_line_buffer.rb

Overview

Pair of line buffers for standard output/error

Instance Method Summary collapse

Constructor Details

#initialize {|out, err| ... } ⇒ StdLineBuffer

Returns a new instance of StdLineBuffer.

Yield Parameters:

  • out (String, nil)
  • err (String, nil)


6
7
8
9
10
11
# File 'lib/confctl/std_line_buffer.rb', line 6

def initialize(&block)
  @out_buffer = LineBuffer.new
  @err_buffer = LineBuffer.new
  @block = block
  @mutex = Mutex.new
end

Instance Method Details

#feed_blockProc

Get a block which can be called to feed data to the buffer

Returns:

  • (Proc)


15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/confctl/std_line_buffer.rb', line 15

def feed_block
  proc do |stdout, stderr|
    @mutex.synchronize do
      out_buffer << stdout if stdout
      err_buffer << stderr if stderr

      loop do
        out_line = out_buffer.read_line
        err_line = err_buffer.read_line
        break if out_line.nil? && err_line.nil?

        block.call(out_line, err_line)
      end
    end
  end
end

#flushObject



32
33
34
# File 'lib/confctl/std_line_buffer.rb', line 32

def flush
  block.call(out_buffer.flush, err_buffer.flush)
end