diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index 608616ae..281c98fc 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -58,7 +58,11 @@ end if RUBY_VERSION >= '2.0' def serializer_for(resource) if resource.respond_to?(:to_ary) - ArraySerializer + if Object.constants.include?(:ArraySerializer) + ::ArraySerializer + else + ArraySerializer + end else begin Object.const_get "#{resource.class.name}Serializer" @@ -70,7 +74,11 @@ end else def serializer_for(resource) if resource.respond_to?(:to_ary) - ArraySerializer + if Object.constants.include?(:ArraySerializer) + ::ArraySerializer + else + ArraySerializer + end else "#{resource.class.name}Serializer".safe_constantize end diff --git a/test/unit/active_model/array_serializer/serialization_test.rb b/test/unit/active_model/array_serializer/serialization_test.rb index 3be85131..01f55b30 100644 --- a/test/unit/active_model/array_serializer/serialization_test.rb +++ b/test/unit/active_model/array_serializer/serialization_test.rb @@ -9,7 +9,7 @@ module ActiveModel end def test_serializer_for_array_returns_appropriate_type - assert_kind_of ArraySerializer, @serializer + assert_kind_of ActiveModel::ArraySerializer, @serializer end def test_array_serializer_serializes_simple_objects @@ -18,6 +18,23 @@ module ActiveModel end end + class CustomArraySerializerSupport < Minitest::Test + def setup + Object.const_set(:ArraySerializer, Class.new) + + array = [1, 2, 3] + @serializer_class = Serializer.serializer_for(array) + end + + def teardown + Object.send(:remove_const, :ArraySerializer) + end + + def test_serializer_for_array_returns_appropriate_type + assert_equal ::ArraySerializer, @serializer_class + end + end + class ModelSerializationTest < Minitest::Test def test_array_serializer_serializes_models array = [Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' }),