diff --git a/lib/action_controller/serialization.rb b/lib/action_controller/serialization.rb index a4faf972..cc007a58 100644 --- a/lib/action_controller/serialization.rb +++ b/lib/action_controller/serialization.rb @@ -34,6 +34,12 @@ module ActionController self._serialization_scope = :current_user end + module ClassMethods + def serialization_scope(scope) + self._serialization_scope = scope + end + end + def _render_option_json(resource, options) serializer = build_json_serializer(resource, options) diff --git a/test/integration/action_controller/serialization_test.rb b/test/integration/action_controller/serialization_test.rb index fe356cbc..66fcea8f 100644 --- a/test/integration/action_controller/serialization_test.rb +++ b/test/integration/action_controller/serialization_test.rb @@ -91,5 +91,29 @@ module ActionController assert_equal '{"name":"Name 1","description":"Description 1 - current_admin"}', @response.body end end + + class CallingSerializationScopeTest < ActionController::TestCase + class MyController < ActionController::Base + def render_calling_serialization_scope + render json: Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' }) + end + + private + + def current_user + 'current_user' + end + + serialization_scope :current_user + end + + tests MyController + + def test_render_calling_serialization_scope + get :render_calling_serialization_scope + assert_equal 'application/json', @response.content_type + assert_equal '{"name":"Name 1","description":"Description 1 - current_user"}', @response.body + end + end end end