class WCC::API::RestClient::AbstractResponse

Attributes

client[R]
raw_body[R]
raw_response[R]
request[R]

Public Class Methods

new(client, request, raw_response) click to toggle source
# File lib/wcc/api/rest_client/response.rb, line 24
def initialize(client, request, raw_response)
  @client = client
  @request = request
  @raw_response = raw_response
  @raw_body = raw_response.body.to_s
end

Public Instance Methods

assert_ok!() click to toggle source
# File lib/wcc/api/rest_client/response.rb, line 74
def assert_ok!
  return self if code >= 200 && code < 300

  raise ApiError[code], self
end
body() click to toggle source
# File lib/wcc/api/rest_client/response.rb, line 19
def body
  @body ||= ::JSON.parse(raw_body)
end
Also aliased as: to_json
collection_response?() click to toggle source
# File lib/wcc/api/rest_client/response.rb, line 39
def collection_response?
  page_items.nil? ? false : true
end
count() click to toggle source
# File lib/wcc/api/rest_client/response.rb, line 35
def count
  throw new NotImplementedError, 'Please implement "count" parsing in response class'
end
each_page(&block) click to toggle source

This method has a bit of complexity that is better kept in one location

# File lib/wcc/api/rest_client/response.rb, line 81
def each_page(&block)
  raise ArgumentError, 'Not a collection response' unless collection_response?

  ret = PaginatingEnumerable.new(self)

  if block_given?
    ret.map(&block)
  else
    ret.lazy
  end
end
error_message() click to toggle source
# File lib/wcc/api/rest_client/response.rb, line 47
def error_message
  parsed_message =
    begin
      body.dig('error', 'message') || body.dig('message')
    rescue ::JSON::ParserError
      nil
    end
  parsed_message || "#{code}: #{raw_response.body}"
end
first() click to toggle source
# File lib/wcc/api/rest_client/response.rb, line 99
def first
  raise ArgumentError, 'Not a collection response' unless collection_response?

  page_items.first
end
items() click to toggle source
# File lib/wcc/api/rest_client/response.rb, line 93
def items
  return unless collection_response?

  each_page.flat_map(&:page_items)
end
next_page() click to toggle source
# File lib/wcc/api/rest_client/response.rb, line 64
def next_page
  return unless next_page?

  next_page ||= @client.get(
    @request[:url],
    (@request[:query] || {}).merge(next_page_query)
  )
  next_page.assert_ok!
end
next_page?() click to toggle source
# File lib/wcc/api/rest_client/response.rb, line 57
def next_page?
  return false unless collection_response?
  return false if count.nil?

  page_items.length + skip < count
end
next_page_query() click to toggle source
# File lib/wcc/api/rest_client/response.rb, line 105
def next_page_query
  return unless collection_response?

  {
    skip: page_items.length + skip
  }
end
page_items() click to toggle source
# File lib/wcc/api/rest_client/response.rb, line 43
def page_items
  throw new NotImplementedError, 'Please implement "page_items" parsing in response class'
end
skip() click to toggle source
# File lib/wcc/api/rest_client/response.rb, line 31
def skip
  throw new NotImplementedError, 'Please implement "skip" parsing in response class'
end
to_json()
Alias for: body