Class: Async::HTTP::Body::Writable
- Defined in:
- lib/async/http/body/writable.rb
Overview
A dynamic body which you can write to and read from.
Instance Method Summary collapse
- #empty? ⇒ Boolean
-
#finish ⇒ Object
Signal that output has finished.
-
#initialize ⇒ Writable
constructor
A new instance of Writable.
- #inspect ⇒ Object
-
#read ⇒ Object
Read the next available chunk.
- #stop(error) ⇒ Object
-
#write(chunk) ⇒ Object
Write a single chunk to the body.
Methods inherited from Readable
Constructor Details
#initialize ⇒ Writable
Returns a new instance of Writable.
30 31 32 33 34 35 36 37 |
# File 'lib/async/http/body/writable.rb', line 30 def initialize @queue = Async::Queue.new @count = 0 @finished = false @stopped = nil end |
Instance Method Details
#empty? ⇒ Boolean
39 40 41 |
# File 'lib/async/http/body/writable.rb', line 39 def empty? @finished end |
#finish ⇒ Object
Signal that output has finished.
71 72 73 |
# File 'lib/async/http/body/writable.rb', line 71 def finish @queue.enqueue(nil) end |
#inspect ⇒ Object
75 76 77 |
# File 'lib/async/http/body/writable.rb', line 75 def inspect "\#<#{self.class} #{@count} chunks written>" end |
#read ⇒ Object
Read the next available chunk.
44 45 46 47 48 49 50 51 52 |
# File 'lib/async/http/body/writable.rb', line 44 def read return if @finished unless chunk = @queue.dequeue @finished = true end return chunk end |
#stop(error) ⇒ Object
54 55 56 |
# File 'lib/async/http/body/writable.rb', line 54 def stop(error) @stopped = error end |
#write(chunk) ⇒ Object
Write a single chunk to the body. Signal completion by calling ‘#finish`.
59 60 61 62 63 64 65 66 67 68 |
# File 'lib/async/http/body/writable.rb', line 59 def write(chunk) if @stopped raise @stopped end # TODO should this yield if the queue is full? @count += 1 @queue.enqueue(chunk) end |