module Reader
General operations for interacting with a request or response body.
Definitions
def each(&block)
Read 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.
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.
Implementation
def finish
if @body
body = @body.finish
@body = nil
return body
end
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