Merge pull request #538 from mayhewluke/fix-array-output

Fix ArraySerializer's output when falling back on DefaultSerializer
This commit is contained in:
Steve Klabnik 2014-07-04 19:09:18 -07:00
commit d8f59f2e94
3 changed files with 45 additions and 1 deletions

View File

@ -83,7 +83,7 @@ module ActiveModel
serializer = item.active_model_serializer
end
serializable = serializer ? serializer.new(item, @options) : DefaultSerializer.new(item, @options)
serializable = serializer ? serializer.new(item, @options) : DefaultSerializer.new(item, @options.merge(:root => false))
if serializable.respond_to?(:serializable_hash)
serializable.serializable_hash

View File

@ -2,6 +2,27 @@ require "test_helper"
require "test_fakes"
class ArraySerializerTest < ActiveModel::TestCase
def test_array_items_do_not_have_root
array = [
BasicActiveModel.new(:name => "First model"),
BasicActiveModel.new(:name => "Second model")
]
expected = { "root" => [
{ :name => "First model" },
{ :name => "Second model" }
] }
default_serializer = array.active_model_serializer.new(array, :root => "root")
each_serializer = array.active_model_serializer.new(array, :root => "root", :each_serializer => BasicSerializer)
default_json = default_serializer.as_json
each_json = each_serializer.as_json
assert_equal(expected, default_json)
assert_equal(expected, each_json)
end
# serialize different typed objects
def test_array_serializer
model = Model.new

View File

@ -1,3 +1,26 @@
class BasicActiveModel
include ActiveModel::Serializers::JSON
def initialize(hash = {})
@attributes = hash
end
def serializable_hash(*)
@attributes
end
def method_missing(method)
if @attributes.key? method
@attributes[method]
else
raise NoMethodError
end
end
end
class BasicSerializer < ActiveModel::Serializer
attributes :name
end
class Model
def initialize(hash={})
@attributes = hash