Class: CompositeReadIO

### Home Classes Methods

### In Files

- lib/composite_io.rb

### Parent

Object

### Methods

- ::new
- #read
- #rewind

### Class/Module Index

Quicksearch

- Net
- Net::HTTP
- Net::HTTP::Post
- Net::HTTP::Post::Multipart
- Net::HTTP::Put
- Net::HTTP::Put::Multipart
- Parts
- Parts::EpiloguePart
- Parts::FilePart
- Parts::ParamPart
- CompositeReadIO
- MultipartPost
- Multipartable
- UploadIO

No matching classes.

# CompositeReadIO

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"

### Public Class Methods

new(*ios) click to toggle source

Create a new composite-read IO from the arguments, all of which should respond to read in a manner consistent with IO.

    # File lib/composite_io.rb, line 18
    def initialize(*ios)
      @ios = ios.flatten
      @index = 0
    end

### Public Instance Methods

read(length = nil, outbuf = nil) click to toggle source

Read from IOs in order until `length` bytes have been received.

    # File lib/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() click to toggle source

    # File lib/composite_io.rb, line 41
    def rewind
      @ios.each { |io| io.rewind }
      @index = 0
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.