Skip to content

Commit 55210ab

Browse files
committed
Merge pull request #813 from jtomaszewski/feature/custom-serializer-class
Allow to define custom serializer for given class
2 parents 1a7395b + d8b78a3 commit 55210ab

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

lib/active_model/serializer.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@ def format_keys(format)
5656
attr_reader :key_format
5757

5858
def serializer_for(resource, options = {})
59-
if resource.respond_to?(:to_ary)
59+
if resource.respond_to?(:serializer_class)
60+
resource.serializer_class
61+
elsif resource.respond_to?(:to_ary)
6062
if Object.constants.include?(:ArraySerializer)
6163
::ArraySerializer
6264
else

test/unit/active_model/array_serializer/serialization_test.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,23 @@ def test_serializer_for_array_returns_appropriate_type
3535
end
3636
end
3737

38+
class CustomSerializerClassTest < Minitest::Test
39+
def setup
40+
Object.const_set(:CustomSerializer, Class.new)
41+
end
42+
43+
def teardown
44+
Object.send(:remove_const, :CustomSerializer)
45+
end
46+
47+
def test_serializer_for_array_returns_appropriate_type
48+
object = {}
49+
def object.serializer_class; CustomSerializer; end
50+
51+
assert_equal CustomSerializer, Serializer.serializer_for(object)
52+
end
53+
end
54+
3855
class ModelSerializationTest < Minitest::Test
3956
def test_array_serializer_serializes_models
4057
array = [Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' }),

0 commit comments

Comments
 (0)