mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-22 22:06:50 +00:00
Merge pull request #665 from andreychernih/fix-each-serializer-option
Make sure `render json: ..., each_serializer: ...` is working with Enumerables
This commit is contained in:
commit
a84837280c
@ -84,7 +84,7 @@ module ActionController
|
||||
if serializer = options.fetch(:serializer, default_serializer(resource))
|
||||
options[:scope] = serialization_scope unless options.has_key?(:scope)
|
||||
|
||||
if resource.respond_to?(:to_ary)
|
||||
if resource.respond_to?(:each)
|
||||
options[:resource_name] = controller_name
|
||||
options[:namespace] = namespace_for_serializer if namespace_for_serializer
|
||||
end
|
||||
|
||||
@ -56,7 +56,7 @@ end
|
||||
attr_reader :key_format
|
||||
|
||||
def serializer_for(resource, options = {})
|
||||
if resource.respond_to?(:to_ary)
|
||||
if resource.respond_to?(:each)
|
||||
if Object.constants.include?(:ArraySerializer)
|
||||
::ArraySerializer
|
||||
else
|
||||
|
||||
4
test/fixtures/poro.rb
vendored
4
test/fixtures/poro.rb
vendored
@ -92,6 +92,10 @@ class ProfileSerializer < ActiveModel::Serializer
|
||||
attributes :name, :description
|
||||
end
|
||||
|
||||
class DifferentProfileSerializer < ActiveModel::Serializer
|
||||
attributes :name
|
||||
end
|
||||
|
||||
class CategorySerializer < ActiveModel::Serializer
|
||||
attributes :name
|
||||
|
||||
|
||||
@ -283,5 +283,21 @@ module ActionController
|
||||
assert_equal("{\"my\":[{\"name\":\"Name 1\",\"email\":\"mail@server.com\",\"profile_id\":#{@controller.user.profile.object_id}}],\"profiles\":[{\"name\":\"N1\",\"description\":\"D1\"}]}", @response.body)
|
||||
end
|
||||
end
|
||||
|
||||
class ExplicitEachSerializerWithEnumarableObjectTest < ActionController::TestCase
|
||||
class MyController < ActionController::Base
|
||||
def render_array
|
||||
render json: [Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })].to_enum, each_serializer: DifferentProfileSerializer
|
||||
end
|
||||
end
|
||||
|
||||
tests MyController
|
||||
|
||||
def test_render_array
|
||||
get :render_array
|
||||
assert_equal 'application/json', @response.content_type
|
||||
assert_equal '{"my":[{"name":"Name 1"}]}', @response.body
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
Reference in New Issue
Block a user