From bcd3844e5839c113746b85a428429329b457da21 Mon Sep 17 00:00:00 2001 From: Alexandre de Oliveira Date: Wed, 11 Mar 2015 16:14:02 -0300 Subject: [PATCH] Stores passed in options in array serializers This is supported in single serializers. This adds support for passing options from array serializers to each serializer in it. --- lib/active_model/serializer/array_serializer.rb | 4 +++- test/array_serializer_test.rb | 4 +++- test/fixtures/poro.rb | 4 ++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/active_model/serializer/array_serializer.rb b/lib/active_model/serializer/array_serializer.rb index 2f679bbe..b9627fd2 100644 --- a/lib/active_model/serializer/array_serializer.rb +++ b/lib/active_model/serializer/array_serializer.rb @@ -7,12 +7,14 @@ module ActiveModel attr_reader :meta, :meta_key def initialize(objects, options = {}) + options.merge!(root: nil) + @objects = objects.map do |object| serializer_class = options.fetch( :serializer, ActiveModel::Serializer.serializer_for(object) ) - serializer_class.new(object) + serializer_class.new(object, options) end @meta = options[:meta] @meta_key = options[:meta_key] diff --git a/test/array_serializer_test.rb b/test/array_serializer_test.rb index 4c9b63e1..4fc77409 100644 --- a/test/array_serializer_test.rb +++ b/test/array_serializer_test.rb @@ -6,7 +6,7 @@ module ActiveModel def setup @comment = Comment.new @post = Post.new - @serializer = ArraySerializer.new([@comment, @post]) + @serializer = ArraySerializer.new([@comment, @post], {some: :options}) end def test_respond_to_each @@ -21,6 +21,8 @@ module ActiveModel assert_kind_of PostSerializer, serializers.last assert_kind_of Post, serializers.last.object + + assert_equal serializers.last.custom_options[:some], :options end end end diff --git a/test/fixtures/poro.rb b/test/fixtures/poro.rb index c42b48a3..f2862f97 100644 --- a/test/fixtures/poro.rb +++ b/test/fixtures/poro.rb @@ -78,6 +78,10 @@ PostSerializer = Class.new(ActiveModel::Serializer) do def blog Blog.new(id: 999, name: "Custom blog") end + + def custom_options + options + end end SpammyPostSerializer = Class.new(ActiveModel::Serializer) do