Skip to content

Commit

Permalink
Merge pull request #833 from lsylvester/cache-serializers-for-class
Browse files Browse the repository at this point in the history
Cache serializers for class
  • Loading branch information
kurko committed Mar 13, 2015
2 parents 4b32e39 + 270b312 commit 0446a97
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 7 deletions.
22 changes: 15 additions & 7 deletions lib/active_model/serializer.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
require 'thread_safe'

module ActiveModel
class Serializer
extend ActiveSupport::Autoload
Expand Down Expand Up @@ -201,18 +203,24 @@ def serializer_from_options(options)
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

if serializer_class
serializer_class
elsif klass.superclass
get_serializer_for(klass.superclass)
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

Expand Down
3 changes: 3 additions & 0 deletions lib/active_model_serializers.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@

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
Expand Down

0 comments on commit 0446a97

Please sign in to comment.