+++ /dev/null
-begin
- require 'composite_io'
- require 'parts'
- require 'stringio'
-rescue LoadError
- $stderr.puts "Install the multipart-post gem."
- raise
-end
-
-module Faraday
- # Similar but not compatible with ::CompositeReadIO provided by multipart-post.
- class CompositeReadIO
- def initialize(*parts)
- @parts = parts.flatten
- @ios = @parts.map { |part| part.to_io }
- @index = 0
- end
-
- def length
- @parts.inject(0) { |sum, part| sum + part.length }
- end
-
- def rewind
- @ios.each { |io| io.rewind }
- @index = 0
- end
-
- # Read from IOs in order until `length` bytes have been received.
- 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
-
- def close
- @ios.each { |io| io.close }
- end
-
- def ensure_open_and_readable
- # Rubinius compatibility
- end
-
- private
-
- def current_io
- @ios[@index]
- end
-
- def advance_io
- @index += 1
- end
- end
-
- UploadIO = ::UploadIO
- Parts = ::Parts
-end