From c389ae220765d66078f9ed5d16d5d91743ba6314 Mon Sep 17 00:00:00 2001 From: Tema Bolshakov Date: Mon, 18 Aug 2014 12:34:03 +0400 Subject: [PATCH 1/2] 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' }), From 6869cc9c3b2c1c323dab888435521ff39f22be80 Mon Sep 17 00:00:00 2001 From: Tema Bolshakov Date: Mon, 18 Aug 2014 12:47:22 +0400 Subject: [PATCH 2/2] No need to instantiate serializer --- .../active_model/array_serializer/serialization_test.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/unit/active_model/array_serializer/serialization_test.rb b/test/unit/active_model/array_serializer/serialization_test.rb index b1b1e67e..01f55b30 100644 --- a/test/unit/active_model/array_serializer/serialization_test.rb +++ b/test/unit/active_model/array_serializer/serialization_test.rb @@ -20,10 +20,10 @@ module ActiveModel class CustomArraySerializerSupport < Minitest::Test def setup - Object.const_set(:ArraySerializer, Class.new{ def initialize(*); end }) + Object.const_set(:ArraySerializer, Class.new) array = [1, 2, 3] - @serializer = Serializer.serializer_for(array).new(array) + @serializer_class = Serializer.serializer_for(array) end def teardown @@ -31,7 +31,7 @@ module ActiveModel end def test_serializer_for_array_returns_appropriate_type - assert_kind_of ::ArraySerializer, @serializer + assert_equal ::ArraySerializer, @serializer_class end end