module Reader
General operations for interacting with a request or response body.
This module is included in both class Protocol::HTTP::Request and class Protocol::HTTP::Response.
Definitions
def each(&block)
Read chunks from the body.
Signature
-
yields
{|chunk| ...} chunks from the body.
Implementation
def each(&block)
if @body
@body.each(&block)
@body = nil
end
end
def read
Reads the entire request/response body.
Signature
-
returns
String the entire body as a string.
Implementation
def read
if @body
buffer = @body.join
@body = nil
return buffer
end
end
def finish
Gracefully finish reading the body. This will buffer the remainder of the body.
Signature
-
returns
Buffered buffers the entire body.
Implementation
def finish
if @body
body = @body.finish
@body = nil
return body
end
end
def discard
Discard the body as efficiently as possible.
Implementation
def discard
if body = @body
@body = nil
body.discard
end
return nil
end
def buffered!
Buffer the entire request/response body.
Signature
-
returns
Reader itself.
Implementation
def buffered!
if @body
@body = @body.finish
end
# TODO Should this return @body instead? It seems more useful.
return self
end
def save(path, mode = ::File::WRONLY|::File::CREAT|::File::TRUNC, **options)
Write the body of the response to the given file path.
Signature
-
parameter
pathString the path to write the body to.
-
parameter
modeInteger the mode to open the file with.
-
parameter
optionsHash additional options to pass to
File.open.
Implementation
def save(path, mode = ::File::WRONLY|::File::CREAT|::File::TRUNC, **options)
if @body
::File.open(path, mode, **options) do |file|
self.each do |chunk|
file.write(chunk)
end
end
end
end
def close(error = nil)
Close the connection as quickly as possible. Discards body. May close the underlying connection if necessary to terminate the stream.
Signature
-
parameter
errorException | Nil the error that caused the stream to be closed, if any.
Implementation
def close(error = nil)
if @body
@body.close(error)
@body = nil
end
end
def body?
Whether there is a body?
Signature
-
returns
Boolean whether there is a body.
Implementation
def body?
@body and !@body.empty?
end