Class: HTTP::Response

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Headers::Mixin
Defined in:
lib/http/response.rb,
lib/http/response/body.rb,
lib/http/response/parser.rb,
lib/http/response/status.rb,
lib/http/response/caching.rb,
lib/http/response/io_body.rb,
lib/http/response/string_body.rb,
lib/http/response/status/reasons.rb

Direct Known Subclasses

Caching

Defined Under Namespace

Classes: Body, Caching, IoBody, Parser, Status, StringBody

Constant Summary collapse

STATUS_CODES =
Deprecated.

Will be removed in 1.0.0 Use Status::REASONS

Status::REASONS
SYMBOL_TO_STATUS_CODE =
Deprecated.

Will be removed in 1.0.0

Hash[STATUS_CODES.map { |k, v| [v.downcase.gsub(/\s|-/, "_").to_sym, k] }].freeze

Instance Attribute Summary collapse

Attributes included from Headers::Mixin

#headers

Instance Method Summary collapse

Methods included from Headers::Mixin

#[], #[]=

Constructor Details

#initialize(status, version, headers, body, uri = nil) ⇒ Response

rubocop:disable ParameterLists



34
35
36
37
38
39
40
# File 'lib/http/response.rb', line 34

def initialize(status, version, headers, body, uri = nil) # rubocop:disable ParameterLists
  @version = version
  @body    = body
  @uri     = uri && HTTP::URI.parse(uri)
  @status  = HTTP::Response::Status.new status
  @headers = HTTP::Headers.coerce(headers || {})
end

Instance Attribute Details

#bodyBody (readonly)

Returns:



29
30
31
# File 'lib/http/response.rb', line 29

def body
  @body
end

#statusStatus (readonly)

Returns:



26
27
28
# File 'lib/http/response.rb', line 26

def status
  @status
end

#uriURI? (readonly)

Returns:



32
33
34
# File 'lib/http/response.rb', line 32

def uri
  @uri
end

Instance Method Details

#cachingHTTP::Response::Caching



120
121
122
# File 'lib/http/response.rb', line 120

def caching
  Caching.new self
end

#charsetString?

Charset of response (if any)

Returns:

  • (String, nil)


94
95
96
# File 'lib/http/response.rb', line 94

def charset
  @charset ||= content_type.charset
end

#codeFixnum Also known as: status_code

Returns status code.

Returns:

  • (Fixnum)

    status code



48
# File 'lib/http/response.rb', line 48

def_delegator :status, :code

#content_typeHTTP::ContentType

Parsed Content-Type header

Returns:



80
81
82
# File 'lib/http/response.rb', line 80

def content_type
  @content_type ||= ContentType.parse headers["Content-Type"]
end

#cookiesObject



98
99
100
101
102
# File 'lib/http/response.rb', line 98

def cookies
  @cookies ||= headers.each_with_object CookieJar.new do |(k, v), jar|
    jar.parse(v, uri) if k == Headers::SET_COOKIE
  end
end

#flushResponse

Flushes body and returns self-reference

Returns:



72
73
74
75
# File 'lib/http/response.rb', line 72

def flush
  body.to_s
  self
end

#inspectObject

Inspect a response



115
116
117
# File 'lib/http/response.rb', line 115

def inspect
  "#<#{self.class}/#{@version} #{code} #{reason} #{headers.to_h.inspect}>"
end

#mime_typeString?

MIME type of response (if any)

Returns:

  • (String, nil)


87
88
89
# File 'lib/http/response.rb', line 87

def mime_type
  @mime_type ||= content_type.mime_type
end

#parse(as = nil) ⇒ Object

Parse response body with corresponding MIME type adapter.

Parameters:

  • as (#to_s) (defaults to: nil)

    Parse as given MIME type instead of the one determined from headers

Returns:

  • (Object)

Raises:

  • (Error)

    if adapter not found



110
111
112
# File 'lib/http/response.rb', line 110

def parse(as = nil)
  MimeType[as || mime_type].decode to_s
end

#readpartialObject



60
# File 'lib/http/response.rb', line 60

def_delegator :body, :readpartial

#reasonString?

Returns status message.

Returns:

  • (String, nil)

    status message



44
# File 'lib/http/response.rb', line 44

def_delegator :status, :reason

#to_aArray(Fixnum, Hash, String)

Returns an Array ala Rack: [status, headers, body]

Returns:

  • (Array(Fixnum, Hash, String))


65
66
67
# File 'lib/http/response.rb', line 65

def to_a
  [status.to_i, headers.to_h, body.to_s]
end

#to_sString Also known as: to_str

Returns eagerly consume the entire body as a string.

Returns:

  • (String)

    eagerly consume the entire body as a string



55
# File 'lib/http/response.rb', line 55

def_delegator :body, :to_s