module ActiveSupport::DescendantsTracker
def self.clear
def self.clear @@direct_descendants.each do |klass, descendants| if ActiveSupport::Dependencies.autoloaded?(klass) @@direct_descendants.delete(klass) else descendants.reject! { |v| ActiveSupport::Dependencies.autoloaded?(v) } end end end
def self.descendants(klass)
def self.descendants(klass) @@direct_descendants[klass].inject([]) do |descendants, _klass| descendants << _klass descendants.concat _klass.descendants end end
def self.direct_descendants(klass)
def self.direct_descendants(klass) @@direct_descendants[klass] end
def descendants
def descendants DescendantsTracker.descendants(self) end
def direct_descendants
def direct_descendants DescendantsTracker.direct_descendants(self) end
def inherited(base)
def inherited(base) self.direct_descendants << base super end