Check superclasses for Serializers

This commit is contained in:
Jake Quain 2014-10-13 17:39:54 -06:00
parent 97023db904
commit c0166f3026
2 changed files with 24 additions and 2 deletions

View File

@ -66,8 +66,7 @@ module ActiveModel
if resource.respond_to?(:to_ary)
config.array_serializer
else
serializer_class = "#{resource.class.name}Serializer"
serializer_class.safe_constantize
get_serializer_for(resource.class)
end
end
@ -110,5 +109,19 @@ module ActiveModel
end
end
end
private
def self.get_serializer_for(klass)
serializer_class_name = "#{klass.name}Serializer"
serializer_class = serializer_class_name.safe_constantize
if serializer_class
serializer_class
elsif klass.superclass
get_serializer_for(klass.superclass)
end
end
end
end

View File

@ -27,8 +27,12 @@ module ActiveModel
end
class SerializerTest < Minitest::Test
class MyProfile < Profile
end
def setup
@profile = Profile.new
@my_profile = MyProfile.new
@model = ::Model.new
end
@ -41,6 +45,11 @@ module ActiveModel
serializer = ActiveModel::Serializer.serializer_for(@model)
assert_equal nil, serializer
end
def test_serializer_inherited_serializer
serializer = ActiveModel::Serializer.serializer_for(@my_profile)
assert_equal ProfileSerializer, serializer
end
end
end
end