Class: PublishingPlatformApi::ListResponse

Inherits:
Response
  • Object
show all
Defined in:
lib/publishing_platform_api/list_response.rb

Overview

Response class for lists of multiple items.

This expects responses to be in a common format, with the list of results contained under the results key. The response may also have previous and subsequent pages, indicated by entries in the response’s Link header.

API:

  • documented

Instance Method Summary collapse

Methods inherited from Response

#blank?, #cache_control, #code, #expires_at, #expires_in, #headers, #parsed_content, #present?, #raw_response_body, #to_hash

Constructor Details

#initialize(response, api_client, options = {}) ⇒ ListResponse

The ListResponse is instantiated with a reference back to the API client, so it can make requests for the subsequent pages

API:

  • documented



14
15
16
17
# File 'lib/publishing_platform_api/list_response.rb', line 14

def initialize(response, api_client, options = {})
  super(response, options)
  @api_client = api_client
end

Instance Method Details

#has_next_page?Boolean

Returns:

API:

  • documented



27
28
29
# File 'lib/publishing_platform_api/list_response.rb', line 27

def has_next_page?
  !page_link("next").nil?
end

#has_previous_page?Boolean

Returns:

API:

  • documented



41
42
43
# File 'lib/publishing_platform_api/list_response.rb', line 41

def has_previous_page?
  !page_link("previous").nil?
end

#next_pageObject

API:

  • documented



31
32
33
34
35
36
37
38
39
# File 'lib/publishing_platform_api/list_response.rb', line 31

def next_page
  # This shouldn't be a performance problem, since the cache will generally
  # avoid us making multiple requests for the same page, but we shouldn't
  # allow the data to change once it's already been loaded, so long as we
  # retain a reference to any one page in the sequence
  @next_page ||= if has_next_page?
                   @api_client.get_list page_link("next").href
                 end
end

#previous_pageObject

API:

  • documented



45
46
47
48
49
50
# File 'lib/publishing_platform_api/list_response.rb', line 45

def previous_page
  # See the note in `next_page` for why this is memoised
  @previous_page ||= if has_previous_page?
                       @api_client.get_list(page_link("previous").href)
                     end
end

#resultsObject

API:

  • documented



23
24
25
# File 'lib/publishing_platform_api/list_response.rb', line 23

def results
  to_hash["results"]
end

#with_subsequent_pagesObject

Transparently get all results across all pages. Compare this with #each or #results which only iterate over the current page.

Example:

list_response.with_subsequent_pages.each do |result|
  ...
end

or:

list_response.with_subsequent_pages.count

Pages of results are fetched on demand. When iterating, that means fetching pages as results from the current page are exhausted. If you invoke a method such as #count, this method will fetch all pages at that point. Note that the responses are stored so subsequent pages will not be loaded multiple times.

API:

  • documented



70
71
72
73
74
75
76
77
# File 'lib/publishing_platform_api/list_response.rb', line 70

def with_subsequent_pages
  Enumerator.new do |yielder|
    each { |i| yielder << i }
    if has_next_page?
      next_page.with_subsequent_pages.each { |i| yielder << i }
    end
  end
end