diff --git a/lib/active_model_serializers/adapter/json_api/pagination_links.rb b/lib/active_model_serializers/adapter/json_api/pagination_links.rb index b15f5ba6..11ea472e 100644 --- a/lib/active_model_serializers/adapter/json_api/pagination_links.rb +++ b/lib/active_model_serializers/adapter/json_api/pagination_links.rb @@ -35,19 +35,21 @@ module ActiveModelSerializers private def pages_from - return {} if collection.total_pages <= FIRST_PAGE - {}.tap do |pages| - pages[:self] = collection.current_page + pages[:self] = collection.current_page + pages[:first] = FIRST_PAGE + pages[:last] = collection.total_pages - unless collection.current_page == FIRST_PAGE - pages[:first] = FIRST_PAGE - pages[:prev] = collection.current_page - FIRST_PAGE - end + if collection.total_pages > 0 + unless collection.current_page == FIRST_PAGE + pages[:prev] = collection.current_page - FIRST_PAGE + end - unless collection.current_page == collection.total_pages - pages[:next] = collection.current_page + FIRST_PAGE - pages[:last] = collection.total_pages + unless collection.current_page == collection.total_pages + pages[:next] = collection.current_page + FIRST_PAGE + end + else + pages[:last] = FIRST_PAGE end end end diff --git a/test/adapter/json_api/pagination_links_test.rb b/test/adapter/json_api/pagination_links_test.rb index 736ea2fe..49d76603 100644 --- a/test/adapter/json_api/pagination_links_test.rb +++ b/test/adapter/json_api/pagination_links_test.rb @@ -54,6 +54,14 @@ module ActiveModelSerializers } end + def empty_collection_links + { + self: "#{URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2", + first: "#{URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2", + last: "#{URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2" + } + end + def links { links: { @@ -71,6 +79,7 @@ module ActiveModelSerializers links: { self: "#{URI}?page%5Bnumber%5D=3&page%5Bsize%5D=2", first: "#{URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2", + last: "#{URI}?page%5Bnumber%5D=3&page%5Bsize%5D=2", prev: "#{URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2" } } @@ -111,7 +120,7 @@ module ActiveModelSerializers def expected_response_with_no_data_pagination_links {}.tap do |hash| hash[:data] = [] - hash[:links] = {} + hash.merge! links: empty_collection_links end end