Merge pull request #949 from edwardloveall/el-870-fix

Don't pass serializer option to associated serializers
This commit is contained in:
João Moura 2015-06-13 03:01:25 -03:00
commit de23501995
6 changed files with 37 additions and 11 deletions

View File

@ -220,7 +220,7 @@ module ActiveModel
if serializer_class if serializer_class
serializer = serializer_class.new( serializer = serializer_class.new(
association_value, association_value,
options.merge(serializer_from_options(association_options)) options.except(:serializer).merge(serializer_from_options(association_options))
) )
elsif !association_value.nil? && !association_value.instance_of?(Object) elsif !association_value.nil? && !association_value.instance_of?(Object)
association_options[:association_options][:virtual_value] = association_value association_options[:association_options][:virtual_value] = association_value

View File

@ -3,7 +3,7 @@ require 'test_helper'
module ActionController module ActionController
module Serialization module Serialization
class AdapterSelectorTest < ActionController::TestCase class AdapterSelectorTest < ActionController::TestCase
class MyController < ActionController::Base class AdapterSelectorTestController < ActionController::Base
def render_using_default_adapter def render_using_default_adapter
@profile = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' }) @profile = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
render json: @profile render json: @profile
@ -20,7 +20,7 @@ module ActionController
end end
end end
tests MyController tests AdapterSelectorTestController
def test_render_using_default_adapter def test_render_using_default_adapter
get :render_using_default_adapter get :render_using_default_adapter

View File

@ -3,7 +3,7 @@ require 'test_helper'
module ActionController module ActionController
module Serialization module Serialization
class ExplicitSerializerTest < ActionController::TestCase class ExplicitSerializerTest < ActionController::TestCase
class MyController < ActionController::Base class ExplicitSerializerTestController < ActionController::Base
def render_using_explicit_serializer def render_using_explicit_serializer
@profile = Profile.new(name: 'Name 1', @profile = Profile.new(name: 'Name 1',
description: 'Description 1', description: 'Description 1',
@ -55,9 +55,16 @@ module ActionController
render json: [@post], each_serializer: PostPreviewSerializer render json: [@post], each_serializer: PostPreviewSerializer
end end
def render_using_explicit_each_serializer
location = Location.new(id: 42, lat: '-23.550520', lng: '-46.633309')
place = Place.new(id: 1337, name: 'Amazing Place', locations: [location])
render json: place, each_serializer: PlaceSerializer
end
end end
tests MyController tests ExplicitSerializerTestController
def test_render_using_explicit_serializer def test_render_using_explicit_serializer
get :render_using_explicit_serializer get :render_using_explicit_serializer
@ -105,6 +112,25 @@ module ActionController
assert_equal expected.to_json, @response.body assert_equal expected.to_json, @response.body
end end
def test_render_using_explicit_each_serializer
get :render_using_explicit_each_serializer
expected = {
id: 1337,
name: "Amazing Place",
locations: [
{
id: 42,
lat: "-23.550520",
lng: "-46.633309",
place: "Nowhere" # is a virtual attribute on LocationSerializer
}
]
}
assert_equal expected.to_json, response.body
end
end end
end end
end end

View File

@ -3,7 +3,7 @@ require 'test_helper'
module ActionController module ActionController
module Serialization module Serialization
class JsonApiLinkedTest < ActionController::TestCase class JsonApiLinkedTest < ActionController::TestCase
class MyController < ActionController::Base class JsonApiLinkedTestController < ActionController::Base
def setup_post def setup_post
ActionController::Base.cache_store.clear ActionController::Base.cache_store.clear
@role1 = Role.new(id: 1, name: 'admin') @role1 = Role.new(id: 1, name: 'admin')
@ -78,7 +78,7 @@ module ActionController
end end
end end
tests MyController tests JsonApiLinkedTestController
def test_render_resource_without_include def test_render_resource_without_include
get :render_resource_without_include get :render_resource_without_include

View File

@ -3,7 +3,7 @@ require 'test_helper'
module ActionController module ActionController
module Serialization module Serialization
class RescueFromTest < ActionController::TestCase class RescueFromTest < ActionController::TestCase
class MyController < ActionController::Base class RescueFromTestController < ActionController::Base
rescue_from Exception, with: :handle_error rescue_from Exception, with: :handle_error
def render_using_raise_error_serializer def render_using_raise_error_serializer
@ -16,7 +16,7 @@ module ActionController
end end
end end
tests MyController tests RescueFromTestController
def test_rescue_from def test_rescue_from
get :render_using_raise_error_serializer get :render_using_raise_error_serializer

View File

@ -3,7 +3,7 @@ require 'test_helper'
module ActionController module ActionController
module Serialization module Serialization
class ImplicitSerializerTest < ActionController::TestCase class ImplicitSerializerTest < ActionController::TestCase
class MyController < ActionController::Base class ImplicitSerializationTestController < ActionController::Base
def render_using_implicit_serializer def render_using_implicit_serializer
@profile = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' }) @profile = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
render json: @profile render json: @profile
@ -152,7 +152,7 @@ module ActionController
end end
end end
tests MyController tests ImplicitSerializationTestController
# We just have Null for now, this will change # We just have Null for now, this will change
def test_render_using_implicit_serializer def test_render_using_implicit_serializer