I needed a way to get a list of the subclasses that inherit a specific.
Unfortunately there is no method like
Class.superclass, though) so I had to look for
another way to achieve this. Let’s say, we want to have an array
containing all subclasses as a class variable of our superclass
Strategy. In order to fill the array we’ll overwrite the
inherited class method of
class Strategy @subclasses = Array.new class << self def inherited(klass) @subclasses << klass end def subclasses @subclasses.join(', ') end end end
Now, every time a class extends
Strategy our new
inherited method is called and adds the class to our array.
class StrategyA < Strategy; end class StrategyB < Strategy; end class StrategyC < Strategy; end # Let's get the current list of subclasses puts Strategy.subclasses # will output StrategyA, StrategyB, StrategyC
What happens if a class inherits any of our subclasses? Well, as long as
you don’t overwrite the
inherited method again it’s also
added to the array.