class Faraday::CompositeReadIO

Similar to, but not compatible with CompositeReadIO provided by the multipart-post gem. github.com/nicksieger/multipart-post/blob/master/lib/composite_io.rb

Public Class Methods

new(*parts) click to toggle source
# File lib/faraday/file_part.rb, line 67
def initialize(*parts)
  @parts = parts.flatten
  @ios = @parts.map(&:to_io)
  @index = 0
end

Public Instance Methods

close() click to toggle source

Close each of the IOs.

@return [void]

# File lib/faraday/file_part.rb, line 110
def close
  @ios.each(&:close)
end
ensure_open_and_readable() click to toggle source
# File lib/faraday/file_part.rb, line 114
def ensure_open_and_readable
  # Rubinius compatibility
end
length() click to toggle source

@return [Integer] sum of the lengths of all the parts

# File lib/faraday/file_part.rb, line 74
def length
  @parts.inject(0) { |sum, part| sum + part.length }
end
read(length = nil, outbuf = nil) click to toggle source

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

@param length [Integer, nil] @param outbuf [String, nil]

# File lib/faraday/file_part.rb, line 90
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&.zero?
    end
    advance_io
  end
  !got_result && length ? nil : outbuf
end
rewind() click to toggle source

Rewind each of the IOs and reset the index to 0.

@return [void]

# File lib/faraday/file_part.rb, line 81
def rewind
  @ios.each(&:rewind)
  @index = 0
end

Private Instance Methods

advance_io() click to toggle source
# File lib/faraday/file_part.rb, line 124
def advance_io
  @index += 1
end
current_io() click to toggle source
# File lib/faraday/file_part.rb, line 120
def current_io
  @ios[@index]
end