From 87d2d77ac8a893466cff4483ed0ca2b95c63329a Mon Sep 17 00:00:00 2001 From: Yehuda Katz Date: Sun, 1 Jan 2012 16:01:59 -0800 Subject: [PATCH] In a controller, the current controller name should be the default root for collections --- lib/action_controller/serialization.rb | 4 ++++ test/serialization_test.rb | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/action_controller/serialization.rb b/lib/action_controller/serialization.rb index 6f21512d..77a164cf 100644 --- a/lib/action_controller/serialization.rb +++ b/lib/action_controller/serialization.rb @@ -37,6 +37,10 @@ module ActionController end def _render_option_json(json, options) + if json.is_a?(Array) + options[:root] ||= controller_name + end + if json.respond_to?(:active_model_serializer) && (serializer = json.active_model_serializer) json = serializer.new(json, serialization_scope, options) end diff --git a/test/serialization_test.rb b/test/serialization_test.rb index b973f227..c807fcc5 100644 --- a/test/serialization_test.rb +++ b/test/serialization_test.rb @@ -20,10 +20,14 @@ class RenderJsonTest < ActionController::TestCase end def as_json(*) - hash = { :object => @object.as_json, :scope => @scope.as_json } + hash = { :object => serializable_hash, :scope => @scope.as_json } hash.merge!(:options => true) if @options[:options] hash end + + def serializable_hash + @object.as_json + end end class JsonSerializable @@ -91,6 +95,11 @@ class RenderJsonTest < ActionController::TestCase render :json => JsonSerializable.new end + def render_json_with_serializer_and_implicit_root + @current_user = Struct.new(:as_json).new(:current_user => true) + render :json => [JsonSerializable.new] + end + def render_json_with_serializer_and_options @current_user = Struct.new(:as_json).new(:current_user => true) render :json => JsonSerializable.new, :options => true @@ -172,6 +181,11 @@ class RenderJsonTest < ActionController::TestCase assert_match '"object":{"serializable_object":true}', @response.body end + def test_render_json_with_serializer_and_implicit_root + get :render_json_with_serializer_and_implicit_root + assert_match '"test":[{"serializable_object":true}]', @response.body + end + def test_render_json_with_serializer_and_options get :render_json_with_serializer_and_options assert_match '"scope":{"current_user":true}', @response.body