Skip to content

Commit

Permalink
Alias direct_descendants as subclasses
Browse files Browse the repository at this point in the history
This alias overrides Class#subclasses.  Thus calls to `subclasses` get a
free performance boost when the class extends DescendantsTracker.
  • Loading branch information
jonathanhefner committed Jun 3, 2020
1 parent 3b953da commit 8f8aa85
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 0 deletions.
2 changes: 2 additions & 0 deletions activesupport/lib/active_support/descendants_tracker.rb
Expand Up @@ -13,6 +13,7 @@ def direct_descendants(klass)
descendants = @@direct_descendants[klass]
descendants ? descendants.to_a : []
end
alias_method :subclasses, :direct_descendants

def descendants(klass)
arr = []
Expand Down Expand Up @@ -59,6 +60,7 @@ def inherited(base)
def direct_descendants
DescendantsTracker.direct_descendants(self)
end
alias_method :subclasses, :direct_descendants

def descendants
DescendantsTracker.descendants(self)
Expand Down
6 changes: 6 additions & 0 deletions activesupport/test/descendants_tracker_test_cases.rb
Expand Up @@ -42,6 +42,12 @@ def test_direct_descendants
assert_equal_sets [], Child2.direct_descendants
end

def test_subclasses
[Parent, Child1, Child2].each do |klass|
assert_equal klass.direct_descendants, klass.subclasses
end
end

def test_clear
mark_as_autoloaded(*ALL) do
ActiveSupport::DescendantsTracker.clear
Expand Down

0 comments on commit 8f8aa85

Please sign in to comment.