mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-25 07:16:49 +00:00
add self to pagination links
This commit is contained in:
@@ -20,7 +20,7 @@ ex:
|
|||||||
"data": [
|
"data": [
|
||||||
{
|
{
|
||||||
"type": "articles",
|
"type": "articles",
|
||||||
"id": "1",
|
"id": "3",
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"title": "JSON API paints my bikeshed!",
|
"title": "JSON API paints my bikeshed!",
|
||||||
"body": "The shortest article. Ever.",
|
"body": "The shortest article. Ever.",
|
||||||
@@ -30,6 +30,7 @@ ex:
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"links": {
|
"links": {
|
||||||
|
"self": "http://example.com/articles?page[number]=3&page[size]=1",
|
||||||
"first": "http://example.com/articles?page[number]=1&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",
|
"prev": "http://example.com/articles?page[number]=2&page[size]=1",
|
||||||
"next": "http://example.com/articles?page[number]=4&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
|
return {} if collection.total_pages == FIRST_PAGE
|
||||||
|
|
||||||
{}.tap do |pages|
|
{}.tap do |pages|
|
||||||
|
pages[:self] = collection.current_page
|
||||||
|
|
||||||
unless collection.current_page == FIRST_PAGE
|
unless collection.current_page == FIRST_PAGE
|
||||||
pages[:first] = FIRST_PAGE
|
pages[:first] = FIRST_PAGE
|
||||||
pages[:prev] = collection.current_page - FIRST_PAGE
|
pages[:prev] = collection.current_page - FIRST_PAGE
|
||||||
|
|||||||
@@ -22,12 +22,12 @@ module ActionController
|
|||||||
|
|
||||||
def using_kaminari
|
def using_kaminari
|
||||||
setup
|
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
|
end
|
||||||
|
|
||||||
def using_will_paginate
|
def using_will_paginate
|
||||||
setup
|
setup
|
||||||
@array.paginate(page: params[:page], per_page: params[:per_page])
|
@array.paginate(page: params[:page][:number], per_page: params[:page][:size])
|
||||||
end
|
end
|
||||||
|
|
||||||
def render_pagination_using_kaminari
|
def render_pagination_using_kaminari
|
||||||
@@ -50,58 +50,63 @@ module ActionController
|
|||||||
tests PaginationTestController
|
tests PaginationTestController
|
||||||
|
|
||||||
def test_render_pagination_links_with_will_paginate
|
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",
|
expected_links = { "self"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=1",
|
||||||
"prev"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1&per_page=1",
|
"first"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
|
||||||
"next"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1&per_page=1",
|
"prev"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
|
||||||
"last"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1&per_page=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)
|
response = JSON.parse(@response.body)
|
||||||
assert_equal expected_links, response['links']
|
assert_equal expected_links, response['links']
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_render_only_last_and_next_pagination_links
|
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",
|
expected_links = { "self"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2",
|
||||||
"last"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2&per_page=2"}
|
"next"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2",
|
||||||
get :render_pagination_using_will_paginate, page: 1, per_page: 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)
|
response = JSON.parse(@response.body)
|
||||||
assert_equal expected_links, response['links']
|
assert_equal expected_links, response['links']
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_render_pagination_links_with_kaminari
|
def test_render_pagination_links_with_kaminari
|
||||||
expected_links = {"first"=>"#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1&per_page=1",
|
expected_links = { "self"=>"#{KAMINARI_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=1",
|
||||||
"prev"=>"#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1&per_page=1",
|
"first"=>"#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
|
||||||
"next"=>"#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1&per_page=1",
|
"prev"=>"#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
|
||||||
"last"=>"#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1&per_page=1"}
|
"next"=>"#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1",
|
||||||
get :render_pagination_using_kaminari, page: 2, per_page: 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)
|
response = JSON.parse(@response.body)
|
||||||
assert_equal expected_links, response['links']
|
assert_equal expected_links, response['links']
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_render_only_prev_and_first_pagination_links
|
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",
|
expected_links = { "self"=>"#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1",
|
||||||
"prev"=>"#{KAMINARI_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=1&per_page=1"}
|
"first"=>"#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
|
||||||
get :render_pagination_using_kaminari, page: 3, per_page: 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)
|
response = JSON.parse(@response.body)
|
||||||
assert_equal expected_links, response['links']
|
assert_equal expected_links, response['links']
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_render_only_last_and_next_pagination_links_with_additional_params
|
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",
|
expected_links = { "self"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2&teste=additional",
|
||||||
"last"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2&per_page=2&teste=additional"}
|
"next"=>"#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2&teste=additional",
|
||||||
get :render_pagination_using_will_paginate, page: 1, per_page: 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)
|
response = JSON.parse(@response.body)
|
||||||
assert_equal expected_links, response['links']
|
assert_equal expected_links, response['links']
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_array_without_pagination_links
|
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)
|
response = JSON.parse(@response.body)
|
||||||
refute response.key? 'links'
|
refute response.key? 'links'
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_array_omitting_pagination_options
|
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)
|
response = JSON.parse(@response.body)
|
||||||
refute response.key? 'links'
|
refute response.key? 'links'
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ module ActiveModel
|
|||||||
def links
|
def links
|
||||||
{
|
{
|
||||||
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",
|
first: "http://example.com?page%5Bnumber%5D=1&page%5Bsize%5D=1",
|
||||||
prev: "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",
|
next: "http://example.com?page%5Bnumber%5D=3&page%5Bsize%5D=1",
|
||||||
|
|||||||
Reference in New Issue
Block a user