Skip to content

Commit 3fb5609

Browse files
lsylvesterLachlan Sylvester
authored andcommitted
cache the serializers for a class
1 parent d55f3b3 commit 3fb5609

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

lib/active_model/serializer.rb

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -201,14 +201,20 @@ def serializer_from_options(options)
201201

202202
private
203203

204-
def self.get_serializer_for(klass)
205-
serializer_class_name = "#{klass.name}Serializer"
206-
serializer_class = serializer_class_name.safe_constantize
204+
def self.serializers_cache
205+
@serializers_cache ||= Threadsafe::Cache.new
206+
end
207207

208-
if serializer_class
209-
serializer_class
210-
elsif klass.superclass
211-
get_serializer_for(klass.superclass)
208+
def self.get_serializer_for(klass)
209+
serializers_cache.fetch_or_store(klass) do
210+
serializer_class_name = "#{klass.name}Serializer"
211+
serializer_class = serializer_class_name.safe_constantize
212+
213+
if serializer_class
214+
serializer_class
215+
elsif klass.superclass
216+
get_serializer_for(klass.superclass)
217+
end
212218
end
213219
end
214220

0 commit comments

Comments
 (0)