Protocol::HTTPSourceProtocolHTTPBodyReader

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