From de7d93a28639e2429b6ba299bfe9b4d5b10d5af8 Mon Sep 17 00:00:00 2001 From: Michael He Date: Fri, 13 Jun 2014 18:49:21 +0900 Subject: [PATCH 1/2] add handling each_serializer when expose a collection of object. --- lib/rocket_pants/controller/respondable.rb | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/lib/rocket_pants/controller/respondable.rb b/lib/rocket_pants/controller/respondable.rb index b01d2d9..a838cc1 100644 --- a/lib/rocket_pants/controller/respondable.rb +++ b/lib/rocket_pants/controller/respondable.rb @@ -62,9 +62,12 @@ def self.extract_pagination(collection) end def self.normalise_object(object, options = {}) + object = object.to_a if options[:each_serializer] + # First, prepare the object for serialization. object = normalise_to_serializer object, options # Convert the object using a standard grape-like lookup chain. + if object.is_a?(Array) || object.is_a?(Set) object.map { |o| normalise_object o, options } elsif object.respond_to?(:serializable_hash) @@ -78,12 +81,32 @@ def self.normalise_object(object, options = {}) def self.normalise_to_serializer(object, options) return object unless RocketPants.serializers_enabled? + if object.is_a?(Array) + serialize_collection object, options + else + serialize_object object, options + end + end + + def self.serialize_object object, options serializer = options.delete(:serializer) serializer = object.active_model_serializer if object.respond_to?(:active_model_serializer) && serializer.nil? return object unless serializer SerializerWrapper.new serializer, object end + def self.serialize_collection collection, options + serializer = options.delete(:each_serializer) + collection.map do |object| + serializer = object.active_model_serializer if object.respond_to?(:active_model_serializer) && serializer.nil? + if serializer + SerializerWrapper.new serializer, object + else + object + end + end + end + RENDERING_OPTIONS = [:status, :content_type] private From 0bb9b897dbf89d806101455376b59a9bb7383def Mon Sep 17 00:00:00 2001 From: Michael He Date: Wed, 18 Jun 2014 17:07:38 +0900 Subject: [PATCH 2/2] support active model serializer choosing according to model.active_model_serializer --- lib/rocket_pants/controller/respondable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rocket_pants/controller/respondable.rb b/lib/rocket_pants/controller/respondable.rb index a838cc1..304f3e8 100644 --- a/lib/rocket_pants/controller/respondable.rb +++ b/lib/rocket_pants/controller/respondable.rb @@ -98,7 +98,7 @@ def self.serialize_object object, options def self.serialize_collection collection, options serializer = options.delete(:each_serializer) collection.map do |object| - serializer = object.active_model_serializer if object.respond_to?(:active_model_serializer) && serializer.nil? + serializer = object.active_model_serializer if object.respond_to?(:active_model_serializer) if serializer SerializerWrapper.new serializer, object else