Is there a way to list the classes defined in a module?

Suppose I have a module that’s essentially used as a namespace, like
this:

module Castle

class King < Royalty; end

class Queen < Royalty; end

class Guard < Commoner; end

class Dragon_keeper < Commoner; end

end

Is there some way I could later create a list, say Castle_dwellers that
would come out with all the classes defined therein? I would expect an
array, something like [:King,:Queen,:Guard,:Dragon_keeper]. Or would I
have to add them ‘manually’ to the list?

Michael W. wrote:

Suppose I have a module that’s essentially used as a namespace, like
this:

module Castle

Castle.constants

Castle.constants

Pretty much. This will also return any other constants you make in the
namespace – for example, if you had Castle::Location = “Scotland”,
you’d also get “Location” back. If that causes you problems, you can
do:

irb(main):034:0> Castle.constants.select{|e|Castle.const_get
(e).kind_of? Class}
=> [“King”, “Guard”, “Queen”, “Dragon_keeper”, “Royalty”, “Commoner”]

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs