Merge pull request #11 from Adman65/has_many-implicit-serializer

Has many implicit serializer
This commit is contained in:
José Valim 2011-12-12 02:49:34 -08:00
commit 03f08a8351
2 changed files with 27 additions and 6 deletions

View File

@ -134,12 +134,9 @@ module ActiveModel
class_eval "def #{attr}() object.#{attr} end", __FILE__, __LINE__
end
# if :key is specified without :serializer, then use conventions
# to determine the serializer
if options[:key] && !options[:serializer]
options[:serializer] = const_get("#{options[:key].to_s.camelize.singularize}Serializer")
else
options[:serializer] ||= const_get("#{attr.to_s.camelize}Serializer")
options[:serializer] ||= begin
serializer_class = (options[:key] || attr).to_s.classify
const_get("#{serializer_class}Serializer")
end
klass.new(attr, options)

View File

@ -211,6 +211,30 @@ class SerializerTest < ActiveModel::TestCase
}, json)
end
def test_implicit_serializer_for_has_many
blog_with_posts = Class.new(Blog) do
attr_accessor :posts
end
blog_serializer = Class.new(ActiveModel::Serializer) do
const_set(:PostSerializer, PostSerializer)
has_many :posts
end
user = User.new
blog = blog_with_posts.new
blog.posts = [Post.new(:title => 'test')]
json = blog_serializer.new(blog, user).as_json
assert_equal({
:posts => [{
:title => "test",
:body => nil,
:comments => []
}]
}, json)
end
def test_overridden_associations
author_serializer = Class.new(ActiveModel::Serializer) do
attributes :first_name