From ab1a4074ba6c79b5012c31c0d75deeb259303e10 Mon Sep 17 00:00:00 2001 From: Yehuda Katz Date: Wed, 11 Jan 2012 11:13:32 -0700 Subject: [PATCH] Revert polymorphism --- lib/active_model/serializer.rb | 42 +++------------- test/serializer_test.rb | 89 ---------------------------------- 2 files changed, 6 insertions(+), 125 deletions(-) diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index 49dd4a62c..840c943a1 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -80,10 +80,6 @@ def key options[:key] || name end - def polymorphic? - options[:polymorphic] - end - protected def find_serializable(object, scope, context, options) @@ -121,49 +117,23 @@ def serialize_ids(collection, scope) class HasOne < Config #:nodoc: def serialize(object, scope, context, options) - if polymorphic? - if object - find_serializable(object, scope, context, options).as_json(:root => polymorphic_key(object)) - else - {} - end - else - { key => object && find_serializable(object, scope, context, options).as_json(:root => false) } - end + { key => object && find_serializable(object, scope, context, options).as_json(:root => false) } end def serialize_many(object, scope, context, options) - if polymorphic? - if object - find_serializable(object, scope, context, options).as_json(:root => polymorphic_key(object)) - else - {} - end - else - key = self.key.to_s.pluralize.to_sym - value = object && find_serializable(object, scope, context, options).as_json(:root => false) - value = value ? [value] : [] - { key => value } - end + key = self.key.to_s.pluralize.to_sym + value = object && find_serializable(object, scope, context, options).as_json(:root => false) + value = value ? [value] : [] + { key => value } end def serialize_ids(object, scope) - if polymorphic? && object - { - polymorphic_key(object) => object.read_attribute_for_serialization(:id), - } - elsif polymorphic? && !object - { } - elsif object + if object { key => object.read_attribute_for_serialization(:id) } else { key => nil } end end - - def polymorphic_key(object) - object.class.to_s.demodulize.underscore.to_sym - end end end diff --git a/test/serializer_test.rb b/test/serializer_test.rb index 07103367d..597c9eca8 100644 --- a/test/serializer_test.rb +++ b/test/serializer_test.rb @@ -679,95 +679,6 @@ def test_embed_objects_for_has_one }, hash.as_json) end - class PolymorphicUser < User ; end - - class PolymorphicUserSerializer < ActiveModel::Serializer - attributes :first_name, :last_name - end - - def test_polymorphic_has_one - polymorphic_blog = Class.new do - attr_accessor :writer - end - - polymorphic_serializer = Class.new(ActiveModel::Serializer) do - has_one :writer, :polymorphic => true - end - - user = PolymorphicUser.new - blog = polymorphic_blog.new - blog.writer = user - - serializer = polymorphic_serializer.new(blog, user) - - assert_equal({ - :polymorphic_user => { - :first_name => "Jose", - :last_name => "Valim" - } - }, serializer.as_json) - end - - def test_polymorphic_has_one_with_nil - polymorphic_blog = Class.new do - attr_accessor :writer - end - - polymorphic_serializer = Class.new(ActiveModel::Serializer) do - has_one :writer, :polymorphic => true - end - - user = PolymorphicUser.new - blog = polymorphic_blog.new - blog.writer = nil - - serializer = polymorphic_serializer.new(blog, user) - - assert_equal({ - }, serializer.as_json) - end - - def test_polymorphic_has_one_with_ids - polymorphic_blog = Class.new do - attr_accessor :writer - end - - polymorphic_serializer = Class.new(ActiveModel::Serializer) do - embed :ids - has_one :writer, :polymorphic => true - end - - user = PolymorphicUser.new :id => 1 - blog = polymorphic_blog.new - blog.writer = user - - serializer = polymorphic_serializer.new(blog, user) - - assert_equal({ - :polymorphic_user => 1 - }, serializer.as_json) - end - - def test_polymorphic_has_one_id_with_nil - polymorphic_blog = Class.new do - attr_accessor :writer - end - - polymorphic_serializer = Class.new(ActiveModel::Serializer) do - embed :ids - has_one :writer, :polymorphic => true - end - - user = PolymorphicUser.new - blog = polymorphic_blog.new - blog.writer = nil - - serializer = polymorphic_serializer.new(blog, user) - - assert_equal({ - }, serializer.as_json) - end - def test_root_provided_in_options author_serializer = Class.new(ActiveModel::Serializer) do attributes :id, :name