class Async::HTTP::Body::Writable
A dynamic body which you can write to and read from.
def close(error = nil)
def close(error = nil) unless @closed @queue.enqueue(nil) @closed = true @error = error end super end
def empty?
def empty? @finished end
def initialize
def initialize @queue = Async::Queue.new @count = 0 @finished = false @closed = false @error = nil end
def inspect
def inspect "\#<#{self.class} #{@count} chunks written#{@finished ? ', finished' : ''}>" end
def read
def read return if @finished unless chunk = @queue.dequeue @finished = true end return chunk end
def write(chunk)
def write(chunk) # If the reader breaks, the writer will break. # The inverse of this is less obvious (*) if @closed raise(@error || Closed) end # TODO should this yield if the queue is full? @count += 1 @queue.enqueue(chunk) end