Class: Github::PageIterator

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

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_apiObject (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

#countObject



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

#firstObject

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

Returns:

  • (Boolean)


27
28
29
# File 'lib/github_api/page_iterator.rb', line 27

def has_next?
  next_page == 0 || !next_page_uri.nil?
end

#lastObject

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

#nextObject

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

#prevObject

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