class Github::PageIterator
@api private
A class responsible for requesting resources through page links
def count
def count parse_query(URI(last_page_uri).query)['page'] if last_page_uri end
def first
Perform http get request for the first resource
def first perform_request(first_page_uri) if first_page_uri end
def get_page(page_number)
Returns the result for a specific page.
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 perform_request(page_uri, page_number) end
def initialize(links, current_api)
def initialize(links, current_api) @links = links @current_api = current_api update_page_links(@links) end
def last
Perform http get request for the last resource
def last perform_request(last_page_uri) if last_page_uri end
def next
Perform http get request for the next resource
def next perform_request(next_page_uri) if next? end
def next?
def next? next_page == 0 || !next_page_uri.nil? end
def parse_page_number(uri) # :nodoc:
def parse_page_number(uri) # :nodoc: parse_page_params(uri, PARAM_PAGE) end
def parse_page_params(uri, attr) # :nodoc:
Extracts query string parameter for given name
def parse_page_params(uri, attr) # :nodoc: return -1 if uri.nil? || uri.empty? parsed = nil begin parsed = URI.parse(uri) rescue URI::Error return -1 end param = parse_query_for_param(parsed.query, attr) return -1 if param.nil? || param.empty? begin return param.to_i rescue ArgumentError return -1 end end
def parse_per_page_number(uri) # :nodoc:
def parse_per_page_number(uri) # :nodoc: parse_page_params(uri, PARAM_PER_PAGE) end
def perform_request(page_uri_path, page_number = nil)
def perform_request(page_uri_path, page_number = nil) page_uri = URI(page_uri_path) params = parse_query(page_uri.query) if page_number params['page'] = page_number elsif next_page < 1 sha = sha(params) params['sha'] = sha if sha else params['page'] = parse_page_number(page_uri_path) end params['per_page'] = parse_per_page_number(page_uri_path) response = page_request(page_uri.path, params) update_page_links response.links response end
def prev
Perform http get request for the previous resource
def prev perform_request(prev_page_uri) if prev_page_uri end
def sha(params)
def sha(params) return params['last_sha'] if params.keys.include?('last_sha') return DEFAULT_SHA if params.keys.include?('sha') end
def update_page_links(links) # :nodoc:
Wholesale update of all link attributes
def update_page_links(links) # :nodoc: ATTRIBUTES.each do |attr| send(:"#{attr}_page_uri=", links.send(:"#{attr}")) send(:"#{attr}_page=", parse_page_number(links.send(:"#{attr}"))) end end