class HTTP::Request::Body
Represents an HTTP request body with streaming support
def ==(other)
- Api: - public
Returns:
-
(Boolean)-
def ==(other) other.is_a?(self.class) && source == other.source end
def each(&block)
- Api: - public
Returns:
-
(self)-
Other tags:
- Yieldparam: -
def each(&block) if @source.is_a?(String) yield @source elsif @source.respond_to?(:read) IO.copy_stream(@source, ProcIO.new(block)) rewind(@source) elsif @source @source.each(&block) end self end
def empty?
- Api: - public
Returns:
-
(Boolean)-
def empty? @source.nil? end
def initialize(source)
- Api: - public
Returns:
-
(HTTP::Request::Body)-
def initialize(source) @source = source validate_source_type! end
def loggable?
- Api: - public
Returns:
-
(Boolean)-
def loggable? @source.is_a?(String) end
def rewind(io)
- Api: - private
Returns:
-
(void)-
def rewind(io) io.rewind if io.respond_to? :rewind rescue Errno::ESPIPE, Errno::EPIPE # Pipe IOs respond to `:rewind` but fail when you call it. # # Calling `IO#rewind` on a pipe, fails with *ESPIPE* on MRI, # but *EPIPE* on jRuby. # # - **ESPIPE** -- "Illegal seek." # Invalid seek operation (such as on a pipe). # # - **EPIPE** -- "Broken pipe." # There is no process reading from the other end of a pipe. Every # library function that returns this error code also generates # a SIGPIPE signal; this signal terminates the program if not handled # or blocked. Thus, your program will never actually see EPIPE unless # it has handled or blocked SIGPIPE. # # See: https://www.gnu.org/software/libc/manual/html_node/Error-Codes.html nil end
def size
- Api: - public
Returns:
-
(Integer)-
def size if @source.is_a?(String) @source.bytesize elsif @source.respond_to?(:read) raise RequestError, "IO object must respond to #size" unless @source.respond_to?(:size) @source.size elsif @source.nil? 0 else raise RequestError, "cannot determine size of body: #{@source.inspect}; " \ "set the Content-Length header explicitly or use chunked Transfer-Encoding" end end
def validate_source_type!
- Api: - private
Returns:
-
(void)-
def validate_source_type! return if @source.is_a?(String) return if @source.respond_to?(:read) return if @source.is_a?(Enumerable) return if @source.nil? raise RequestError, "body of wrong type: #{@source.class}" end