Module: Protocol::HTTP::Body::Streamable

Defined in:
lib/protocol/http/body/streamable.rb

Overview

A body that invokes a block that can read and write to a stream.

In some cases, it's advantageous to directly read and write to the underlying stream if possible. For example, HTTP/1 upgrade requests, WebSockets, and similar. To handle that case, response bodies can implement stream? and return true. When stream? returns true, the body should be consumed by calling call(stream). Server implementations may choose to always invoke call(stream) if it's efficient to do so. Bodies that don't support it will fall back to using each.

When invoking call(stream), the stream can be read from and written to, and closed. However, the stream is only guaranteed to be open for the duration of the call(stream) call. Once the method returns, the stream should be closed by the server.

Defined Under Namespace

Classes: Body, ConsumedError, Output, RequestBody, ResponseBody

Class Method Summary collapse

Class Method Details

.request(&block) ⇒ Object

Generate a new streaming request body using the given block to generate the body.



24
25
26
# File 'lib/protocol/http/body/streamable.rb', line 24

def self.request(&block)
	RequestBody.new(block)
end

.response(request, &block) ⇒ Object

Generate a new streaming response body using the given block to generate the body.



33
34
35
# File 'lib/protocol/http/body/streamable.rb', line 33

def self.response(request, &block)
	ResponseBody.new(block, request.body)
end