class BrickFTP::Utils::ChunkIO

Attributes

chunk_size[R]
io[R]

Public Class Methods

new(io, chunk_size: nil) click to toggle source

Wrap IO object.

@param [IO, StringIO] io an IO object. @param [Integer] chunk_size Size of chunk.

This option is ignored if `io` is `StringIO`.
# File lib/brick_ftp/utils/chunk_io.rb, line 18
def initialize(io, chunk_size: nil)
  @io = io
  @chunk_size = chunk_size
end

Public Instance Methods

each(&block) click to toggle source

Iterate with chunked IO object.

@yield [chunk] Give a chunk IO object to block. @yieldparam [StringIO] chunk a chunked IO object.

# File lib/brick_ftp/utils/chunk_io.rb, line 28
def each(&block)
  return enum_for(__method__) unless block

  if chunk_size && io.is_a?(IO)
    each_chunk(&block)
  else
    whole(&block)
  end
end

Private Instance Methods

each_chunk() { |chunk| ... } click to toggle source
# File lib/brick_ftp/utils/chunk_io.rb, line 44
def each_chunk
  eof = false
  offset = 0
  until eof
    Tempfile.create('chunk-io') do |chunk|
      copied = IO.copy_stream(io, chunk, chunk_size, offset)
      eof = copied.zero?
      next if eof

      offset += copied
      chunk.rewind

      yield chunk
    end
  end
end
whole() { |io| ... } click to toggle source
# File lib/brick_ftp/utils/chunk_io.rb, line 40
def whole
  yield io
end