Merge pull request #88 from bradleypriest/ar-relation

Automatically include ArraySerializer in ActiveRecord::Relation
This commit is contained in:
José Valim 2012-07-11 04:04:38 -07:00
commit b91e63c4ec
3 changed files with 33 additions and 9 deletions

View File

@ -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

View File

@ -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'

View File

@ -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
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