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 closed?
def closed? @closed end
def empty?
def empty? @finished end
def initialize(length = nil, queue: Async::Queue.new)
-
queue
(Async::Queue
) -- Specify a different queue implementation, e.g. `Async::LimitedQueue.new(8)` to enable back-pressure streaming. -
length
(Integer
) -- The length of the response body if known.
def initialize(length = nil, queue: Async::Queue.new) @queue = queue @length = length @count = 0 @finished = false @closed = false @error = nil end
def inspect
def inspect "\#<#{self.class} #{@count} chunks written, #{status}>" end
def length
def length @length end
def read
def read return if @finished unless chunk = @queue.dequeue @finished = true end return chunk end
def status
def status if @finished 'finished' elsif @closed 'closing' else 'waiting' end 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 @count += 1 @queue.enqueue(chunk) end