Class: CompositeReadIO
Overview
Concatenate together multiple IO objects into a single, composite IO object for purposes of reading as a single stream.
Usage:
crio = CompositeReadIO.new(StringIO.new('one'), StringIO.new('two'), StringIO.new('three'))
puts crio.read # => "onetwothree"
  Instance Method Summary collapse
- 
  
    
      #initialize(*ios)  ⇒ CompositeReadIO 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    
Create a new composite-read IO from the arguments, all of which should respond to #read in a manner consistent with IO.
 - 
  
    
      #read(length = nil, outbuf = nil)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Read from IOs in order until ‘length` bytes have been received.
 - #rewind ⇒ Object
 
Constructor Details
#initialize(*ios) ⇒ CompositeReadIO
Create a new composite-read IO from the arguments, all of which should respond to #read in a manner consistent with IO.
      18 19 20 21  | 
    
      # File 'lib/puppet/feature/composite_io.rb', line 18 def initialize(*ios) @ios = ios.flatten @index = 0 end  | 
  
Instance Method Details
#read(length = nil, outbuf = nil) ⇒ Object
Read from IOs in order until ‘length` bytes have been received.
      24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39  | 
    
      # File 'lib/puppet/feature/composite_io.rb', line 24 def read(length = nil, outbuf = nil) got_result = false outbuf = outbuf ? outbuf.replace("") : "" while io = current_io if result = io.read(length) got_result ||= !result.nil? result.force_encoding("BINARY") if result.respond_to?(:force_encoding) outbuf << result length -= result.length if length break if length == 0 end advance_io end (!got_result && length) ? nil : outbuf end  | 
  
#rewind ⇒ Object
      41 42 43 44  | 
    
      # File 'lib/puppet/feature/composite_io.rb', line 41 def rewind @ios.each { |io| io.rewind } @index = 0 end  |