diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index 57393d82..7badb04a 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -1,3 +1,5 @@ +require 'thread_safe' + module ActiveModel class Serializer extend ActiveSupport::Autoload @@ -201,18 +203,24 @@ module ActiveModel opts end + def self.serializers_cache + @serializers_cache ||= ThreadSafe::Cache.new + end + private attr_reader :options def self.get_serializer_for(klass) - serializer_class_name = "#{klass.name}Serializer" - serializer_class = serializer_class_name.safe_constantize + 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) + if serializer_class + serializer_class + elsif klass.superclass + get_serializer_for(klass.superclass) + end end end diff --git a/lib/active_model_serializers.rb b/lib/active_model_serializers.rb index f566280e..31925583 100644 --- a/lib/active_model_serializers.rb +++ b/lib/active_model_serializers.rb @@ -9,6 +9,9 @@ begin ActiveSupport.on_load(:action_controller) do include ::ActionController::Serialization + ActionDispatch::Reloader.to_prepare do + ActiveModel::Serializer.serializers_cache.clear + end end rescue LoadError # rails not installed, continuing