From: "trans (Thomas Sawyer)" Date: 2012-03-20T23:34:51+09:00 Subject: [ruby-core:43495] [ruby-trunk - Feature #3773] Module#parent Issue #3773 has been updated by trans (Thomas Sawyer). I will eventually try again. I don't really understand having #name, but not being able to get the actual constant named by #name. ---------------------------------------- Feature #3773: Module#parent https://bugs.ruby-lang.org/issues/3773#change-24971 Author: trans (Thomas Sawyer) Status: Rejected Priority: Normal Assignee: matz (Yukihiro Matsumoto) Category: Target version: =begin Not sure "parent" is the best name, it does seem like this functionality should be provided somehow by Ruby itself. class Module # Returns the name of the module containing this one. # # M::N.parent_name # => "M" def parent_name unless defined? @parent_name @parent_name = name =~ /::[^:]+\Z/ ? $`.freeze : nil end @parent_name end # Returns the module which contains this one according to its name. # # module M # module N # end # end # X = M::N # # M::N.parent # => M # X.parent # => M # # The parent of top-level and anonymous modules is Object. # # M.parent # => Object # Module.new.parent # => Object # def parent parent_name ? constant(parent_name) : Object end # Returns all the parents of this module according to its name, ordered from # nested outwards. The receiver is not contained within the result. # # module M # module N # end # end # X = M::N # # M.parents # => [Object] # M::N.parents # => [M, Object] # X.parents # => [M, Object] # def parents parents = [] if parent_name parts = parent_name.split('::') until parts.empty? parents << constant(parts * '::') parts.pop end end parents << Object unless parents.include? Object parents end end =end -- http://bugs.ruby-lang.org/