Class: Github::PageIterator
- Inherits:
-
Object
- Object
- Github::PageIterator
- Includes:
- Constants, PagedRequest, Utils::Url
- Defined in:
- lib/github_api/page_iterator.rb
Constant Summary collapse
- ATTRIBUTES =
Setup attribute accesor for all the link types
[ META_FIRST, META_NEXT, META_PREV, META_LAST ]
Constants included from PagedRequest
Github::PagedRequest::FIRST_PAGE, Github::PagedRequest::NOT_FOUND, Github::PagedRequest::PER_PAGE
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::SERVER, Constants::USER_AGENT
Constants included from Utils::Url
Utils::Url::DEFAULT_QUERY_SEP, Utils::Url::KEY_VALUE_SEP
Instance Attribute Summary collapse
-
#current_api ⇒ Object
readonly
Returns the value of attribute current_api.
Instance Method Summary collapse
- #count ⇒ Object
-
#first ⇒ Object
Perform http get request for the first resource.
-
#get_page(page_number) ⇒ Object
Returns the result for a specific page.
- #has_next? ⇒ Boolean
-
#initialize(links, current_api) ⇒ PageIterator
constructor
A new instance of PageIterator.
-
#last ⇒ Object
Perform http get request for the last resource.
-
#next ⇒ Object
Perform http get request for the next resource.
-
#prev ⇒ Object
Perform http get request for the previous resource.
Methods included from PagedRequest
#default_page, #default_page_size, #page_request
Methods included from Utils::Url
#build_query, #escape, #escape_uri, #parse_query, #parse_query_for_param, #unescape
Constructor Details
#initialize(links, current_api) ⇒ PageIterator
Returns a new instance of PageIterator.
21 22 23 24 25 |
# File 'lib/github_api/page_iterator.rb', line 21 def initialize(links, current_api) @links = links @current_api = current_api update_page_links @links end |
Instance Attribute Details
#current_api ⇒ Object (readonly)
Returns the value of attribute current_api.
19 20 21 |
# File 'lib/github_api/page_iterator.rb', line 19 def current_api @current_api end |
Instance Method Details
#count ⇒ Object
31 32 33 34 |
# File 'lib/github_api/page_iterator.rb', line 31 def count return nil unless last_page_uri parse_query(URI(last_page_uri).query)['page'] end |
#first ⇒ Object
Perform http get request for the first resource
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/github_api/page_iterator.rb', line 38 def first return nil unless first_page_uri page_uri = URI(first_page_uri) params = parse_query(page_uri.query) if next_page < 1 params['sha'] = 'master' if params.keys.include?('sha') params['per_page'] = parse_per_page_number(first_page_uri) else params['page'] = parse_page_number(first_page_uri) params['per_page'] = parse_per_page_number(first_page_uri) end response = page_request(page_uri.path, params) update_page_links response.links response end |
#get_page(page_number) ⇒ Object
Returns the result for a specific page.
104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/github_api/page_iterator.rb', line 104 def get_page(page_number) # Find URI that we can work with, if we cannot get the first or the # last page URI then there is only one page. page_uri = first_page_uri || last_page_uri return nil unless page_uri params = parse_query URI(page_uri).query params['page'] = page_number params['per_page'] = parse_per_page_number(page_uri) response = page_request URI(page_uri).path, params update_page_links response.links response end |
#has_next? ⇒ Boolean
27 28 29 |
# File 'lib/github_api/page_iterator.rb', line 27 def has_next? next_page == 0 || !next_page_uri.nil? end |
#last ⇒ Object
Perform http get request for the last resource
90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/github_api/page_iterator.rb', line 90 def last return nil unless last_page_uri page_uri = URI(last_page_uri) params = parse_query(page_uri.query) params['page'] = parse_page_number(last_page_uri) params['per_page'] = parse_per_page_number(last_page_uri) response = page_request(page_uri.path, params) update_page_links response.links response end |
#next ⇒ Object
Perform http get request for the next resource
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/github_api/page_iterator.rb', line 57 def next return nil unless has_next? page_uri = URI(next_page_uri) params = parse_query(page_uri.query) if next_page < 1 params['sha'] = params['last_sha'] if params.keys.include?('last_sha') params['per_page'] = parse_per_page_number(next_page_uri) else params['page'] = parse_page_number(next_page_uri) params['per_page'] = parse_per_page_number(next_page_uri) end response = page_request(page_uri.path, params) update_page_links response.links response end |
#prev ⇒ Object
Perform http get request for the previous resource
76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/github_api/page_iterator.rb', line 76 def prev return nil unless prev_page_uri page_uri = URI(prev_page_uri) params = parse_query(page_uri.query) params['page'] = parse_page_number(prev_page_uri) params['per_page'] = parse_per_page_number(prev_page_uri) response = page_request(page_uri.path, params) update_page_links response.links response end |