From 3fb560908e87fe7ca33743d4afe3c12dbc331d7e Mon Sep 17 00:00:00 2001 From: lsylvester Date: Tue, 10 Mar 2015 20:33:43 +1100 Subject: [PATCH] cache the serializers for a class --- lib/active_model/serializer.rb | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index 6652ac44..faab5c77 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -201,14 +201,20 @@ module ActiveModel private - def self.get_serializer_for(klass) - serializer_class_name = "#{klass.name}Serializer" - serializer_class = serializer_class_name.safe_constantize + def self.serializers_cache + @serializers_cache ||= Threadsafe::Cache.new + end - if serializer_class - serializer_class - elsif klass.superclass - get_serializer_for(klass.superclass) + def self.get_serializer_for(klass) + serializers_cache.fetch_or_store(klass) do + serializer_class_name = "#{klass.name}Serializer" + serializer_class = serializer_class_name.safe_constantize + + if serializer_class + serializer_class + elsif klass.superclass + get_serializer_for(klass.superclass) + end end end