diff options
author | Brice Figureau <brice-puppet@daysofwonder.com> | 2011-02-12 13:32:24 +0100 |
---|---|---|
committer | Brice Figureau <brice-puppet@daysofwonder.com> | 2011-02-12 15:04:21 +0100 |
commit | 90905073a6e1136c80cd59dca1a9594f4a859126 (patch) | |
tree | 1483526351a22fae74d3247ecf8dd5d6e7fc4a7b /lib/puppet/util/rdoc/code_objects.rb | |
parent | 70a43c4b0d3018a39e29c50b1caf7dec38694323 (diff) | |
download | puppet-90905073a6e1136c80cd59dca1a9594f4a859126.tar.gz puppet-90905073a6e1136c80cd59dca1a9594f4a859126.tar.xz puppet-90905073a6e1136c80cd59dca1a9594f4a859126.zip |
Fix #6267 - puppetdoc embedded links to puppet entities are not hyperlinked
Puppetdoc was relying on RDoc to provide the puppet entity (class, definition
node, etc...) hyperlinking in comments.
Unfortunately, RDoc was assuming namespaces are capitalized like Ruby
namespaces and that definition would use the # or . separator.
This change adds on top of RDoc puppet namespace format for classes and
definition.
This will make sure the comment hyperlinking will work as intented.
Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
Diffstat (limited to 'lib/puppet/util/rdoc/code_objects.rb')
-rw-r--r-- | lib/puppet/util/rdoc/code_objects.rb | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/puppet/util/rdoc/code_objects.rb b/lib/puppet/util/rdoc/code_objects.rb index 3854fbc01..3c789a0c5 100644 --- a/lib/puppet/util/rdoc/code_objects.rb +++ b/lib/puppet/util/rdoc/code_objects.rb @@ -124,6 +124,45 @@ module RDoc def add_child(child) @childs << child end + + # Look up the given symbol. RDoc only looks for class1::class2.method + # or class1::class2#method. Since our definitions are mapped to RDoc methods + # but are written class1::class2::define we need to perform the lookup by + # ourselves. + def find_symbol(symbol, method=nil) + result = super + if not result and symbol =~ /::/ + modules = symbol.split(/::/) + unless modules.empty? + module_name = modules.shift + result = find_module_named(module_name) + if result + last_name = "" + previous = nil + modules.each do |module_name| + previous = result + last_name = module_name + result = result.find_module_named(module_name) + break unless result + end + unless result + result = previous + method = last_name + end + end + end + if result && method + if !result.respond_to?(:find_local_symbol) + p result.name + p method + fail + end + result = result.find_local_symbol(method) + end + end + result + end + end # PuppetNode holds a puppet node |