Initial import
[ruby-io-mixins.git] / test / read_joiner.rb
1 class ReadJoiner
2   include IO::Readable
3   extend  IO::Openable
4
5   def initialize(*streams)
6     @streams = streams
7     rewind
8   end
9
10   def sysread(length)
11     buffer = ""
12     return buffer if length == 0
13     while buffer.length < length && @streams[@index]
14       begin
15         buffer << @streams[@index].sysread(length-buffer.length)
16       rescue EOFError
17         @index += 1
18       end
19     end
20     return buffer if buffer.length == length || buffer.length > 0
21     raise EOFError, "end of file reached", caller
22   end
23
24   def close_read
25     @streams.each {|s| s.close}
26     @index = @streams.size - 1 if @index >= @streams.size
27     nil
28   end
29
30   def closed_read?
31     @streams.all? {|s|s.closed?}
32   end
33
34   def rewind
35     @streams.each {|s| s.rewind}
36     self.lineno = @index = 0
37   end
38
39 end
40