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