class Class

def descendants

C.descendants # => [B, A, D]
class D < C; end

C.descendants # => [B, A]
class A < B; end

C.descendants # => [B]
class B < C; end

C.descendants # => []
class C; end

Returns an array with all classes that are < than its receiver.
def descendants
  descendants = []
  ObjectSpace.each_object(singleton_class) do |k|
    next if k.singleton_class?
    descendants.unshift k unless k == self
  end
  descendants
end