Class: Restify::Response

Inherits:
Object
  • Object
show all
Defined in:
lib/restify/response.rb

Overview

A Response is returned from an Adapter and described a HTTP response. That includes status code, headers and body.

A Response is also responsible for decoding its body according its content type.

Constant Summary collapse

SYMBOL_TO_STATUS_CODE =

Map of status symbols to codes. From Rack::Utils.

Examples:

SYMBOL_TO_STATUS_CODE[:ok] #=> 200
Rack::Utils::SYMBOL_TO_STATUS_CODE
STATUS_CODE_TO_SYMBOL =

Map of status codes to symbols.

Examples:

STATUS_CODE_TO_SYMBOL[200] #=> :ok
SYMBOL_TO_STATUS_CODE.invert

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(request, uri, code, headers, body) ⇒ Response

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of Response.



76
77
78
79
80
81
82
83
84
# File 'lib/restify/response.rb', line 76

def initialize(request, uri, code, headers, body)
  @request = request
  @uri     = uri
  @code    = code
  @status  = STATUS_CODE_TO_SYMBOL[code]
  @headers = convert_headers(headers)
  @body    = body
  @message = Rack::Utils::HTTP_STATUS_CODES[code]
end

Instance Attribute Details

#bodyString (readonly)

Response body as string.

Returns:

  • (String)

    Response body.



33
34
35
# File 'lib/restify/response.rb', line 33

def body
  @body
end

#codeFixnum (readonly)

Response status code.

Returns:

  • (Fixnum)

    Status code.



45
46
47
# File 'lib/restify/response.rb', line 45

def code
  @code
end

#headersHash<String, String> (readonly)

Response headers as hash.

Returns:

  • (Hash<String, String>)

    Response headers.



39
40
41
# File 'lib/restify/response.rb', line 39

def headers
  @headers
end

#messageString (readonly)

Response status message.

Returns:

  • (String)

    Status message.



60
61
62
# File 'lib/restify/response.rb', line 60

def message
  @message
end

#requestRequest (readonly)

The request that led to this response.

Returns:



66
67
68
# File 'lib/restify/response.rb', line 66

def request
  @request
end

#statusSymbol (readonly)

Response status symbol.

Examples:

response.status #=> :ok

Returns:

  • (Symbol)

    Status symbol.



54
55
56
# File 'lib/restify/response.rb', line 54

def status
  @status
end

#uriAddressable::URI (readonly)

Last effective URI.

Returns:

  • (Addressable::URI)

    Last effective URI.



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

def uri
  @uri
end

Instance Method Details

#content_typeString

Return content type header from response headers.

Returns:

  • (String)

    Content type header.



109
110
111
# File 'lib/restify/response.rb', line 109

def content_type
  headers['CONTENT_TYPE']
end

#decoded_bodyObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



123
124
125
126
127
128
129
130
# File 'lib/restify/response.rb', line 123

def decoded_body
  @decoded_body ||= begin
    case content_type
      when /\Aapplication\/json($|;)/
        JSON.load body
    end
  end
end

#follow_locationObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



133
134
135
# File 'lib/restify/response.rb', line 133

def follow_location
  headers['LOCATION'] || headers['CONENT_LOCATION']
end

Return list of links from the Link header.

Returns:

  • (Array<Link>)

    Links.



90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/restify/response.rb', line 90

def links
  @links ||= begin
    if headers['LINK']
      begin
        Link.parse(headers['LINK'])
      rescue ArgumentError => e
        warn e
        []
      end
    else
      []
    end
  end
end

#success?Boolean

Check if response is successful e.g. the status code is on of 2XX.

Returns:

  • (Boolean)

    True if status code is 2XX otherwise false.



118
119
120
# File 'lib/restify/response.rb', line 118

def success?
  (200...300).include? code
end