Protocol::HTTPSourceProtocolHTTPBodyReader

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