aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/lib/action_controller/metal/serialization.rb4
-rw-r--r--actionpack/test/controller/render_json_test.rb16
2 files changed, 18 insertions, 2 deletions
diff --git a/actionpack/lib/action_controller/metal/serialization.rb b/actionpack/lib/action_controller/metal/serialization.rb
index 9bb665a9ae..9fb49f512e 100644
--- a/actionpack/lib/action_controller/metal/serialization.rb
+++ b/actionpack/lib/action_controller/metal/serialization.rb
@@ -13,7 +13,9 @@ module ActionController
end
def _render_option_json(json, options)
- json = json.active_model_serializer.new(json, serialization_scope) if json.respond_to?(:active_model_serializer)
+ if json.respond_to?(:active_model_serializer) && (serializer = json.active_model_serializer)
+ json = serializer.new(json, serialization_scope)
+ end
super
end
diff --git a/actionpack/test/controller/render_json_test.rb b/actionpack/test/controller/render_json_test.rb
index f886af1a95..dc09812ba3 100644
--- a/actionpack/test/controller/render_json_test.rb
+++ b/actionpack/test/controller/render_json_test.rb
@@ -26,8 +26,12 @@ class RenderJsonTest < ActionController::TestCase
end
class JsonSerializable
+ def initialize(skip=false)
+ @skip = skip
+ end
+
def active_model_serializer
- JsonSerializer
+ JsonSerializer unless @skip
end
def as_json(*)
@@ -89,6 +93,11 @@ class RenderJsonTest < ActionController::TestCase
@current_user = Struct.new(:as_json).new(:current_user => true)
render :json => JsonSerializable.new
end
+
+ def render_json_with_serializer_api_but_without_serializer
+ @current_user = Struct.new(:as_json).new(:current_user => true)
+ render :json => JsonSerializable.new(true)
+ end
end
tests TestController
@@ -166,4 +175,9 @@ class RenderJsonTest < ActionController::TestCase
assert_match '"scope":{"current_user":true}', @response.body
assert_match '"object":{"serializable_object":true}', @response.body
end
+
+ def test_render_json_with_serializer_api_but_without_serializer
+ get :render_json_with_serializer_api_but_without_serializer
+ assert_match '{"serializable_object":true}', @response.body
+ end
end