From 572ff7db20c9a679ceec21e6af8091c304bd43fa Mon Sep 17 00:00:00 2001 From: Lucas Hosseini Date: Mon, 7 Sep 2015 15:38:00 +0200 Subject: [PATCH] Refactor `add_links` in JSONAPI adapter. --- .../serializer/adapter/json_api.rb | 22 +++++-------------- .../serializer/array_serializer.rb | 6 +++++ 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/lib/active_model/serializer/adapter/json_api.rb b/lib/active_model/serializer/adapter/json_api.rb index c1e5c94f..ae736b5e 100644 --- a/lib/active_model/serializer/adapter/json_api.rb +++ b/lib/active_model/serializer/adapter/json_api.rb @@ -29,7 +29,10 @@ class ActiveModel::Serializer::Adapter::JsonApi < ActiveModel::Serializer::Adapt end end - add_links(options) + if serializer.paginated? + @hash[:links] ||= {} + @hash[:links].update(links_for(serializer, options)) + end else primary_data = primary_data_for(serializer, options) relationships = relationships_for(serializer) @@ -145,20 +148,7 @@ class ActiveModel::Serializer::Adapter::JsonApi < ActiveModel::Serializer::Adapt end end - def add_links(options) - links = @hash.fetch(:links) { {} } - collection = serializer.object - @hash[:links] = add_pagination_links(links, collection, options) if paginated?(collection) - end - - def add_pagination_links(links, resources, options) - pagination_links = ActiveModel::Serializer::Adapter::JsonApi::PaginationLinks.new(resources, options[:context]).serializable_hash(options) - links.update(pagination_links) - end - - def paginated?(collection) - collection.respond_to?(:current_page) && - collection.respond_to?(:total_pages) && - collection.respond_to?(:size) + def links_for(serializer, options) + JsonApi::PaginationLinks.new(serializer.object, options[:context]).serializable_hash(options) end end diff --git a/lib/active_model/serializer/array_serializer.rb b/lib/active_model/serializer/array_serializer.rb index 252eadf2..54cb17a0 100644 --- a/lib/active_model/serializer/array_serializer.rb +++ b/lib/active_model/serializer/array_serializer.rb @@ -29,6 +29,12 @@ module ActiveModel key = root || @serializers.first.try(:json_key) || object.try(:name).try(:underscore) key.try(:pluralize) end + + def paginated? + object.respond_to?(:current_page) && + object.respond_to?(:total_pages) && + object.respond_to?(:size) + end end end end