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