Merge pull request #833 from lsylvester/cache-serializers-for-class

Cache serializers for class
This commit is contained in:
Alexandre de Oliveira 2015-03-13 19:55:49 -03:00
commit 0446a9714d
2 changed files with 17 additions and 6 deletions

View File

@ -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

View File

@ -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