Total Pages should be at least one
And the link to the last page cannot be `page=0`.
This commit is contained in:
parent
a98d17a838
commit
e17d9529fa
|
@ -11,7 +11,7 @@ module API
|
|||
|
||||
def add_pagination_headers(paginated_data)
|
||||
header 'X-Total', paginated_data.total_count.to_s
|
||||
header 'X-Total-Pages', paginated_data.total_pages.to_s
|
||||
header 'X-Total-Pages', total_pages(paginated_data).to_s
|
||||
header 'X-Per-Page', paginated_data.limit_value.to_s
|
||||
header 'X-Page', paginated_data.current_page.to_s
|
||||
header 'X-Next-Page', paginated_data.next_page.to_s
|
||||
|
@ -26,20 +26,25 @@ module API
|
|||
|
||||
links = []
|
||||
|
||||
request_params[:page] = paginated_data.current_page - 1
|
||||
links << %(<#{request_url}?#{request_params.to_query}>; rel="prev") unless paginated_data.first_page?
|
||||
request_params[:page] = paginated_data.prev_page
|
||||
links << %(<#{request_url}?#{request_params.to_query}>; rel="prev") if request_params[:page]
|
||||
|
||||
request_params[:page] = paginated_data.current_page + 1
|
||||
links << %(<#{request_url}?#{request_params.to_query}>; rel="next") unless paginated_data.last_page? || paginated_data.out_of_range?
|
||||
request_params[:page] = paginated_data.next_page
|
||||
links << %(<#{request_url}?#{request_params.to_query}>; rel="next") if request_params[:page]
|
||||
|
||||
request_params[:page] = 1
|
||||
links << %(<#{request_url}?#{request_params.to_query}>; rel="first")
|
||||
|
||||
request_params[:page] = paginated_data.total_pages
|
||||
request_params[:page] = total_pages(paginated_data)
|
||||
links << %(<#{request_url}?#{request_params.to_query}>; rel="last")
|
||||
|
||||
links.join(', ')
|
||||
end
|
||||
|
||||
def total_pages(paginated_data)
|
||||
# Ensure there is in total at least 1 page
|
||||
[paginated_data.total_pages, 1].max
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -107,7 +107,7 @@ describe API::Helpers::Pagination do
|
|||
|
||||
it 'adds appropriate headers' do
|
||||
expect_header('X-Total', '0')
|
||||
expect_header('X-Total-Pages', '0')
|
||||
expect_header('X-Total-Pages', '1')
|
||||
expect_header('X-Per-Page', '2')
|
||||
expect_header('X-Page', '1')
|
||||
expect_header('X-Next-Page', '')
|
||||
|
@ -118,6 +118,7 @@ describe API::Helpers::Pagination do
|
|||
expect(val).to include('rel="last"')
|
||||
expect(val).not_to include('rel="prev"')
|
||||
expect(val).not_to include('rel="next"')
|
||||
expect(val).not_to include('page=0')
|
||||
end
|
||||
|
||||
subject.paginate(resource)
|
||||
|
|
Loading…
Reference in New Issue