From 29148cbe1cb178320732818aad6676c7324cca7c Mon Sep 17 00:00:00 2001 From: Santiago Pastorino Date: Wed, 4 Sep 2013 18:32:04 -0300 Subject: [PATCH] Add AC::Serialization#serialization_scope as a class level method --- lib/action_controller/serialization.rb | 6 +++++ .../action_controller/serialization_test.rb | 24 +++++++++++++++++++ 2 files changed, 30 insertions(+) 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