Merge pull request #180 from fellix/fix-remove-root-globally

Fix global ``` self.root = false ```
This commit is contained in:
Steve Klabnik 2013-03-05 15:48:08 -08:00
commit d638e21c8c
2 changed files with 25 additions and 10 deletions

View File

@ -229,15 +229,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
@ -246,6 +237,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
@ -261,7 +259,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] = {}

View File

@ -296,6 +296,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