class HTTP::Response
Attributes
@return [Body]
@return [Hash]
@return [Status]
@return [URI, nil]
Public Class Methods
Inits a new instance
@option opts [Integer] :status Status
code @option opts [String] :version HTTP
version @option opts [Hash] :headers @option opts [Hash] :proxy_headers @option opts [HTTP::Connection] :connection @option opts [String] :encoding Encoding to use when reading body @option opts [String] :body @option opts [String] :uri
# File lib/http/response.rb, line 42 def initialize(opts) @version = opts.fetch(:version) @uri = HTTP::URI.parse(opts.fetch(:uri)) if opts.include? :uri @status = HTTP::Response::Status.new(opts.fetch(:status)) @headers = HTTP::Headers.coerce(opts[:headers] || {}) @proxy_headers = HTTP::Headers.coerce(opts[:proxy_headers] || {}) if opts.include?(:connection) connection = opts.fetch(:connection) encoding = opts[:encoding] || charset || Encoding::BINARY stream = body_stream_for(connection, opts) @body = Response::Body.new(stream, :encoding => encoding) else @body = opts.fetch(:body) end end
Public Instance Methods
# File lib/http/response.rb, line 140 def chunked? return false unless @headers.include?(Headers::TRANSFER_ENCODING) encoding = @headers.get(Headers::TRANSFER_ENCODING) # TODO: "chunked" is frozen in the request writer. How about making it accessible? encoding.last == "chunked" end
Value of the Content-Length header.
@return [nil] if Content-Length was not given, or it's value was invalid
(not an integer, e.g. empty string or string with non-digits).
@return [Integer] otherwise
# File lib/http/response.rb, line 101 def content_length # http://greenbytes.de/tech/webdav/rfc7230.html#rfc.section.3.3.3 # Clause 3: "If a message is received with both a Transfer-Encoding # and a Content-Length header field, the Transfer-Encoding overrides the Content-Length. return nil if @headers.include?(Headers::TRANSFER_ENCODING) value = @headers[Headers::CONTENT_LENGTH] return nil unless value begin Integer(value) rescue ArgumentError nil end end
Parsed Content-Type header
@return [HTTP::ContentType]
# File lib/http/response.rb, line 120 def content_type @content_type ||= ContentType.parse headers[Headers::CONTENT_TYPE] end
Flushes body and returns self-reference
@return [Response]
# File lib/http/response.rb, line 91 def flush body.to_s self end
Inspect a response
# File lib/http/response.rb, line 160 def inspect "#<#{self.class}/#{@version} #{code} #{reason} #{headers.to_h.inspect}>" end
Parse response body with corresponding MIME type adapter.
@param [#to_s] as Parse as given MIME type
instead of the one determined from headers
@raise [HTTP::Error] if adapter not found @return [Object]
# File lib/http/response.rb, line 155 def parse(as = nil) MimeType[as || mime_type].decode to_s end
Returns an Array ala Rack: `[status, headers, body]`
@return [Array(Fixnum, Hash, String)]
# File lib/http/response.rb, line 84 def to_a [status.to_i, headers.to_h, body.to_s] end
Private Instance Methods
# File lib/http/response.rb, line 166 def body_stream_for(connection, opts) if opts[:auto_inflate] opts[:auto_inflate].stream_for(connection, self) else connection end end