Class: PublishingPlatformApi::Response

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Enumerable
Defined in:
lib/publishing_platform_api/response.rb

Overview

This wraps an HTTP response with a JSON body.

Responses can be configured to use relative URLs for web_url properties. API endpoints should return absolute URLs so that they make sense outside of the Publishing Platform context. However on internal systems we want to present relative URLs. By specifying a base URI, this will convert all matching web_urls into relative URLs This is useful on non-canonical frontends, such as those in staging environments.

Example:

r = Response.new(response, web_urls_relative_to: "https://www.publishing-platform.co.uk")
r['results'][0]['web_url']
=> "/bank-holidays"

Direct Known Subclasses

ListResponse

Defined Under Namespace

Classes: CacheControl

Instance Method Summary collapse

Constructor Details

#initialize(http_response, options = {}) ⇒ Response

Returns a new instance of Response.



96
97
98
99
# File 'lib/publishing_platform_api/response.rb', line 96

def initialize(http_response, options = {})
  @http_response = http_response
  @web_urls_relative_to = options[:web_urls_relative_to] ? URI.parse(options[:web_urls_relative_to]) : nil
end

Instance Method Details

#blank?Boolean



151
152
153
# File 'lib/publishing_platform_api/response.rb', line 151

def blank?
  false
end

#cache_controlObject



135
136
137
# File 'lib/publishing_platform_api/response.rb', line 135

def cache_control
  @cache_control ||= CacheControl.new(headers[:cache_control])
end

#codeObject



105
106
107
108
# File 'lib/publishing_platform_api/response.rb', line 105

def code
  # Return an integer code for consistency with HTTPErrorResponse
  @http_response.code
end

#expires_atObject



114
115
116
117
118
119
120
121
# File 'lib/publishing_platform_api/response.rb', line 114

def expires_at
  if headers[:date] && cache_control.max_age
    response_date = Time.parse(headers[:date])
    response_date + cache_control.max_age
  elsif headers[:expires]
    Time.parse(headers[:expires])
  end
end

#expires_inObject



123
124
125
126
127
128
129
130
131
132
133
# File 'lib/publishing_platform_api/response.rb', line 123

def expires_in
  return unless headers[:date]

  age = Time.now.utc - Time.parse(headers[:date])

  if cache_control.max_age
    cache_control.max_age - age.to_i
  elsif headers[:expires]
    Time.parse(headers[:expires]).to_i - Time.now.utc.to_i
  end
end

#headersObject



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

def headers
  @http_response.headers
end

#parsed_contentObject



143
144
145
# File 'lib/publishing_platform_api/response.rb', line 143

def parsed_content
  @parsed_content ||= transform_parsed(JSON.parse(@http_response.body))
end

#present?Boolean



147
148
149
# File 'lib/publishing_platform_api/response.rb', line 147

def present?
  true
end

#raw_response_bodyObject



101
102
103
# File 'lib/publishing_platform_api/response.rb', line 101

def raw_response_body
  @http_response.body
end

#to_hashObject



139
140
141
# File 'lib/publishing_platform_api/response.rb', line 139

def to_hash
  parsed_content
end