class GdsApi::Response

> “/bank-holidays”<br>r[0][‘web_url’]
r = Response.new(response, web_urls_relative_to: “www.gov.uk”)
Example:
See: github.com/alphagov/wiki/wiki/API-conventions for details on the API conventions
This is useful on non-canonical frontends, such as those in staging environments.
By specifying a base URI, this will convert all matching web_urls into relative URLs
GOV.UK context. However on internal systems we want to present relative URLs.
API endpoints should return absolute URLs so that they make sense outside of the
Responses can be configured to use relative URLs for ‘web_url` properties.
This wraps an HTTP response with a JSON body.

def blank?; false; end

def blank?; false; end

def cache_control

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

def code

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

def expires_at

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

def expires_in

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

def headers

def headers
  @http_response.headers
end

def initialize(http_response, options = {})

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

def parsed_content

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

def present?; true; end

def present?; true; end

def raw_response_body

def raw_response_body
  @http_response.body
end

def to_hash

def to_hash
  parsed_content
end

def transform_parsed(value)

def transform_parsed(value)
  return value if @web_urls_relative_to.nil?
  case value
  when Hash
    Hash[value.map { |k, v|
      # NOTE: Don't bother transforming if the value is nil
      if k == "web_url" && v
        # Use relative URLs to route when the web_url value is on the
        # same domain as the site root. Note that we can't just use the
        # `route_to` method, as this would give us technically correct
        # but potentially confusing `//host/path` URLs for URLs with the
        # same scheme but different hosts.
        relative_url = @web_urls_relative_to.route_to(v)
        [k, relative_url.host ? v : relative_url.to_s]
      else
        [k, transform_parsed(v)]
      end
    }]
  when Array
    value.map { |v| transform_parsed(v) }
  else
    value
  end
end