diff options
author | Jeremy Kemper <jeremy@bitsweat.net> | 2008-07-09 19:43:38 -0700 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2008-07-14 10:46:16 -0700 |
commit | 269c6c6bcfec342cf830e0b20c44bb2c888e8fdf (patch) | |
tree | e4ae29bf0d7a8c2bc9b9f2be7d4adb1bdd75f714 | |
parent | ae9356ae9eff4072efae7433204578c30c6ddbf7 (diff) | |
download | rails-269c6c6bcfec342cf830e0b20c44bb2c888e8fdf.tar.gz rails-269c6c6bcfec342cf830e0b20c44bb2c888e8fdf.tar.bz2 rails-269c6c6bcfec342cf830e0b20c44bb2c888e8fdf.zip |
Cache Module#parent_name
-rw-r--r-- | activesupport/lib/active_support/core_ext/module/introspection.rb | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/activesupport/lib/active_support/core_ext/module/introspection.rb b/activesupport/lib/active_support/core_ext/module/introspection.rb index bb894ec080..45f3e4bf5c 100644 --- a/activesupport/lib/active_support/core_ext/module/introspection.rb +++ b/activesupport/lib/active_support/core_ext/module/introspection.rb @@ -1,4 +1,14 @@ 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 @@ -16,8 +26,7 @@ class Module # p Module.new.parent # => Object # def parent - parent_name = name.split('::')[0..-2] * '::' - parent_name.empty? ? Object : parent_name.constantize + parent_name ? parent_name.constantize : Object end # Returns all the parents of this module according to its name, ordered from @@ -35,10 +44,12 @@ class Module # def parents parents = [] - parts = name.split('::')[0..-2] - until parts.empty? - parents << (parts * '::').constantize - parts.pop + if parent_name + parts = parent_name.split('::') + until parts.empty? + parents << (parts * '::').constantize + parts.pop + end end parents << Object unless parents.include? Object parents |