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
path
String
the path to write the body to.
-
parameter
mode
Integer
the mode to open the file with.
-
parameter
options
Hash
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
error
Exception | 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