class Itrp::Response

Public Class Methods

new(request, response) click to toggle source
# File lib/itrp/client/response.rb, line 3
def initialize(request, response)
  @request = request
  @response = response
end

Public Instance Methods

[](*keys) click to toggle source

retrieve a value from the resource if the JSON value is an Array a array with the value for each resource will be given @param keys: a single key or a key-path separated by comma

# File lib/itrp/client/response.rb, line 65
def[](*keys)
  values = json.is_a?(Array) ? json : [json]
  keys.each { |key| values = values.map{ |value| value.is_a?(Hash) ? value[key] : nil} }
  json.is_a?(Array) ? values : values.first
end
body() click to toggle source
# File lib/itrp/client/response.rb, line 17
def body
  @response.body
end
count()
Alias for: size
current_page() click to toggle source

pagination - current page

# File lib/itrp/client/response.rb, line 83
def current_page
  @current_page ||= @response.header['X-Pagination-Current-Page'].to_i
end
empty?() click to toggle source

true if the server did not respond at all

# File lib/itrp/client/response.rb, line 52
def empty?
  @response.body.blank?
end
json() click to toggle source

The JSON value, if single resource is queried this is a Hash, if multiple resources where queried it is an Array If the response is not valid? it is a Hash with 'message' and optionally 'errors'

# File lib/itrp/client/response.rb, line 23
def json
  return @json if defined?(@json)
  # no content, no JSON
  if @response.code.to_s == '204'
    data = {}
  elsif @response.body.blank?
    # no body, no json
    data = {message: @response.message.blank? ? 'empty body' : @response.message.strip}
  end
  begin
    data ||= JSON.parse(@response.body)
  rescue ::Exception => e
    data = { message: "Invalid JSON - #{e.message} for:\n#{@response.body}" }
  end
  # indifferent access to hashes
  data = data.is_a?(Array) ? data.map(&:with_indifferent_access) : data.with_indifferent_access
  # empty OK response is not seen as an error
  data = {} if data.is_a?(Hash) && data.size == 1 && data[:message] == 'OK'
  # prepend HTTP response code to message
  data[:message] = "#{response.code}: #{data[:message]}" unless @response.is_a?(Net::HTTPSuccess)
  @json = data
end
message() click to toggle source

the error message in case the response is not valid?

# File lib/itrp/client/response.rb, line 47
def message
  @message ||= json.is_a?(Hash) ? json[:message] : nil
end
per_page() click to toggle source

pagination - per page

# File lib/itrp/client/response.rb, line 78
def per_page
  @per_page ||= @response.header['X-Pagination-Per-Page'].to_i
end
raw()
Alias for: response
request() click to toggle source
# File lib/itrp/client/response.rb, line 8
def request
  @request
end
response() click to toggle source
# File lib/itrp/client/response.rb, line 12
def response
  @response
end
Also aliased as: raw
retry_after() click to toggle source
# File lib/itrp/client/response.rb, line 114
def retry_after
  @current_page ||= @response.header['Retry-After'].to_i
end
size() click to toggle source

The nr of resources found

# File lib/itrp/client/response.rb, line 72
def size
  @size ||= message ? 0 : json.is_a?(Array) ? json.size : 1
end
Also aliased as: count
success?()
Alias for: valid?
throttled?() click to toggle source

true if the response is invalid because of throttling

# File lib/itrp/client/response.rb, line 110
def throttled?
  !!(@response.code.to_s == '429' || (message && message =~ /Too Many Requests/))
end
to_s() click to toggle source
# File lib/itrp/client/response.rb, line 118
def to_s
  valid? ? json.to_s : message
end
total_entries() click to toggle source

pagination - total entries

# File lib/itrp/client/response.rb, line 93
def total_entries
  @total_entries ||= @response.header['X-Pagination-Total-Entries'].to_i
end
total_pages() click to toggle source

pagination - total pages

# File lib/itrp/client/response.rb, line 88
def total_pages
  @total_pages ||= @response.header['X-Pagination-Total-Pages'].to_i
end
valid?() click to toggle source

true if no 'message' is given (and the JSON could be parsed)

# File lib/itrp/client/response.rb, line 57
def valid?
  message.nil?
end
Also aliased as: success?