lib/core/facets/class/descendents.rb in facets-2.1.3 vs lib/core/facets/class/descendents.rb in facets-2.2.0
- old
+ new
@@ -1,68 +1,41 @@
-# TITLE:
-#
-# Class Descendent Extensions
-#
-# SUMMARY:
-#
-# Extension methods for Class class for accessing
-# and even removing subclasses.
-#
-# CREDITS:
-#
-# - ?
-
class Class
+ # List all descedents of this class.
+ #
+ # class X ; end
+ # class A < X; end
+ # class B < X; end
+ # X.descendents #=> [A,B]
+ #
+ # NOTE: This is a intesive operation. Do not
+ # expect it to be super fast.
+
def descendents
subclass = []
ObjectSpace.each_object( Class ) do |c|
if c.ancestors.include?( self ) and self != c
subclass << c
end
end
return subclass
end
+ # Obvious alias for descendents.
+
alias_method :subclasses, :descendents
+ # Remove descendents. This simple deletes the constant
+ # associated to the descendents name.
+
def remove_descendents
self.descendents.each do |subclass|
Object.send(:remove_const, subclass.name) rescue nil
end
ObjectSpace.garbage_collect
end
+ # Obvious alias for remove_descendents.
+
alias_method :remove_subclasses, :remove_descendents
end
-
-
-# _____ _
-# |_ _|__ ___| |_
-# | |/ _ \/ __| __|
-# | | __/\__ \ |_
-# |_|\___||___/\__|
-#
-=begin test
-
- require 'test/unit'
-
- class TestClassDescendents < Test::Unit::TestCase
-
- class A ; end
- class B < A ; end
- class C < B ; end
-
- def test_descendents
- assert_equal( [C,B], A.descendents )
- end
-
- def test_remove_descendents
- assert_nothing_raised { B.remove_descendents }
- # doesn't work despite above; not sure why
- #assert_equal( [B], A.descendents )
- end
-
- end
-
-=end