module Reader
General operations for interacting with a request or response body.
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
end
def buffered!
Buffer the entire request/response body.
Signature
-
returns
Reader
itself.
Implementation
def buffered!
if @body
@body = @body.finish
end
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.
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.
Implementation
def close(error = nil)
if @body
@body.close(error)
@body = nil
end
end
def body?
Whether there is a body?
Implementation
def body?
@body and !@body.empty?
end