diff --git a/lib/active_model/serializable.rb b/lib/active_model/serializable.rb index 344d8e4e..d23aae7d 100644 --- a/lib/active_model/serializable.rb +++ b/lib/active_model/serializable.rb @@ -33,7 +33,11 @@ module ActiveModel end def namespace - get_namespace && Utils._const_get(get_namespace) + if module_name = get_namespace + Serializer.serializers_cache.fetch_or_store(module_name) do + Utils._const_get(module_name) + end + end end def embedded_in_root_associations diff --git a/lib/active_model/serializable/utils.rb b/lib/active_model/serializable/utils.rb index 3b5f92c3..efabb6c4 100644 --- a/lib/active_model/serializable/utils.rb +++ b/lib/active_model/serializable/utils.rb @@ -4,15 +4,13 @@ module ActiveModel extend self def _const_get(const) - Serializer.serializers_cache.fetch_or_store(const) do - begin - method = RUBY_VERSION >= '2.0' ? :const_get : :qualified_const_get - Object.send method, const - rescue NameError - const.safe_constantize - end + begin + method = RUBY_VERSION >= '2.0' ? :const_get : :qualified_const_get + Object.send method, const + rescue NameError + const.safe_constantize end end end end -end +end \ No newline at end of file diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index b5ff05da..a89a79a8 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -66,7 +66,10 @@ end ArraySerializer end else - _const_get build_serializer_class(resource, options) + klass_name = build_serializer_class(resource, options) + Serializer.serializers_cache.fetch_or_store(klass_name) do + _const_get(klass_name) + end end end