From 7eb2b90b7c8f9d561e49d2da914ad843a2f88723 Mon Sep 17 00:00:00 2001 From: Bradley Priest Date: Tue, 10 Jul 2012 10:17:54 +0800 Subject: [PATCH 1/2] Automatically include ArraySerializer in ActiveRecord::Relation fixes #81 --- lib/active_model/serializer.rb | 10 ++++++++-- test/serializer_support_test.rb | 21 ++++++++++++++++++++- 2 files changed, 28 insertions(+), 3 deletions(-) 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 + From f41978b8de5bc58a0ee7338e3245d4d99a0dde80 Mon Sep 17 00:00:00 2001 From: Bradley Priest Date: Tue, 10 Jul 2012 10:23:45 +0800 Subject: [PATCH 2/2] move array_serializer logic to active_model_serializer.rb --- lib/active_model/serializer.rb | 15 +-------------- lib/active_model_serializers.rb | 12 ++++++++++++ 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index de54646f..bc96fbfa 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -522,17 +522,4 @@ module ActiveModel ActiveSupport::Notifications.instrument("#{name}.serializer", payload, &block) end end -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 - +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'