From 4e8a2af1ecf94eb0c82e7ba5822b25f65e076d10 Mon Sep 17 00:00:00 2001 From: Carl Lerche Date: Fri, 20 Jan 2012 12:17:37 -0800 Subject: [PATCH 1/2] Allow passing in the serializer class from the render method --- lib/action_controller/serialization.rb | 5 ++++- test/serialization_test.rb | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/action_controller/serialization.rb b/lib/action_controller/serialization.rb index 7c81a231..1a981e56 100644 --- a/lib/action_controller/serialization.rb +++ b/lib/action_controller/serialization.rb @@ -44,7 +44,10 @@ module ActionController options[:root] ||= controller_name end - if json.respond_to?(:active_model_serializer) && (serializer = json.active_model_serializer) + serializer = options.delete(:serializer) || + (json.respond_to?(:active_model_serializer) && json.active_model_serializer) + + if serializer options[:scope] = serialization_scope if default_options = default_serializer_options diff --git a/test/serialization_test.rb b/test/serialization_test.rb index 4032774f..8b5a05a5 100644 --- a/test/serialization_test.rb +++ b/test/serialization_test.rb @@ -45,6 +45,15 @@ class RenderJsonTest < ActionController::TestCase end end + class CustomSerializer + def initialize(*) + end + + def as_json(*) + { :hello => true } + end + end + class TestController < ActionController::Base protect_from_forgery @@ -111,6 +120,10 @@ class RenderJsonTest < ActionController::TestCase render :json => JsonSerializable.new(true) end + def render_json_with_custom_serializer + render :json => [], :serializer => CustomSerializer + end + private def default_serializer_options if params[:check_defaults] @@ -211,4 +224,9 @@ class RenderJsonTest < ActionController::TestCase get :render_json_with_serializer_api_but_without_serializer assert_match '{"serializable_object":true}', @response.body end + + def test_render_json_with_custom_serializer + get :render_json_with_custom_serializer + assert_match '{"hello":true}', @response.body + end end From 46f18343cdc25d13b07800ed9182906b6549d4f6 Mon Sep 17 00:00:00 2001 From: Carl Lerche Date: Fri, 20 Jan 2012 12:17:51 -0800 Subject: [PATCH 2/2] Add an options attr_reader in the ArraySerializer --- lib/active_model/serializer.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index 29e9aaec..71d94f40 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -32,7 +32,7 @@ module ActiveModel # It serializes an array checking if each element that implements # the +active_model_serializer+ method. class ArraySerializer - attr_reader :object + attr_reader :object, :options def initialize(object, options={}) @object, @options = object, options