From fa51c5f574d240d0d24add87ae75c7221d29de5d Mon Sep 17 00:00:00 2001 From: Nicholas Mulder Date: Thu, 28 Feb 2013 10:01:40 -0500 Subject: [PATCH 1/2] Add ActiveSupport::DescendantsTracker to Serializer and ArraySerializer --- lib/active_model/array_serializer.rb | 4 ++++ lib/active_model/serializer.rb | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/lib/active_model/array_serializer.rb b/lib/active_model/array_serializer.rb index f0a2ab02..15f24523 100644 --- a/lib/active_model/array_serializer.rb +++ b/lib/active_model/array_serializer.rb @@ -1,4 +1,6 @@ require "active_support/core_ext/class/attribute" +require 'active_support/dependencies' +require 'active_support/descendants_tracker' module ActiveModel # Active Model Array Serializer @@ -11,6 +13,8 @@ module ActiveModel # ActiveModel::ArraySerializer.root = false # class ArraySerializer + extend ActiveSupport::DescendantsTracker + attr_reader :object, :options class_attribute :root diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index b070664c..9d772a1d 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -1,5 +1,7 @@ require "active_support/core_ext/class/attribute" require "active_support/core_ext/module/anonymous" +require 'active_support/dependencies' +require 'active_support/descendants_tracker' module ActiveModel # Active Model Serializer @@ -36,6 +38,8 @@ module ActiveModel # end # class Serializer + extend ActiveSupport::DescendantsTracker + INCLUDE_METHODS = {} INSTRUMENT = { :serialize => :"serialize.serializer", :associations => :"associations.serializer" } From 918a9de5469d23d7b604803f70d73d6030701210 Mon Sep 17 00:00:00 2001 From: Nicholas Mulder Date: Thu, 28 Feb 2013 10:02:38 -0500 Subject: [PATCH 2/2] Remove caching of Serializer constants to allow ActiveSupport::Dependency reloading to work --- lib/active_model_serializers.rb | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/active_model_serializers.rb b/lib/active_model_serializers.rb index 55709e0e..d27eb4b7 100644 --- a/lib/active_model_serializers.rb +++ b/lib/active_model_serializers.rb @@ -33,14 +33,12 @@ module ActiveModel::SerializerSupport module ClassMethods #:nodoc: if "".respond_to?(:safe_constantize) def active_model_serializer - @active_model_serializer ||= "#{self.name}Serializer".safe_constantize + "#{self.name}Serializer".safe_constantize end else def active_model_serializer - return @active_model_serializer if defined?(@active_model_serializer) - begin - @active_model_serializer = "#{self.name}Serializer".constantize + "#{self.name}Serializer".constantize rescue NameError => e raise unless e.message =~ /uninitialized constant/ end