Skip to content

Instantly share code, notes, and snippets.

@akm
Created September 21, 2008 07:18
Show Gist options
  • Save akm/11849 to your computer and use it in GitHub Desktop.
Save akm/11849 to your computer and use it in GitHub Desktop.
tree_ancestors method
class Module
def tree_ancestors
puts_tree_acestors(0, [self])
end
protected
def puts_tree_acestors(indent, displayed_modules)
puts "%s[%s] %s" % [' ' * indent, (self.is_a?(Class) ? 'C' : 'M'), self.name]
nested_included_modules = included_modules.map{|mod| mod.included_modules}.uniq.flatten # - displayed_modules
my_included_modules = included_modules - nested_included_modules
my_included_modules -= superclass.included_modules if respond_to?(:superclass) and superclass
displayed_modules += nested_included_modules
my_included_modules.each do |mod|
mod.puts_tree_acestors(indent + 1, displayed_modules)
end
if respond_to?(:superclass) and superclass
superclass.puts_tree_acestors(indent + 1, displayed_modules)
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment