Project

General

Profile

Actions

Feature #3773

closed

Module#parent

Added by trans (Thomas Sawyer) over 13 years ago. Updated about 12 years ago.

Status:
Rejected
Target version:
-
[ruby-core:31969]

Description

=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

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0