Class: Async::HTTP::Body::Writable
- Inherits:
-
Readable
- Object
- Readable
- Async::HTTP::Body::Writable
- Defined in:
- lib/async/http/body/writable.rb
Overview
A dynamic body which you can write to and read from.
Direct Known Subclasses
Defined Under Namespace
Classes: Closed
Instance Method Summary collapse
-
#close(error = nil) ⇒ Object
Stop generating output; cause the next call to write to fail with the given error.
- #closed? ⇒ Boolean
-
#empty? ⇒ Boolean
Has the producer called #finish and has the reader consumed the nil token?.
-
#initialize(length = nil, queue: Async::Queue.new) ⇒ Writable
constructor
A new instance of Writable.
- #inspect ⇒ Object
- #length ⇒ Object
-
#read ⇒ Object
Read the next available chunk.
- #ready? ⇒ Boolean
-
#write(chunk) ⇒ Object
(also: #<<)
Write a single chunk to the body.
Constructor Details
#initialize(length = nil, queue: Async::Queue.new) ⇒ Writable
Returns a new instance of Writable.
38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/async/http/body/writable.rb', line 38 def initialize(length = nil, queue: Async::Queue.new) @queue = queue @length = length @count = 0 @finished = false @closed = false @error = nil end |
Instance Method Details
#close(error = nil) ⇒ Object
Stop generating output; cause the next call to write to fail with the given error.
56 57 58 59 60 61 62 63 64 65 |
# File 'lib/async/http/body/writable.rb', line 56 def close(error = nil) unless @closed @queue.enqueue(nil) @closed = true @error = error end super end |
#closed? ⇒ Boolean
67 68 69 |
# File 'lib/async/http/body/writable.rb', line 67 def closed? @closed end |
#empty? ⇒ Boolean
Has the producer called #finish and has the reader consumed the nil token?
76 77 78 |
# File 'lib/async/http/body/writable.rb', line 76 def empty? @finished end |
#inspect ⇒ Object
105 106 107 |
# File 'lib/async/http/body/writable.rb', line 105 def inspect "\#<#{self.class} #{@count} chunks written, #{status}>" end |
#length ⇒ Object
51 52 53 |
# File 'lib/async/http/body/writable.rb', line 51 def length @length end |
#read ⇒ Object
Read the next available chunk.
81 82 83 84 85 86 87 88 89 |
# File 'lib/async/http/body/writable.rb', line 81 def read return if @finished unless chunk = @queue.dequeue @finished = true end return chunk end |
#ready? ⇒ Boolean
71 72 73 |
# File 'lib/async/http/body/writable.rb', line 71 def ready? !@queue.empty? end |
#write(chunk) ⇒ Object Also known as: <<
Write a single chunk to the body. Signal completion by calling ‘#finish`.
92 93 94 95 96 97 98 99 100 101 |
# File 'lib/async/http/body/writable.rb', line 92 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 |