Always set a serializer for each item of an Array

model.active_model_serializer could return nil so we need to ensure that
if serializer is not setted we set DefaultSerializer to it.

This reverts commit 64ed05c484.

Fixes #318
This commit is contained in:
Santiago Pastorino 2013-05-28 18:03:19 -07:00
parent 8795f2bc1e
commit c97acfd9ba
2 changed files with 19 additions and 3 deletions

View File

@ -49,9 +49,8 @@ module ActiveModel
serializer = options[:each_serializer]
elsif item.respond_to?(:active_model_serializer)
serializer = item.active_model_serializer
else
serializer = DefaultSerializer
end
serializer ||= DefaultSerializer
serializable = serializer.new(item, options.merge(:root => nil))

View File

@ -52,7 +52,7 @@ class ArraySerializerTest < ActiveModel::TestCase
assert_equal({ :items => [ hash.as_json ]}, serializer.as_json)
end
def test_array_serializer_with_specified_seriailizer
def test_array_serializer_with_specified_serializer
post1 = Post.new(:title => "Post1", :author => "Author1", :id => 1)
post2 = Post.new(:title => "Post2", :author => "Author2", :id => 2)
@ -65,4 +65,21 @@ class ArraySerializerTest < ActiveModel::TestCase
{ :title => "Post2" }
], serializer.as_json)
end
def test_array_serializer_using_default_serializer
hash = { "value" => "something" }
class << hash
def active_model_serializer
nil
end
end
array = [hash]
serializer = array.active_model_serializer.new array
assert_equal([
{ "value" => "something" }
], serializer.as_json)
end
end