mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-23 06:16:50 +00:00
add self to pagination links
This commit is contained in:
parent
59ae84baba
commit
a41d90cce4
@ -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",
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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",
|
||||
|
||||
Loading…
Reference in New Issue
Block a user