diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index 2abeebce..969fa308 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -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 diff --git a/test/serializers/serializer_for_test.rb b/test/serializers/serializer_for_test.rb index 5369c57b..1fd4c10e 100644 --- a/test/serializers/serializer_for_test.rb +++ b/test/serializers/serializer_for_test.rb @@ -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