class ChefAPI::Multipart::MultiIO

Attributes

ios[R]

Public Class Methods

new(*ios) click to toggle source
# File lib/chef-api/multipart.rb, line 43
def initialize(*ios)
  @ios = ios
  @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/chef-api/multipart.rb, line 49
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/chef-api/multipart.rb, line 67
def rewind
  @ios.each(&:rewind)
  @index = 0
end

Private Instance Methods

advance_io() click to toggle source
# File lib/chef-api/multipart.rb, line 78
def advance_io
  @index += 1
end
current_io() click to toggle source
# File lib/chef-api/multipart.rb, line 74
def current_io
  @ios[@index]
end