Module: Github::Pagination
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
-
.per_page_as_param(per_page_config) ⇒ Object
Handle pagination params when they are not passed directly.
Instance Method Summary collapse
-
#auto_paginate(auto = false) ⇒ Object
Iterate over results set pages by automatically calling ‘next_page` until all pages are exhausted.
-
#count_pages ⇒ Object
Retrieve number of total pages base on current :per_page parameter.
-
#each_page {|_self| ... } ⇒ Object
Iterator like each for response pages.
-
#first_page ⇒ Object
Retrieves the result of the first page.
-
#has_next_page? ⇒ Boolean
Returns
true
if there is another page in the result set, otherwisefalse
. -
#last_page ⇒ Object
Retrieves the result of the last page.
-
#links ⇒ Object
Return page links.
-
#next_page ⇒ Object
Retrieves the result of the next page.
-
#page(page_number) ⇒ Object
Retrieves a specific result for a page given page number.
-
#prev_page ⇒ Object
(also: #previous_page)
Retrieves the result of the previous page.
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_api2/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_api2/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_pages ⇒ Object
Retrieve number of total pages base on current :per_page parameter
18 19 20 |
# File 'lib/github_api2/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.
39 40 41 42 43 44 |
# File 'lib/github_api2/pagination.rb', line 39 def each_page yield self while page_iterator.next? yield next_page end end |
#first_page ⇒ Object
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_api2/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
93 94 95 |
# File 'lib/github_api2/pagination.rb', line 93 def has_next_page? page_iterator.next? end |
#last_page ⇒ Object
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_api2/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 |
#links ⇒ Object
Return page links
13 14 15 |
# File 'lib/github_api2/pagination.rb', line 13 def links @links = Github::PageLinks.new(env[:response_headers]) end |
#next_page ⇒ Object
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_api2/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_api2/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_page ⇒ Object 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_api2/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 |