From f647b7ae74ce898d14ebbc298c01662016380818 Mon Sep 17 00:00:00 2001 From: Santiago Pastorino Date: Mon, 19 Aug 2013 17:26:07 -0300 Subject: [PATCH] Implement each_serializer --- lib/active_model/array_serializer.rb | 3 ++- test/unit/active_model/array_serializer_test.rb | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/active_model/array_serializer.rb b/lib/active_model/array_serializer.rb index 083a1def..6a56262e 100644 --- a/lib/active_model/array_serializer.rb +++ b/lib/active_model/array_serializer.rb @@ -7,7 +7,8 @@ module ActiveModel def serializable_array @object.map do |item| - if serializer = Serializer.serializer_for(item) + serializer = @options[:each_serializer] || Serializer.serializer_for(item) + if serializer serializer.new(item).serializable_object(@options.merge(root: nil)) else item.as_json diff --git a/test/unit/active_model/array_serializer_test.rb b/test/unit/active_model/array_serializer_test.rb index 9a77f3fb..25ede76b 100644 --- a/test/unit/active_model/array_serializer_test.rb +++ b/test/unit/active_model/array_serializer_test.rb @@ -27,6 +27,17 @@ module ActiveModel assert_equal expected, serializer.serializable_array end + + def test_array_serializers_each_serializer + array = [::Model.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' }), + ::Model.new({ name: 'Name 2', description: 'Description 2', comments: 'Comments 2' })] + serializer = ArraySerializer.new(array, each_serializer: ProfileSerializer) + + expected = [{'name' => 'Name 1', 'description' => 'Description 1'}, + {'name' => 'Name 2', 'description' => 'Description 2'}] + + assert_equal expected, serializer.serializable_array + end end end end