mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-25 07:16:49 +00:00
Allow overriding the adapter with render option
Make it easy to use multiple adapters in an app. use "adapter: false" to not use ams make a test override config.adapter
This commit is contained in:
41
test/action_controller/adapter_selector_test.rb
Normal file
41
test/action_controller/adapter_selector_test.rb
Normal file
@@ -0,0 +1,41 @@
|
||||
require 'test_helper'
|
||||
|
||||
module ActionController
|
||||
module Serialization
|
||||
class AdapterSelectorTest < ActionController::TestCase
|
||||
class MyController < ActionController::Base
|
||||
def render_using_default_adapter
|
||||
@profile = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
|
||||
render json: @profile
|
||||
end
|
||||
|
||||
def render_using_adapter_override
|
||||
@profile = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
|
||||
render json: @profile, adapter: :json_api
|
||||
end
|
||||
|
||||
def render_skipping_adapter
|
||||
@profile = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
|
||||
render json: @profile, adapter: false
|
||||
end
|
||||
end
|
||||
|
||||
tests MyController
|
||||
|
||||
def test_render_using_default_adapter
|
||||
get :render_using_default_adapter
|
||||
assert_equal '{"name":"Name 1","description":"Description 1"}', response.body
|
||||
end
|
||||
|
||||
def test_render_using_adapter_override
|
||||
get :render_using_adapter_override
|
||||
assert_equal '{"profiles":{"name":"Name 1","description":"Description 1"}}', response.body
|
||||
end
|
||||
|
||||
def test_render_skipping_adapter
|
||||
get :render_skipping_adapter
|
||||
assert_equal '{"attributes":{"name":"Name 1","description":"Description 1","comments":"Comments 1"}}', response.body
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -28,54 +28,34 @@ module ActionController
|
||||
@second_comment.author = nil
|
||||
end
|
||||
|
||||
def with_json_api_adapter
|
||||
old_adapter = ActiveModel::Serializer.config.adapter
|
||||
ActiveModel::Serializer.config.adapter = :json_api
|
||||
yield
|
||||
ensure
|
||||
ActiveModel::Serializer.config.adapter = old_adapter
|
||||
end
|
||||
|
||||
def render_resource_without_include
|
||||
with_json_api_adapter do
|
||||
setup_post
|
||||
render json: @post
|
||||
end
|
||||
setup_post
|
||||
render json: @post, adapter: :json_api
|
||||
end
|
||||
|
||||
def render_resource_with_include
|
||||
with_json_api_adapter do
|
||||
setup_post
|
||||
render json: @post, include: 'author'
|
||||
end
|
||||
setup_post
|
||||
render json: @post, include: 'author', adapter: :json_api
|
||||
end
|
||||
|
||||
def render_resource_with_nested_include
|
||||
with_json_api_adapter do
|
||||
setup_post
|
||||
render json: @post, include: 'comments.author'
|
||||
end
|
||||
setup_post
|
||||
render json: @post, include: 'comments.author', adapter: :json_api
|
||||
end
|
||||
|
||||
def render_resource_with_nested_has_many_include
|
||||
with_json_api_adapter do
|
||||
setup_post
|
||||
render json: @post, include: 'author,author.roles'
|
||||
end
|
||||
setup_post
|
||||
render json: @post, include: 'author,author.roles', adapter: :json_api
|
||||
end
|
||||
|
||||
def render_collection_without_include
|
||||
with_json_api_adapter do
|
||||
setup_post
|
||||
render json: [@post]
|
||||
end
|
||||
setup_post
|
||||
render json: [@post], adapter: :json_api
|
||||
end
|
||||
|
||||
def render_collection_with_include
|
||||
with_json_api_adapter do
|
||||
setup_post
|
||||
render json: [@post], include: 'author,comments'
|
||||
end
|
||||
setup_post
|
||||
render json: [@post], include: 'author,comments', adapter: :json_api
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -25,13 +25,9 @@ module ActionController
|
||||
end
|
||||
|
||||
def render_using_custom_root_in_adapter_with_a_default
|
||||
old_adapter = ActiveModel::Serializer.config.adapter
|
||||
# JSON-API adapter sets root by default
|
||||
ActiveModel::Serializer.config.adapter = ActiveModel::Serializer::Adapter::JsonApi
|
||||
@profile = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
|
||||
render json: @profile, root: "profile"
|
||||
ensure
|
||||
ActiveModel::Serializer.config.adapter = old_adapter
|
||||
render json: @profile, root: "profile", adapter: :json_api
|
||||
end
|
||||
|
||||
def render_array_using_implicit_serializer
|
||||
|
||||
Reference in New Issue
Block a user