Module: Github::Pagination

Includes:
Constants
Included in:
ResponseWrapper
Defined in:
lib/github_api/pagination.rb

Overview

A module that decorates response with pagination helpers

Constant Summary

Constants included from Constants

Constants::ACCEPT, Constants::ACCEPTED_OAUTH_SCOPES, Constants::ACCEPT_CHARSET, Constants::CACHE_CONTROL, Constants::CONTENT_LENGTH, Constants::CONTENT_TYPE, Constants::DATE, Constants::ETAG, Constants::HEADER_LAST, Constants::HEADER_LINK, Constants::HEADER_NEXT, Constants::LOCATION, Constants::META_FIRST, Constants::META_LAST, Constants::META_NEXT, Constants::META_PREV, Constants::META_REL, Constants::OAUTH_SCOPES, Constants::PARAM_PAGE, Constants::PARAM_PER_PAGE, Constants::PARAM_START_PAGE, Constants::RATELIMIT_LIMIT, Constants::RATELIMIT_REMAINING, Constants::RATELIMIT_RESET, Constants::SERVER, Constants::USER_AGENT

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.per_page_as_param(per_page_config) ⇒ Object

Handle pagination params when they are not passed directly


99
100
101
102
103
104
105
# File 'lib/github_api/pagination.rb', line 99

def self.per_page_as_param(per_page_config)
  params = {}
  if (per_page_config != Github::Configuration.property_set[:per_page])
    params[:per_page] = per_page_config unless per_page_config.nil?
  end
  params
end

Instance Method Details

#auto_paginate(auto = false) ⇒ Object

Iterate over results set pages by automatically calling `next_page` until all pages are exhausted. Caution needs to be exercised when using this feature - 100 pages iteration will perform 100 API calls. By default this is off. You can set it on the client, individual API instances or just per given request.


28
29
30
31
32
33
34
35
# File 'lib/github_api/pagination.rb', line 28

def auto_paginate(auto=false)
  if (current_api.auto_pagination? || auto) && self.body.is_a?(Array)
    resources_bodies = []
    each_page { |resource| resources_bodies += resource.body }
    self.body = resources_bodies
  end
  self
end

#count_pagesObject

Retrieve number of total pages base on current :per_page parameter


18
19
20
# File 'lib/github_api/pagination.rb', line 18

def count_pages
  page_iterator.count.to_i
end

#each_page {|_self| ... } ⇒ Object

Iterator like each for response pages. If there are no pages to iterate over this method will return current page.

Yields:

  • (_self)

Yield Parameters:


39
40
41
42
43
44
# File 'lib/github_api/pagination.rb', line 39

def each_page
  yield self
  while page_iterator.next?
    yield next_page
  end
end

#first_pageObject

Retrieves the result of the first page. Returns nil if there is no first page - either because you are already on the first page or there are no pages at all in the result.


49
50
51
52
53
# File 'lib/github_api/pagination.rb', line 49

def first_page
  first_request = page_iterator.first
  self.instance_eval { @env = first_request.env } if first_request
  first_request
end

#has_next_page?Boolean

Returns true if there is another page in the result set, otherwise false

Returns:

  • (Boolean)

93
94
95
# File 'lib/github_api/pagination.rb', line 93

def has_next_page?
  page_iterator.next?
end

#last_pageObject

Retrieves the result of the last page. Returns nil if there is no last page - either because you are already on the last page, there is only one page or there are no pages at all in the result.


75
76
77
78
79
# File 'lib/github_api/pagination.rb', line 75

def last_page
  last_request = page_iterator.last
  self.instance_eval { @env = last_request.env } if last_request
  last_request
end

Return page links


13
14
15
# File 'lib/github_api/pagination.rb', line 13

def links
  @links = Github::PageLinks.new(env[:response_headers])
end

#next_pageObject

Retrieves the result of the next page. Returns nil if there is no next page or no pages at all.


57
58
59
60
61
# File 'lib/github_api/pagination.rb', line 57

def next_page
  next_request = page_iterator.next
  self.instance_eval { @env = next_request.env } if next_request
  next_request
end

#page(page_number) ⇒ Object

Retrieves a specific result for a page given page number. The page_number parameter is not validate, hitting a page that does not exist will return Github API error. Consequently, if there is only one page, this method returns nil


85
86
87
88
89
# File 'lib/github_api/pagination.rb', line 85

def page(page_number)
  request = page_iterator.get_page(page_number)
  self.instance_eval { @env = request.env } if request
  request
end

#prev_pageObject Also known as: previous_page

Retrieves the result of the previous page. Returns nil if there is no previous page or no pages at all.


65
66
67
68
69
# File 'lib/github_api/pagination.rb', line 65

def prev_page
  prev_request = page_iterator.prev
  self.instance_eval { @env = prev_request.env } if prev_request
  prev_request
end