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