Allow to define custom serializer for given class by defining #serializer_class method in serialized object's class. Resolves #515.

This commit is contained in:
Bernard Potocki 2015-05-03 17:47:52 +02:00
parent 6a06b90743
commit c91b649504
2 changed files with 12 additions and 1 deletions

View File

@ -115,7 +115,9 @@ module ActiveModel
end
def self.serializer_for(resource, options = {})
if resource.respond_to?(:to_ary)
if resource.respond_to?(:serializer_class)
resource.serializer_class
elsif resource.respond_to?(:to_ary)
config.array_serializer
else
options

View File

@ -29,10 +29,14 @@ module ActiveModel
class SerializerTest < Minitest::Test
class MyProfile < Profile
end
class CustomProfile
def serializer_class; ProfileSerializer; end
end
def setup
@profile = Profile.new
@my_profile = MyProfile.new
@custom_profile = CustomProfile.new
@model = ::Model.new
end
@ -50,6 +54,11 @@ module ActiveModel
serializer = ActiveModel::Serializer.serializer_for(@my_profile)
assert_equal ProfileSerializer, serializer
end
def test_serializer_custom_serializer
serializer = ActiveModel::Serializer.serializer_for(@custom_profile)
assert_equal ProfileSerializer, serializer
end
end
end
end