class Protocol::HTTP::Body::File
def self.open(path, *arguments, **options)
def self.open(path, *arguments, **options) self.new(::File.open(path, MODE), *arguments, **options) end
def buffered
def buffered self.class.new(@file.dup, @range, block_size: @block_size) 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, size: file.size, block_size: BLOCK_SIZE)
def initialize(file, range = nil, size: file.size, block_size: BLOCK_SIZE) @file = file @range = range @block_size = block_size if range @file.seek(range.min) @offset = range.min @length = @remaining = range.size else @file.seek(0) @offset = 0 @length = @remaining = 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 ready?
def ready? true end
def rewind
def rewind @file.seek(@offset) @remaining = @length end
def rewindable?
def rewindable? true end