This module provides an internal implementation to track descendants which is faster than iterating through ObjectSpace.

Methods

Class Public methods

clear()

📝 Source code
# File activesupport/lib/active_support/descendants_tracker.rb, line 24
      def clear
        if defined? ActiveSupport::Dependencies
          @@direct_descendants.each do |klass, descendants|
            if Dependencies.autoloaded?(klass)
              @@direct_descendants.delete(klass)
            else
              descendants.reject! { |v| Dependencies.autoloaded?(v) }
            end
          end
        else
          @@direct_descendants.clear
        end
      end
🔎 See on GitHub

descendants(klass)

📝 Source code
# File activesupport/lib/active_support/descendants_tracker.rb, line 18
      def descendants(klass)
        arr = []
        accumulate_descendants(klass, arr)
        arr
      end
🔎 See on GitHub

direct_descendants(klass)

Also aliased as: subclasses
📝 Source code
# File activesupport/lib/active_support/descendants_tracker.rb, line 12
      def direct_descendants(klass)
        descendants = @@direct_descendants[klass]
        descendants ? descendants.to_a : []
      end
🔎 See on GitHub

store_inherited(klass, descendant)

This is the only method that is not thread safe, but is only ever called during the eager loading phase.

📝 Source code
# File activesupport/lib/active_support/descendants_tracker.rb, line 40
      def store_inherited(klass, descendant)
        (@@direct_descendants[klass] ||= DescendantsArray.new) << descendant
      end
🔎 See on GitHub

subclasses(klass)

Alias for: direct_descendants

Instance Public methods

descendants()

📝 Source code
# File activesupport/lib/active_support/descendants_tracker.rb, line 65
    def descendants
      DescendantsTracker.descendants(self)
    end
🔎 See on GitHub

direct_descendants()

Also aliased as: subclasses
📝 Source code
# File activesupport/lib/active_support/descendants_tracker.rb, line 60
    def direct_descendants
      DescendantsTracker.direct_descendants(self)
    end
🔎 See on GitHub

inherited(base)

📝 Source code
# File activesupport/lib/active_support/descendants_tracker.rb, line 55
    def inherited(base)
      DescendantsTracker.store_inherited(self, base)
      super
    end
🔎 See on GitHub

subclasses()

Alias for: direct_descendants