Skip to content

Commit c71f4fb

Browse files
committed
Merge pull request piotrmurach#185 from jcabas/page_iterator_refactor
Refactoring page iterator class
2 parents ffd1008 + 00ac32c commit c71f4fb

1 file changed

Lines changed: 29 additions & 42 deletions

File tree

lib/github_api/page_iterator.rb

Lines changed: 29 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ class PageIterator
1212
# Setup attribute accesor for all the link types
1313
ATTRIBUTES = [ META_FIRST, META_NEXT, META_PREV, META_LAST ]
1414

15+
DEFAULT_SHA = 'master'
16+
1517
ATTRIBUTES.each do |attr|
1618
attr_accessor :"#{attr}_page_uri", :"#{attr}_page"
1719
end
@@ -37,66 +39,28 @@ def count
3739
#
3840
def first
3941
return nil unless first_page_uri
40-
page_uri = URI(first_page_uri)
41-
params = parse_query(page_uri.query)
42-
if next_page < 1
43-
params['sha'] = 'master' if params.keys.include?('sha')
44-
params['per_page'] = parse_per_page_number(first_page_uri)
45-
else
46-
params['page'] = parse_page_number(first_page_uri)
47-
params['per_page'] = parse_per_page_number(first_page_uri)
48-
end
49-
50-
response = page_request(page_uri.path, params)
51-
update_page_links response.links
52-
response
42+
perform_request(first_page_uri)
5343
end
5444

5545
# Perform http get request for the next resource
5646
#
5747
def next
5848
return nil unless has_next?
59-
page_uri = URI(next_page_uri)
60-
params = parse_query(page_uri.query)
61-
if next_page < 1
62-
params['sha'] = params['last_sha'] if params.keys.include?('last_sha')
63-
params['per_page'] = parse_per_page_number(next_page_uri)
64-
else
65-
params['page'] = parse_page_number(next_page_uri)
66-
params['per_page'] = parse_per_page_number(next_page_uri)
67-
end
68-
69-
response = page_request(page_uri.path, params)
70-
update_page_links response.links
71-
response
49+
perform_request(next_page_uri)
7250
end
7351

7452
# Perform http get request for the previous resource
7553
#
7654
def prev
7755
return nil unless prev_page_uri
78-
page_uri = URI(prev_page_uri)
79-
params = parse_query(page_uri.query)
80-
params['page'] = parse_page_number(prev_page_uri)
81-
params['per_page'] = parse_per_page_number(prev_page_uri)
82-
83-
response = page_request(page_uri.path, params)
84-
update_page_links response.links
85-
response
56+
perform_request(prev_page_uri)
8657
end
8758

8859
# Perform http get request for the last resource
8960
#
9061
def last
9162
return nil unless last_page_uri
92-
page_uri = URI(last_page_uri)
93-
params = parse_query(page_uri.query)
94-
params['page'] = parse_page_number(last_page_uri)
95-
params['per_page'] = parse_per_page_number(last_page_uri)
96-
97-
response = page_request(page_uri.path, params)
98-
update_page_links response.links
99-
response
63+
perform_request(last_page_uri)
10064
end
10165

10266
# Returns the result for a specific page.
@@ -117,6 +81,29 @@ def get_page(page_number)
11781

11882
private
11983

84+
def perform_request(attribute)
85+
page_uri = URI(attribute)
86+
params = parse_query(page_uri.query)
87+
88+
if next_page < 1
89+
sha = sha(params)
90+
params['sha'] = sha if sha
91+
else
92+
params['page'] = parse_page_number(attribute)
93+
end
94+
params['per_page'] = parse_per_page_number(attribute)
95+
96+
response = page_request(page_uri.path, params)
97+
update_page_links response.links
98+
response
99+
end
100+
101+
def sha(params)
102+
return params['last_sha'] if params.keys.include?('last_sha')
103+
return DEFAULT_SHA if params.keys.include?('sha')
104+
nil
105+
end
106+
120107
def parse_per_page_number(uri) # :nodoc:
121108
parse_page_params(uri, PARAM_PER_PAGE)
122109
end

0 commit comments

Comments
 (0)