aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/core_ext/module/introspection.rb
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2009-03-28 23:47:42 -0700
committerJeremy Kemper <jeremy@bitsweat.net>2009-03-28 23:47:42 -0700
commitdc0c91656f3b757bbd016ff18cc863ef40b22304 (patch)
tree1ecc27323e93a12f82a61ec98564b8f01fdc335a /activesupport/lib/active_support/core_ext/module/introspection.rb
parenta1a040d3c827d6d107c2614f422b43e16a454235 (diff)
downloadrails-dc0c91656f3b757bbd016ff18cc863ef40b22304.tar.gz
rails-dc0c91656f3b757bbd016ff18cc863ef40b22304.tar.bz2
rails-dc0c91656f3b757bbd016ff18cc863ef40b22304.zip
Convert Module aliasing and introspection extension modules to class reopen
Diffstat (limited to 'activesupport/lib/active_support/core_ext/module/introspection.rb')
-rw-r--r--activesupport/lib/active_support/core_ext/module/introspection.rb154
1 files changed, 75 insertions, 79 deletions
diff --git a/activesupport/lib/active_support/core_ext/module/introspection.rb b/activesupport/lib/active_support/core_ext/module/introspection.rb
index 8beaff4b82..7708d573fa 100644
--- a/activesupport/lib/active_support/core_ext/module/introspection.rb
+++ b/activesupport/lib/active_support/core_ext/module/introspection.rb
@@ -1,90 +1,86 @@
-module ActiveSupport
- module CoreExtensions
- module Module
- # Returns the name of the module containing this one.
- #
- # p M::N.parent_name # => "M"
- def parent_name
- unless defined? @parent_name
- @parent_name = name =~ /::[^:]+\Z/ ? $`.freeze : nil
- end
- @parent_name
- end
+class Module
+ # Returns the name of the module containing this one.
+ #
+ # p 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
- #
- # p M::N.parent # => M
- # p X.parent # => M
- #
- # The parent of top-level and anonymous modules is Object.
- #
- # p M.parent # => Object
- # p Module.new.parent # => Object
- #
- def parent
- parent_name ? parent_name.constantize : Object
- end
+ # Returns the module which contains this one according to its name.
+ #
+ # module M
+ # module N
+ # end
+ # end
+ # X = M::N
+ #
+ # p M::N.parent # => M
+ # p X.parent # => M
+ #
+ # The parent of top-level and anonymous modules is Object.
+ #
+ # p M.parent # => Object
+ # p Module.new.parent # => Object
+ #
+ def parent
+ parent_name ? parent_name.constantize : 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
- #
- # p M.parents # => [Object]
- # p M::N.parents # => [M, Object]
- # p X.parents # => [M, Object]
- #
- def parents
- parents = []
- if parent_name
- parts = parent_name.split('::')
- until parts.empty?
- parents << (parts * '::').constantize
- parts.pop
- end
- end
- parents << Object unless parents.include? Object
- parents
+ # 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
+ #
+ # p M.parents # => [Object]
+ # p M::N.parents # => [M, Object]
+ # p X.parents # => [M, Object]
+ #
+ def parents
+ parents = []
+ if parent_name
+ parts = parent_name.split('::')
+ until parts.empty?
+ parents << (parts * '::').constantize
+ parts.pop
end
+ end
+ parents << Object unless parents.include? Object
+ parents
+ end
- if RUBY_VERSION < '1.9'
- # Returns the constants that have been defined locally by this object and
- # not in an ancestor. This method is exact if running under Ruby 1.9. In
- # previous versions it may miss some constants if their definition in some
- # ancestor is identical to their definition in the receiver.
- def local_constants
- inherited = {}
-
- ancestors.each do |anc|
- next if anc == self
- anc.constants.each { |const| inherited[const] = anc.const_get(const) }
- end
+ if RUBY_VERSION < '1.9'
+ # Returns the constants that have been defined locally by this object and
+ # not in an ancestor. This method is exact if running under Ruby 1.9. In
+ # previous versions it may miss some constants if their definition in some
+ # ancestor is identical to their definition in the receiver.
+ def local_constants
+ inherited = {}
- constants.select do |const|
- !inherited.key?(const) || inherited[const].object_id != const_get(const).object_id
- end
- end
- else
- def local_constants #:nodoc:
- constants(false)
- end
+ ancestors.each do |anc|
+ next if anc == self
+ anc.constants.each { |const| inherited[const] = anc.const_get(const) }
end
- # Returns the names of the constants defined locally rather than the
- # constants themselves. See <tt>local_constants</tt>.
- def local_constant_names
- local_constants.map { |c| c.to_s }
+ constants.select do |const|
+ !inherited.key?(const) || inherited[const].object_id != const_get(const).object_id
end
end
+ else
+ def local_constants #:nodoc:
+ constants(false)
+ end
+ end
+
+ # Returns the names of the constants defined locally rather than the
+ # constants themselves. See <tt>local_constants</tt>.
+ def local_constant_names
+ local_constants.map { |c| c.to_s }
end
end