From bbc3ae44cc65e31dd8e94f3ce8376937f7da8bb4 Mon Sep 17 00:00:00 2001 From: Damian Galarza Date: Tue, 21 May 2013 10:08:48 -0400 Subject: [PATCH] Allow a controller to properly override scope_name --- lib/active_model/serializer.rb | 2 +- test/serialization_scope_name_test.rb | 32 +++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index c4477fb1e..6a5275d82 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -284,7 +284,7 @@ def build_json(controller, resource, options) end options[:scope] = controller.serialization_scope unless options.has_key?(:scope) - options[:scope_name] = controller._serialization_scope + options[:scope_name] = controller._serialization_scope unless options.has_key?(:scope_name) options[:url_options] = controller.url_options serializer.new(resource, options) diff --git a/test/serialization_scope_name_test.rb b/test/serialization_scope_name_test.rb index d3db103cd..bc9c87bba 100644 --- a/test/serialization_scope_name_test.rb +++ b/test/serialization_scope_name_test.rb @@ -65,3 +65,35 @@ def test_override_scope_name_with_controller assert_equal '{"admin_user":{"admin":true}}', @response.body end end + +class SerializationActionScopeOverrideTest < ActionController::TestCase + TestUser = Struct.new(:name, :admin) + + class AdminUserSerializer < ActiveModel::Serializer + attributes :admin? + def admin? + current_admin.admin + end + end + + class AdminUserTestController < ActionController::Base + protect_from_forgery + before_filter { request.format = :json } + + def current_admin + TestUser.new('Bob', true) + end + + def render_new_user + render :json => TestUser.new('pete', false), :serializer => AdminUserSerializer, :scope => current_admin, :scope_name => :current_admin + end + end + + tests AdminUserTestController + + def test_override_scope_name_with_controller + get :render_new_user + assert_equal '{"admin_user":{"admin":true}}', @response.body + end + +end