From 65f6980dadf2ca2c53d13bd30a1d15773229294f Mon Sep 17 00:00:00 2001 From: jrhe Date: Thu, 4 Apr 2013 21:07:05 +0100 Subject: [PATCH] Added the ability to turn off serializer inference --- lib/grape-active_model_serializers/formatter.rb | 14 +++++++------- spec/grape_ams_spec.rb | 15 +++++++++++++++ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/lib/grape-active_model_serializers/formatter.rb b/lib/grape-active_model_serializers/formatter.rb index c36fdbb..148cd06 100644 --- a/lib/grape-active_model_serializers/formatter.rb +++ b/lib/grape-active_model_serializers/formatter.rb @@ -4,10 +4,12 @@ module Grape module Formatter module ActiveModelSerializers class << self - + attr_accessor :infer_serializers attr_reader :env attr_reader :endpoint + ActiveModelSerializers.infer_serializers = true + def call(object, env) @object = object @env = env @@ -22,19 +24,17 @@ module Grape end private - def active_model_serializer - _active_model_serializer - end def active_model_serializer? !!active_model_serializer end - def _active_model_serializer + def active_model_serializer route_options = endpoint.options[:route_options] - # Infer serializer name if its not set - route_options[:serializer] = @object.class.name unless route_options.has_key? :serializer + if self.infer_serializers + route_options[:serializer] = @object.class.name unless route_options.has_key? :serializer + end serializer = route_options[:serializer] diff --git a/spec/grape_ams_spec.rb b/spec/grape_ams_spec.rb index 0f3ef50..ff13547 100644 --- a/spec/grape_ams_spec.rb +++ b/spec/grape_ams_spec.rb @@ -43,6 +43,21 @@ describe Grape::ActiveModelSerializers do last_response.body.should == '{:user=>{:first_name=>"JR", :last_name=>"HE"}}' end + context "serializer inference is disabled" do + before do + Grape::Formatter::ActiveModelSerializers.infer_serializers = false + end + + it "should NOT infer serializer when there is no serializer set" do + subject.get("/home") do + User.new({first_name: 'JR', last_name: 'HE', email: 'contact@jrhe.co.uk'}) + end + + get "/home" + last_response.body.should == "{\"user\":{\"created_at\":null,\"first_name\":\"JR\",\"id\":null,\"last_name\":\"HE\",\"updated_at\":null,\"username\":null}}" + end + end + [UserSerializer, 'user', :user].each do |serializer| it "should render using serializer (#{serializer})" do subject.get("/home", serializer: serializer) do