Skip to content

Commit 74625f7

Browse files
committed
Merge pull request #594 from bolshakov/feature/custom_array_serializer
Support custom array serializer
2 parents e9378cc + 6869cc9 commit 74625f7

File tree

2 files changed

+28
-3
lines changed

2 files changed

+28
-3
lines changed

lib/active_model/serializer.rb

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,11 @@ def format_keys(format)
5858
if RUBY_VERSION >= '2.0'
5959
def serializer_for(resource)
6060
if resource.respond_to?(:to_ary)
61-
ArraySerializer
61+
if Object.constants.include?(:ArraySerializer)
62+
::ArraySerializer
63+
else
64+
ArraySerializer
65+
end
6266
else
6367
begin
6468
Object.const_get "#{resource.class.name}Serializer"
@@ -70,7 +74,11 @@ def serializer_for(resource)
7074
else
7175
def serializer_for(resource)
7276
if resource.respond_to?(:to_ary)
73-
ArraySerializer
77+
if Object.constants.include?(:ArraySerializer)
78+
::ArraySerializer
79+
else
80+
ArraySerializer
81+
end
7482
else
7583
"#{resource.class.name}Serializer".safe_constantize
7684
end

test/unit/active_model/array_serializer/serialization_test.rb

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ def setup
99
end
1010

1111
def test_serializer_for_array_returns_appropriate_type
12-
assert_kind_of ArraySerializer, @serializer
12+
assert_kind_of ActiveModel::ArraySerializer, @serializer
1313
end
1414

1515
def test_array_serializer_serializes_simple_objects
@@ -18,6 +18,23 @@ def test_array_serializer_serializes_simple_objects
1818
end
1919
end
2020

21+
class CustomArraySerializerSupport < Minitest::Test
22+
def setup
23+
Object.const_set(:ArraySerializer, Class.new)
24+
25+
array = [1, 2, 3]
26+
@serializer_class = Serializer.serializer_for(array)
27+
end
28+
29+
def teardown
30+
Object.send(:remove_const, :ArraySerializer)
31+
end
32+
33+
def test_serializer_for_array_returns_appropriate_type
34+
assert_equal ::ArraySerializer, @serializer_class
35+
end
36+
end
37+
2138
class ModelSerializationTest < Minitest::Test
2239
def test_array_serializer_serializes_models
2340
array = [Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' }),

0 commit comments

Comments
 (0)