diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index fa1cfd19..bc96fbfa 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -522,11 +522,4 @@ module ActiveModel ActiveSupport::Notifications.instrument("#{name}.serializer", payload, &block) end end -end - -class Array - # Array uses ActiveModel::ArraySerializer. - def active_model_serializer - ActiveModel::ArraySerializer - end -end +end \ No newline at end of file diff --git a/lib/active_model_serializers.rb b/lib/active_model_serializers.rb index da4c1780..18679652 100644 --- a/lib/active_model_serializers.rb +++ b/lib/active_model_serializers.rb @@ -56,6 +56,18 @@ ActiveSupport.on_load(:active_record) do include ActiveModel::SerializerSupport end +module ActiveModel::ArraySerializerSupport + def active_model_serializer + ActiveModel::ArraySerializer + end +end + +Array.send(:include, ActiveModel::ArraySerializerSupport) + +ActiveSupport.on_load(:active_record) do + ActiveRecord::Relation.send(:include, ActiveModel::ArraySerializerSupport) +end + begin require 'action_controller' require 'action_controller/serialization' diff --git a/test/serializer_support_test.rb b/test/serializer_support_test.rb index b2d2b8be..2e963027 100644 --- a/test/serializer_support_test.rb +++ b/test/serializer_support_test.rb @@ -4,8 +4,27 @@ class RandomModel include ActiveModel::SerializerSupport end +class RandomModelCollection + include ActiveModel::ArraySerializerSupport +end + +module ActiveRecord + class Relation + end +end + class SerializerSupportTest < ActiveModel::TestCase test "it returns nil if no serializer exists" do assert_equal nil, RandomModel.new.active_model_serializer end -end \ No newline at end of file + + test "it returns ArraySerializer for a collection" do + assert_equal ActiveModel::ArraySerializer, RandomModelCollection.new.active_model_serializer + end + + test "it automatically includes array_serializer in active_record/relation" do + ActiveSupport.run_load_hooks(:active_record) + assert_equal ActiveModel::ArraySerializer, ActiveRecord::Relation.new.active_model_serializer + end +end +