@@ -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