From 626a85bc3ec010f1b057abcb675641aa682a0f5e Mon Sep 17 00:00:00 2001 From: Santiago Pastorino Date: Sat, 14 Sep 2013 21:15:04 -0300 Subject: [PATCH] Allow using root = false in initialize --- lib/active_model/array_serializer.rb | 3 ++- lib/active_model/serializer.rb | 3 ++- test/unit/active_model/array_serializer/root_test.rb | 10 ++++++++++ test/unit/active_model/serializer/root_test.rb | 9 +++++++++ 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/lib/active_model/array_serializer.rb b/lib/active_model/array_serializer.rb index 5a9e5c98..471d7f4a 100644 --- a/lib/active_model/array_serializer.rb +++ b/lib/active_model/array_serializer.rb @@ -15,7 +15,8 @@ module ActiveModel def initialize(object, options={}) @object = object @options = options - @root = options[:root] || self.class._root + @root = options[:root] + @root = self.class._root if @root.nil? @meta_key = options[:meta_key] || :meta @meta = options[@meta_key] end diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index 2b782152..83874b4a 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -85,7 +85,8 @@ module ActiveModel alias read_attribute_for_serialization send def root=(root) - @root = root || self.class._root + @root = root + @root = self.class._root if @root.nil? @root = self.class.root_name if auto_assign_root? end diff --git a/test/unit/active_model/array_serializer/root_test.rb b/test/unit/active_model/array_serializer/root_test.rb index 01aebf3d..a6eaf8f0 100644 --- a/test/unit/active_model/array_serializer/root_test.rb +++ b/test/unit/active_model/array_serializer/root_test.rb @@ -38,6 +38,16 @@ module ActiveModel ] }, @serializer.as_json(root: 'argument')) end + + def test_using_false_root_in_initialize_takes_precedence + ArraySerializer._root = 'root' + @serializer = ArraySerializer.new([@profile1, @profile2], root: false) + + assert_equal([ + { 'name' => 'Name 1', 'description' => 'Description 1' }, + { 'name' => 'Name 2', 'description' => 'Description 2' } + ], @serializer.as_json) + end end class RootInSerializerTest < ActiveModel::TestCase diff --git a/test/unit/active_model/serializer/root_test.rb b/test/unit/active_model/serializer/root_test.rb index 53a1658e..4c76c888 100644 --- a/test/unit/active_model/serializer/root_test.rb +++ b/test/unit/active_model/serializer/root_test.rb @@ -45,6 +45,15 @@ module ActiveModel } }, @serializer.as_json(root: 'argument')) end + + def test_using_false_root_in_initializer_takes_precedence + ProfileSerializer._root = 'root' + @serializer = ProfileSerializer.new(@profile, root: false) + + assert_equal({ + 'name' => 'Name 1', 'description' => 'Description 1' + }, @serializer.as_json) + end end class RootInSerializerTest < ActiveModel::TestCase