diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index fa1cfd19..de54646f 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -524,9 +524,15 @@ module ActiveModel end end -class Array - # Array uses ActiveModel::ArraySerializer. +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 + 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 +