class Async::HTTP::Body::Rewindable
A body which buffers all it’s contents as it is ‘#read`.
def initialize(body)
def initialize(body) super(body) @chunks = [] @index = 0 end
def inspect
def inspect "\#<#{self.class} #{@index}/#{@chunks.count} chunks read>" end
def read
def read if @index < @chunks.count chunk = @chunks[@index] @index += 1 else if chunk = super @chunks << chunk @index += 1 end end # We dup them on the way out, so that if someone modifies the string, it won't modify the rewindability. return chunk&.dup end
def rewind
def rewind @index = 0 end