Sha256: dde9610e92793d5ee63d0b177e368a6d384409f4121e6e514e9c71dbd7c4e341

Contents?: true

Size: 1.16 KB

Versions: 269

Compression:

Stored size: 1.16 KB

Contents

module ActiveSupport
  # This module provides an internal implementation to track descendants
  # which is faster than iterating through ObjectSpace.
  module DescendantsTracker
    @@direct_descendants = Hash.new { |h, k| h[k] = [] }

    def self.direct_descendants(klass)
      @@direct_descendants[klass]
    end

    def self.descendants(klass)
      @@direct_descendants[klass].inject([]) do |descendants, _klass|
        descendants << _klass
        descendants.concat _klass.descendants
      end
    end

    def self.clear
      if defined? ActiveSupport::Dependencies
        @@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
      else
        @@direct_descendants.clear
      end
    end

    def inherited(base)
      self.direct_descendants << base
      super
    end

    def direct_descendants
      DescendantsTracker.direct_descendants(self)
    end

    def descendants
      DescendantsTracker.descendants(self)
    end
  end
end

Version data entries

269 entries across 225 versions & 25 rubygems

Version Path
activesupport-3.2.10 lib/active_support/descendants_tracker.rb
activesupport-3.1.9 lib/active_support/descendants_tracker.rb
classiccms-0.6.9 vendor/bundle/gems/activesupport-3.2.3/lib/active_support/descendants_tracker.rb
jquery_regex-0.0.3 vendor/bundle/gems/jquery_regex-0.0.3/vendor/bundle/gems/jquery_regex-0.0.2/vendor/bundle/gems/activesupport-3.2.9/lib/active_support/descendants_tracker.rb
jquery_regex-0.0.3 vendor/bundle/gems/jquery_regex-0.0.3/vendor/bundle/gems/jquery_regex-0.0.2/vendor/bundle/gems/jquery_regex-0.0.1/vendor/bundle/gems/activesupport-3.2.9/lib/active_support/descendants_tracker.rb
jquery_regex-0.0.3 vendor/bundle/gems/jquery_regex-0.0.2/vendor/bundle/gems/activesupport-3.2.9/lib/active_support/descendants_tracker.rb
jquery_regex-0.0.3 vendor/bundle/gems/activesupport-3.2.9/lib/active_support/descendants_tracker.rb
jquery_regex-0.0.3 vendor/bundle/gems/jquery_regex-0.0.2/vendor/bundle/gems/jquery_regex-0.0.1/vendor/bundle/gems/activesupport-3.2.9/lib/active_support/descendants_tracker.rb
jquery_regex-0.0.3 vendor/bundle/gems/jquery_regex-0.0.3/vendor/bundle/gems/activesupport-3.2.9/lib/active_support/descendants_tracker.rb
jquery_regex-0.0.3 vendor/bundle/gems/jquery_regex-0.0.1/vendor/bundle/gems/activesupport-3.2.9/lib/active_support/descendants_tracker.rb
jquery_regex-0.0.3 vendor/bundle/gems/jquery_regex-0.0.3/vendor/bundle/gems/jquery_regex-0.0.1/vendor/bundle/gems/activesupport-3.2.9/lib/active_support/descendants_tracker.rb
jquery_regex-0.0.1 vendor/bundle/gems/activesupport-3.2.9/lib/active_support/descendants_tracker.rb
dirty_history-0.7.3 dirty_history/ruby/1.9.1/gems/activesupport-3.1.1/lib/active_support/descendants_tracker.rb
dirty_history-0.7.2 dirty_history/ruby/1.9.1/gems/activesupport-3.1.1/lib/active_support/descendants_tracker.rb
dirty_history-0.7.1 dirty_history/ruby/1.9.1/gems/activesupport-3.1.1/lib/active_support/descendants_tracker.rb
challah-rolls-0.2.0 vendor/bundle/gems/challah-0.8.3/vendor/bundle/gems/activesupport-3.2.8/lib/active_support/descendants_tracker.rb
challah-rolls-0.2.0 vendor/bundle/gems/activesupport-3.2.7/lib/active_support/descendants_tracker.rb
challah-rolls-0.2.0 vendor/bundle/gems/activesupport-3.2.8/lib/active_support/descendants_tracker.rb
challah-rolls-0.2.0 vendor/bundle/gems/activesupport-3.2.9/lib/active_support/descendants_tracker.rb
challah-rolls-0.2.0 vendor/bundle/gems/challah-0.8.0.pre/vendor/bundle/gems/activesupport-3.2.7/lib/active_support/descendants_tracker.rb