Class: Protocol::HTTP::Body::Readable
- Inherits:
-
Object
- Object
- Protocol::HTTP::Body::Readable
- Defined in:
- lib/protocol/http/body/readable.rb
Overview
def finish -> buffer the stream and close it. def close(error = nil) -> close the stream immediately. end
Instance Method Summary collapse
-
#call(stream) ⇒ Object
Write the body to the given stream.
-
#close(error = nil) ⇒ Object
The consumer can call stop to signal that the stream output has terminated.
-
#each ⇒ Object
Enumerate all chunks until finished, then invoke ‘#close`.
-
#empty? ⇒ Boolean
Will read return any data?.
-
#finish ⇒ Object
Read all remaining chunks into a buffered body and close the underlying input.
-
#join ⇒ Object
Read all remaining chunks into a single binary string using ‘#each`.
- #length ⇒ Object
-
#read ⇒ Object
Read the next available chunk.
-
#ready? ⇒ Boolean
Whether calling read will block.
-
#stream? ⇒ Boolean
Should the internal mechanism prefer to use #call?.
Instance Method Details
#call(stream) ⇒ Object
Write the body to the given stream.
70 71 72 73 74 75 76 |
# File 'lib/protocol/http/body/readable.rb', line 70 def call(stream) while chunk = self.read stream.write(chunk) end ensure stream.close($!) end |
#close(error = nil) ⇒ Object
The consumer can call stop to signal that the stream output has terminated.
39 40 |
# File 'lib/protocol/http/body/readable.rb', line 39 def close(error = nil) end |
#each ⇒ Object
Enumerate all chunks until finished, then invoke ‘#close`.
85 86 87 88 89 90 91 |
# File 'lib/protocol/http/body/readable.rb', line 85 def each while chunk = self.read yield chunk end ensure self.close($!) end |
#empty? ⇒ Boolean
Will read return any data?
43 44 45 |
# File 'lib/protocol/http/body/readable.rb', line 43 def empty? false end |
#finish ⇒ Object
Read all remaining chunks into a buffered body and close the underlying input.
79 80 81 82 |
# File 'lib/protocol/http/body/readable.rb', line 79 def finish # Internally, this invokes `self.each` which then invokes `self.close`. Buffered.for(self) end |
#join ⇒ Object
Read all remaining chunks into a single binary string using ‘#each`.
94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/protocol/http/body/readable.rb', line 94 def join buffer = String.new.force_encoding(Encoding::BINARY) self.each do |chunk| buffer << chunk chunk.clear end if buffer.empty? return nil else return buffer end end |
#length ⇒ Object
54 55 56 |
# File 'lib/protocol/http/body/readable.rb', line 54 def length nil end |
#read ⇒ Object
Read the next available chunk.
59 60 61 |
# File 'lib/protocol/http/body/readable.rb', line 59 def read nil end |
#ready? ⇒ Boolean
Whether calling read will block. We prefer pessimistic implementation, and thus default to ‘false`.
50 51 52 |
# File 'lib/protocol/http/body/readable.rb', line 50 def ready? false end |
#stream? ⇒ Boolean
Should the internal mechanism prefer to use #call?
65 66 67 |
# File 'lib/protocol/http/body/readable.rb', line 65 def stream? false end |