I needed to be able to find out what modules were defined inside a particular ruby module. Kinda like wanting to find out what child namespaces exist for a module. It’s probably more easily explained with an example. Given the following construct…
module A
module B; end
module C; end
module D
module E; end
end
end
…I wanted to be able to ask A what submodules are defined within it and get the following answer:
[A::B, A::C, A::D]
(btw: I don’t want to see E in the list as it is not a direct child of A).
So… since the Module class doesn’t provide anything to support doing that, I wrote a method that does it for me. Here’s the monkey-patch:
class Module
def submodules
modules = []
self.constants.each do |const|
temp_const = self.const_get(const)
modules << temp_const if temp_const.class == Module
end
modules
end
end
With that, you can now call the submodules method against any module and you’ll be returned an array of modules!















