class Async::HTTP::Body::File
def self.open(path, *args)
def self.open(path, *args) self.new(::File.open(path), *args) end
def close(error = nil)
def close(error = nil) @file.close @remaining = 0 super end
def empty?
def empty? @remaining == 0 end
def initialize(file, range = nil, block_size: BLOCK_SIZE)
def initialize(file, range = nil, block_size: BLOCK_SIZE) @file = file @block_size = block_size if range @file.seek(range.min) @offset = range.min @length = @remaining = range.size else @offset = 0 @length = @remaining = @file.size end end
def inspect
def inspect "\#<#{self.class} file=#{@file.inspect} offset=#{@offset} remaining=#{@remaining}>" end
def join
def join return "" if @remaining == 0 buffer = @file.read(@remaining) @remaining = 0 return buffer end
def read
def read if @remaining > 0 amount = [@remaining, @block_size].min if chunk = @file.read(amount) @remaining -= chunk.bytesize return chunk end end end
def rewind
def rewind @file.seek(@offset) end