From 19b5abf66ec9f2a394bc7f934afa8b1328a8d673 Mon Sep 17 00:00:00 2001 From: Lee Richmond Date: Tue, 6 Sep 2016 13:28:09 -0400 Subject: [PATCH] Disable pagination links via config --- CHANGELOG.md | 1 + .../serializer/collection_serializer.rb | 3 ++- .../serializer/concerns/configuration.rb | 1 + .../adapter/json_api/pagination_links_test.rb | 19 +++++++++++++++++-- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41719749..d6f2e979 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ Features: - [#1791](https://github.com/rails-api/active_model_serializers/pull/1791) (@bf4, @youroff, @NullVoxPopuli) - Added `jsonapi_namespace_separator` config option. - [#1889](https://github.com/rails-api/active_model_serializers/pull/1889) Support key transformation for Attributes adapter (@iancanderson, @danbee) +- [#1917](https://github.com/rails-api/active_model_serializers/pull/1917) Add `jsonapi_pagination_links_enabled` configuration option (@richmolj) Fixes: diff --git a/lib/active_model/serializer/collection_serializer.rb b/lib/active_model/serializer/collection_serializer.rb index bb84644c..8e807caf 100644 --- a/lib/active_model/serializer/collection_serializer.rb +++ b/lib/active_model/serializer/collection_serializer.rb @@ -52,7 +52,8 @@ module ActiveModel # rubocop:enable Metrics/CyclomaticComplexity def paginated? - object.respond_to?(:current_page) && + ActiveModelSerializers.config.jsonapi_pagination_links_enabled && + object.respond_to?(:current_page) && object.respond_to?(:total_pages) && object.respond_to?(:size) end diff --git a/lib/active_model/serializer/concerns/configuration.rb b/lib/active_model/serializer/concerns/configuration.rb index 2392883f..2604033c 100644 --- a/lib/active_model/serializer/concerns/configuration.rb +++ b/lib/active_model/serializer/concerns/configuration.rb @@ -22,6 +22,7 @@ module ActiveModel config.default_includes = '*' config.adapter = :attributes config.key_transform = nil + config.jsonapi_pagination_links_enabled = true config.jsonapi_resource_type = :plural config.jsonapi_namespace_separator = '-'.freeze config.jsonapi_version = '1.0' diff --git a/test/adapter/json_api/pagination_links_test.rb b/test/adapter/json_api/pagination_links_test.rb index f999ba7a..736ea2fe 100644 --- a/test/adapter/json_api/pagination_links_test.rb +++ b/test/adapter/json_api/pagination_links_test.rb @@ -76,7 +76,7 @@ module ActiveModelSerializers } end - def expected_response_without_pagination_links + def expected_response_when_unpaginatable data end @@ -87,6 +87,12 @@ module ActiveModelSerializers end end + def expected_response_without_pagination_links + {}.tap do |hash| + hash[:data] = data.values.flatten[2..3] + end + end + def expected_response_with_pagination_links_and_additional_params new_links = links[:links].each_with_object({}) { |(key, value), hash| hash[key] = "#{value}&test=test" } {}.tap do |hash| @@ -159,7 +165,7 @@ module ActiveModelSerializers def test_not_showing_pagination_links adapter = load_adapter(@array, mock_request) - assert_equal expected_response_without_pagination_links, adapter.serializable_hash + assert_equal expected_response_when_unpaginatable, adapter.serializable_hash end def test_raises_descriptive_error_when_serialization_context_unset @@ -172,6 +178,15 @@ module ActiveModelSerializers assert_equal exception_class, exception.class assert_match(/CollectionSerializer#paginated\?/, exception.message) end + + def test_pagination_links_not_present_when_disabled + ActiveModel::Serializer.config.jsonapi_pagination_links_enabled = false + adapter = load_adapter(using_kaminari, mock_request) + + assert_equal expected_response_without_pagination_links, adapter.serializable_hash + ensure + ActiveModel::Serializer.config.jsonapi_pagination_links_enabled = true + end end end end