Skip to content

Commit 0446a97

Browse files
committed
Merge pull request #833 from lsylvester/cache-serializers-for-class
Cache serializers for class
2 parents 4b32e39 + 270b312 commit 0446a97

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

lib/active_model/serializer.rb

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
require 'thread_safe'
2+
13
module ActiveModel
24
class Serializer
35
extend ActiveSupport::Autoload
@@ -201,18 +203,24 @@ def serializer_from_options(options)
201203
opts
202204
end
203205

206+
def self.serializers_cache
207+
@serializers_cache ||= ThreadSafe::Cache.new
208+
end
209+
204210
private
205211

206212
attr_reader :options
207213

208214
def self.get_serializer_for(klass)
209-
serializer_class_name = "#{klass.name}Serializer"
210-
serializer_class = serializer_class_name.safe_constantize
211-
212-
if serializer_class
213-
serializer_class
214-
elsif klass.superclass
215-
get_serializer_for(klass.superclass)
215+
serializers_cache.fetch_or_store(klass) do
216+
serializer_class_name = "#{klass.name}Serializer"
217+
serializer_class = serializer_class_name.safe_constantize
218+
219+
if serializer_class
220+
serializer_class
221+
elsif klass.superclass
222+
get_serializer_for(klass.superclass)
223+
end
216224
end
217225
end
218226

lib/active_model_serializers.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99

1010
ActiveSupport.on_load(:action_controller) do
1111
include ::ActionController::Serialization
12+
ActionDispatch::Reloader.to_prepare do
13+
ActiveModel::Serializer.serializers_cache.clear
14+
end
1215
end
1316
rescue LoadError
1417
# rails not installed, continuing

0 commit comments

Comments
 (0)