From a794a06fa581b6cd96f7dc8ac887447d64a486ce Mon Sep 17 00:00:00 2001 From: groyoh Date: Sun, 17 May 2015 22:47:44 +0200 Subject: [PATCH] Fixed #911 --- lib/active_model/serializer/array_serializer.rb | 2 +- test/adapter/json/collection_test.rb | 14 ++++++++++++++ test/array_serializer_test.rb | 6 ++++++ test/fixtures/poro.rb | 7 +++++++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/lib/active_model/serializer/array_serializer.rb b/lib/active_model/serializer/array_serializer.rb index b9627fd2..a5f7b6a1 100644 --- a/lib/active_model/serializer/array_serializer.rb +++ b/lib/active_model/serializer/array_serializer.rb @@ -14,7 +14,7 @@ module ActiveModel :serializer, ActiveModel::Serializer.serializer_for(object) ) - serializer_class.new(object, options) + serializer_class.new(object, options.except(:serializer)) end @meta = options[:meta] @meta_key = options[:meta_key] diff --git a/test/adapter/json/collection_test.rb b/test/adapter/json/collection_test.rb index b4acf6f9..d91fb2b6 100644 --- a/test/adapter/json/collection_test.rb +++ b/test/adapter/json/collection_test.rb @@ -22,6 +22,20 @@ module ActiveModel ActionController::Base.cache_store.clear end + def test_with_serializer_option + @blog.special_attribute = "Special" + @blog.articles = [@first_post, @second_post] + @serializer = ArraySerializer.new([@blog], serializer: CustomBlogSerializer) + @adapter = ActiveModel::Serializer::Adapter::Json.new(@serializer) + + expected = [{ + id: 1, + special_attribute: "Special", + articles: [{id: 1,title: "Hello!!", body: "Hello, world!!"}, {id: 2, title: "New Post", body: "Body"}] + }] + assert_equal expected, @adapter.serializable_hash + end + def test_include_multiple_posts expected = [{ title: "Hello!!", diff --git a/test/array_serializer_test.rb b/test/array_serializer_test.rb index eb5b7f8e..259793f7 100644 --- a/test/array_serializer_test.rb +++ b/test/array_serializer_test.rb @@ -25,6 +25,12 @@ module ActiveModel assert_equal serializers.last.custom_options[:some], :options end + def test_serializer_option_not_passed_to_each_serializer + serializers = ArraySerializer.new([@post], {serializer: PostSerializer}).to_a + + refute serializers.first.custom_options.key?(:serializer) + end + def test_meta_and_meta_key_attr_readers meta_content = {meta: "the meta", meta_key: "the meta key"} @serializer = ArraySerializer.new([@comment, @post], meta_content) diff --git a/test/fixtures/poro.rb b/test/fixtures/poro.rb index b66395c3..69185394 100644 --- a/test/fixtures/poro.rb +++ b/test/fixtures/poro.rb @@ -178,6 +178,13 @@ AlternateBlogSerializer = Class.new(ActiveModel::Serializer) do attribute :name, key: :title end +CustomBlogSerializer = Class.new(ActiveModel::Serializer) do + attribute :id + attribute :special_attribute + + has_many :articles +end + CommentPreviewSerializer = Class.new(ActiveModel::Serializer) do attributes :id