aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVipul A M <vipulnsward@gmail.com>2016-09-05 12:05:00 +0530
committerGitHub <noreply@github.com>2016-09-05 12:05:00 +0530
commit8065b4531afea08de716bebea01b50ee21a41ecd (patch)
tree8c061c02529cacc2bc9abc307354125077b01926
parent9aaf8ca7672d525e1b5d54abc07ae9d589cf4e44 (diff)
parent951353e4764f8ca0fbcc6e9c799eb815c612e759 (diff)
downloadrails-8065b4531afea08de716bebea01b50ee21a41ecd.tar.gz
rails-8065b4531afea08de716bebea01b50ee21a41ecd.tar.bz2
rails-8065b4531afea08de716bebea01b50ee21a41ecd.zip
Merge pull request #26392 from y-yagi/chage_descendants_to_public_api
change `Class#descendants` to public API [ci skip]
-rw-r--r--activesupport/lib/active_support/core_ext/class/subclasses.rb17
1 files changed, 15 insertions, 2 deletions
diff --git a/activesupport/lib/active_support/core_ext/class/subclasses.rb b/activesupport/lib/active_support/core_ext/class/subclasses.rb
index 8a21c71a42..10a7c787f6 100644
--- a/activesupport/lib/active_support/core_ext/class/subclasses.rb
+++ b/activesupport/lib/active_support/core_ext/class/subclasses.rb
@@ -6,7 +6,20 @@ class Class
# Test if this Ruby supports each_object against singleton_class
ObjectSpace.each_object(Numeric.singleton_class) {}
- def descendants # :nodoc:
+ # Returns an array with all classes that are < than its receiver.
+ #
+ # class C; end
+ # C.descendants # => []
+ #
+ # class B < C; end
+ # C.descendants # => [B]
+ #
+ # class A < B; end
+ # C.descendants # => [B, A]
+ #
+ # class D < C; end
+ # C.descendants # => [B, A, D]
+ def descendants
descendants = []
ObjectSpace.each_object(singleton_class) do |k|
descendants.unshift k unless k == self
@@ -14,7 +27,7 @@ class Class
descendants
end
rescue StandardError # JRuby 9.0.4.0 and earlier
- def descendants # :nodoc:
+ def descendants
descendants = []
ObjectSpace.each_object(Class) do |k|
descendants.unshift k if k < self