From c7a420d29574c135e4b5d91d81af34bbdc23eade Mon Sep 17 00:00:00 2001 From: Michi Huber Date: Tue, 26 Feb 2013 11:17:28 +0100 Subject: [PATCH] Don't fail if object is nil, render null --- lib/active_model/serializer.rb | 1 + test/serializer_test.rb | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index b070664c..5cec7187 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -267,6 +267,7 @@ module ActiveModel # Returns a hash representation of the serializable # object without the root. def serializable_hash + return nil if @object.nil? instrument(:serialize, :serializer => self.class.name) do @node = attributes instrument :associations do diff --git a/test/serializer_test.rb b/test/serializer_test.rb index 9fe10e64..04b3742f 100644 --- a/test/serializer_test.rb +++ b/test/serializer_test.rb @@ -254,6 +254,28 @@ class SerializerTest < ActiveModel::TestCase assert_equal({ :my_blog => { :author => nil } }, serializer.new(blog, :scope => user).as_json) end + def test_nil_root_object + user = User.new + blog = nil + + serializer = Class.new(BlogSerializer) do + root false + end + + assert_equal(nil, serializer.new(blog, :scope => user).as_json) + end + + def test_custom_root_with_nil_root_object + user = User.new + blog = nil + + serializer = Class.new(BlogSerializer) do + root :my_blog + end + + assert_equal({ :my_blog => nil }, serializer.new(blog, :scope => user).as_json) + end + def test_false_root user = User.new blog = Blog.new