From c389ae220765d66078f9ed5d16d5d91743ba6314 Mon Sep 17 00:00:00 2001 From: Tema Bolshakov Date: Mon, 18 Aug 2014 12:34:03 +0400 Subject: [PATCH] Support customer array serializer --- lib/active_model/serializer.rb | 12 ++++++++++-- .../array_serializer/serialization_test.rb | 19 ++++++++++++++++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index 0d7ae580..b1c5740e 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..b1b1e67e 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{ def initialize(*); end }) + + array = [1, 2, 3] + @serializer = Serializer.serializer_for(array).new(array) + end + + def teardown + Object.send(:remove_const, :ArraySerializer) + end + + def test_serializer_for_array_returns_appropriate_type + assert_kind_of ::ArraySerializer, @serializer + end + end + class ModelSerializationTest < Minitest::Test def test_array_serializer_serializes_models array = [Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' }),