From 82951c1f8ac7d6eee3325bfc84cdd554bcc07a44 Mon Sep 17 00:00:00 2001 From: Rafael Felix Date: Thu, 3 Jan 2013 16:01:46 -0200 Subject: [PATCH] Fix global ``` self.root = false ``` Using the on_load hook does not change the defined root on Serializer#inherited. Related to #179 --- lib/active_model/serializer.rb | 18 ++++++++---------- test/serializer_test.rb | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index b070664c..af13de01 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -220,15 +220,6 @@ module ActiveModel self._root = name end alias_method :root=, :root - - def inherited(klass) #:nodoc: - return if klass.anonymous? - name = klass.name.demodulize.underscore.sub(/_serializer$/, '') - - klass.class_eval do - root name.to_sym unless self._root == false - end - end end attr_reader :object, :options @@ -237,6 +228,13 @@ module ActiveModel @object, @options = object, options end + def root_name + return false if self._root == false + + class_name = self.class.name.demodulize.underscore.sub(/_serializer$/, '').to_sym unless self.class.name.blank? + self._root || class_name + end + def url_options @options[:url_options] || {} end @@ -252,7 +250,7 @@ module ActiveModel # Returns a json representation of the serializable # object including the root. def as_json(options={}) - if root = options.fetch(:root, @options.fetch(:root, _root)) + if root = options.fetch(:root, @options.fetch(:root, root_name)) @options[:hash] = hash = {} @options[:unique_values] = {} diff --git a/test/serializer_test.rb b/test/serializer_test.rb index 9fe10e64..6888b988 100644 --- a/test/serializer_test.rb +++ b/test/serializer_test.rb @@ -274,6 +274,23 @@ class SerializerTest < ActiveModel::TestCase assert_equal({ :author => nil }, serializer.new(blog, :scope => user).as_json) end + def test_root_false_on_load_active_model_serializers + begin + ActiveSupport.on_load(:active_model_serializers) do + self.root = false + end + + blog = Blog.new + serializer = BlogSerializer.new(blog) + + assert_equal({ :author => nil }, serializer.as_json) + ensure + ActiveSupport.on_load(:active_model_serializers) do + self.root = nil + end + end + end + def test_embed_ids serializer = post_serializer