summaryrefslogtreecommitdiffstats
path: root/lib/puppet/util/rdoc/parser.rb
diff options
context:
space:
mode:
authorBrice Figureau <brice-puppet@daysofwonder.com>2009-07-28 20:47:48 +0200
committerBrice Figureau <brice-puppet@daysofwonder.com>2009-07-28 20:50:50 +0200
commit8551ece0d55dafceab633ee6eec46fb1c54c1446 (patch)
tree2828854d3d5b7c83c95a07a28b801f488f3686e2 /lib/puppet/util/rdoc/parser.rb
parente3ee594fdfa0e7a6d9de26c4307e217de866f462 (diff)
downloadpuppet-8551ece0d55dafceab633ee6eec46fb1c54c1446.tar.gz
puppet-8551ece0d55dafceab633ee6eec46fb1c54c1446.tar.xz
puppet-8551ece0d55dafceab633ee6eec46fb1c54c1446.zip
Fix #2453 - puppetdoc mixes long class names that look alike
The issue is that RDoc (the engine producing the documentation) is buggy: With a class named: A::C and a class named: D::A::E Then RDoc was attaching E under the root ::A and not D::A. Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
Diffstat (limited to 'lib/puppet/util/rdoc/parser.rb')
-rw-r--r--lib/puppet/util/rdoc/parser.rb16
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/puppet/util/rdoc/parser.rb b/lib/puppet/util/rdoc/parser.rb
index 324b6b771..818c29d9c 100644
--- a/lib/puppet/util/rdoc/parser.rb
+++ b/lib/puppet/util/rdoc/parser.rb
@@ -41,6 +41,18 @@ class Parser
private
+ # Due to a bug in RDoc, we need to roll our own find_module_named
+ # The issue is that RDoc tries harder by asking the parent for a class/module
+ # of the name. But by doing so, it can mistakenly use a module of same name
+ # but from which we are not descendant.
+ def find_object_named(container, name)
+ return container if container.name == name
+ container.each_classmodule do |m|
+ return m if m.name == name
+ end
+ nil
+ end
+
# walk down the namespace and lookup/create container as needed
def get_class_or_module(container, name)
@@ -54,7 +66,7 @@ class Parser
final_name = names.pop
names.each do |name|
prev_container = container
- container = container.find_module_named(name)
+ container = find_object_named(container, name)
unless container
container = prev_container.add_module(PuppetClass, name)
end
@@ -297,7 +309,7 @@ class Parser
@ast.nodes.each do |name, node|
if node.file == @input_file_name
- document_node(name,node,container)
+ document_node(name.to_s,node,container)
end
end
end