From b9b367e028cf2b802d839344d765ea5568b0ede9 Mon Sep 17 00:00:00 2001 From: Fumiaki MATSUSHIMA Date: Tue, 14 Jun 2016 17:53:54 +0900 Subject: [PATCH] Consider `Model.page(nil)` It is very happy if we can write `Model.page(params[:page])` like Kaminari. --- README.md | 4 ++++ lib/json_api_client/query/builder.rb | 2 +- test/unit/query_builder_test.rb | 26 ++++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a6710552..81f81a55 100644 --- a/README.md +++ b/README.md @@ -246,6 +246,10 @@ articles = Article.page(2).per(30).to_a # also makes request to /articles?page=2&per_page=30 articles = Article.paginate(page: 2, per_page: 30).to_a + +# keep in mind that page number can be nil - in that case default number will be applied +# also makes request to /articles?page=1&per_page=30 +articles = Article.paginate(page: nil, per_page: 30).to_a ``` *Note: The mapping of pagination parameters is done by the `query_builder` which is [customizable](#custom-paginator).* diff --git a/lib/json_api_client/query/builder.rb b/lib/json_api_client/query/builder.rb index e21e2bf8..439ee59d 100644 --- a/lib/json_api_client/query/builder.rb +++ b/lib/json_api_client/query/builder.rb @@ -47,7 +47,7 @@ def paginate(conditions = {}) end def page(number) - @pagination_params[ klass.paginator.page_param ] = number + @pagination_params[ klass.paginator.page_param ] = number || 1 self end diff --git a/test/unit/query_builder_test.rb b/test/unit/query_builder_test.rb index c37ca9c9..7d82b8c6 100644 --- a/test/unit/query_builder_test.rb +++ b/test/unit/query_builder_test.rb @@ -38,6 +38,32 @@ def test_can_paginate Article.paginate(page: 3, per_page: 6).to_a end + def test_pagination_default_number + JsonApiClient::Paginating::Paginator.page_param = :number + stub_request(:get, "http://example.com/articles?#{{page: {number: 1}}.to_query}") + .to_return(headers: {content_type: "application/vnd.api+json"}, body: { + data: [{ + type: "articles", + id: "1", + attributes: { + title: "JSON API paints my bikeshed!" + } + }], + links: { + self: "http://example.com/articles?#{{page: {number: 1}}.to_query}", + next: "http://example.com/articles?#{{page: {number: 2}}.to_query}", + prev: nil, + first: "http://example.com/articles?#{{page: {number: 1}}.to_query}", + last: "http://example.com/articles?#{{page: {number: 6}}.to_query}" + } + }.to_json) + + articles = Article.page(nil) + assert_equal 1, articles.current_page + ensure + JsonApiClient::Paginating::Paginator.page_param = :page + end + def test_can_sort_asc stub_request(:get, "http://example.com/articles") .with(query: {sort: "foo"})