add self to pagination links

This commit is contained in:
Bruno Bacarini 2015-08-14 14:03:08 -03:00
parent 59ae84baba
commit a41d90cce4
4 changed files with 33 additions and 24 deletions

View File

@ -20,7 +20,7 @@ ex:
"data": [
{
"type": "articles",
"id": "1",
"id": "3",
"attributes": {
"title": "JSON API paints my bikeshed!",
"body": "The shortest article. Ever.",
@ -30,6 +30,7 @@ ex:
}
],
"links": {
"self": "http://example.com/articles?page[number]=3&page[size]=1",
"first": "http://example.com/articles?page[number]=1&page[size]=1",
"prev": "http://example.com/articles?page[number]=2&page[size]=1",
"next": "http://example.com/articles?page[number]=4&page[size]=1",

View File

@ -27,6 +27,8 @@ module ActiveModel
return {} if collection.total_pages == FIRST_PAGE
{}.tap do |pages|
pages[:self] = collection.current_page
unless collection.current_page == FIRST_PAGE
pages[:first] = FIRST_PAGE
pages[:prev] = collection.current_page - FIRST_PAGE

View File

@ -22,12 +22,12 @@ module ActionController
def using_kaminari
setup
Kaminari.paginate_array(@array).page(params[:page]).per(params[:per_page])
Kaminari.paginate_array(@array).page(params[:page][:number]).per(params[:page][:size])
end
def using_will_paginate
setup
@array.paginate(page: params[:page], per_page: params[:per_page])
@array.paginate(page: params[:page][:number], per_page: params[:page][:size])
end
def render_pagination_using_kaminari
@ -50,58 +50,63 @@ module ActionController
tests PaginationTestController
def test_render_pagination_links_with_will_paginate
expected_links = {"first"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1&per_page=1",
"prev"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1&per_page=1",
"next"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1&per_page=1",
"last"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1&per_page=1"}
expected_links = { "self"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=1",
"first"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
"prev"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
"next"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1",
"last"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1"}
get :render_pagination_using_will_paginate, page: 2, per_page: 1
get :render_pagination_using_will_paginate, page: { number: 2, size: 1 }
response = JSON.parse(@response.body)
assert_equal expected_links, response['links']
end
def test_render_only_last_and_next_pagination_links
expected_links = {"next"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2&per_page=2",
"last"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2&per_page=2"}
get :render_pagination_using_will_paginate, page: 1, per_page: 2
expected_links = { "self"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2",
"next"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2",
"last"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2"}
get :render_pagination_using_will_paginate, page: { number: 1, size: 2 }
response = JSON.parse(@response.body)
assert_equal expected_links, response['links']
end
def test_render_pagination_links_with_kaminari
expected_links = {"first"=>"#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1&per_page=1",
"prev"=>"#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1&per_page=1",
"next"=>"#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1&per_page=1",
"last"=>"#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1&per_page=1"}
get :render_pagination_using_kaminari, page: 2, per_page: 1
expected_links = { "self"=>"#{KAMINARI_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=1",
"first"=>"#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
"prev"=>"#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
"next"=>"#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1",
"last"=>"#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1"}
get :render_pagination_using_kaminari, page: { number: 2, size: 1 }
response = JSON.parse(@response.body)
assert_equal expected_links, response['links']
end
def test_render_only_prev_and_first_pagination_links
expected_links = {"first"=>"#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1&per_page=1",
"prev"=>"#{KAMINARI_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=1&per_page=1"}
get :render_pagination_using_kaminari, page: 3, per_page: 1
expected_links = { "self"=>"#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1",
"first"=>"#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
"prev"=>"#{KAMINARI_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=1"}
get :render_pagination_using_kaminari, page: { number: 3, size: 1 }
response = JSON.parse(@response.body)
assert_equal expected_links, response['links']
end
def test_render_only_last_and_next_pagination_links_with_additional_params
expected_links = {"next"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2&per_page=2&teste=additional",
"last"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2&per_page=2&teste=additional"}
get :render_pagination_using_will_paginate, page: 1, per_page: 2, teste: "additional"
expected_links = { "self"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2&teste=additional",
"next"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2&teste=additional",
"last"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2&teste=additional"}
get :render_pagination_using_will_paginate, page: { number: 1, size: 2 }, teste: "additional"
response = JSON.parse(@response.body)
assert_equal expected_links, response['links']
end
def test_array_without_pagination_links
get :render_array_without_pagination_links
get :render_array_without_pagination_links, page: { number: 2, size: 1 }
response = JSON.parse(@response.body)
refute response.key? 'links'
end
def test_array_omitting_pagination_options
get :render_array_omitting_pagination_options
get :render_array_omitting_pagination_options, page: { number: 2, size: 1 }
response = JSON.parse(@response.body)
refute response.key? 'links'
end

View File

@ -42,6 +42,7 @@ module ActiveModel
def links
{
links:{
self: "http://example.com?page%5Bnumber%5D=2&page%5Bsize%5D=1",
first: "http://example.com?page%5Bnumber%5D=1&page%5Bsize%5D=1",
prev: "http://example.com?page%5Bnumber%5D=1&page%5Bsize%5D=1",
next: "http://example.com?page%5Bnumber%5D=3&page%5Bsize%5D=1",