class Object
# A method that adds a #subclass class method allowing
# you to find the subclasses of a particular class.
#
# @example
#
# class String2 < String; end
# class String3 < String; end
# String.subclasses
# #=> [:String2, :String3]
#
# class String2Sub < String2; end
# String2.subclasses
# #=> [:String2Sub]
# String.subclasses
# #=> [:String2, :String3, :String2Sub]
#
# @return [Array[Symbol]]
#
def self.subclasses
Module.constants.find_all do |c_klass|
if c_klass != c_klass.upcase
self > (Object.const_get(c_klass))
else
nil
end
end
end
end