Puppetdoc wasn't parsing 'require'. This patch adds a 'require' section to list all required class from nodes and classes.
Signed-off-by: Brice Figureau <[email protected]> --- lib/puppet/util/rdoc/code_objects.rb | 7 +++- .../util/rdoc/generators/puppet_generator.rb | 40 +++++++++++++++++++- .../util/rdoc/generators/template/puppet/puppet.rb | 25 ++++++------ lib/puppet/util/rdoc/parser.rb | 26 ++++++++---- 4 files changed, 74 insertions(+), 24 deletions(-) diff --git a/lib/puppet/util/rdoc/code_objects.rb b/lib/puppet/util/rdoc/code_objects.rb index 6e384e1..e59e1a0 100644 --- a/lib/puppet/util/rdoc/code_objects.rb +++ b/lib/puppet/util/rdoc/code_objects.rb @@ -88,11 +88,12 @@ module RDoc # It is mapped to a HTMLPuppetClass for display # It leverages RDoc (ruby) Class class PuppetClass < ClassModule - attr_accessor :resource_list + attr_accessor :resource_list, :requires def initialize(name, superclass) super(name,superclass) @resource_list = [] + @requires = [] end def add_resource(resource) @@ -106,6 +107,10 @@ module RDoc def superclass=(superclass) @superclass = superclass end + + def add_require(required) + add_to(@requires, required) + end end # PuppetNode holds a puppet node diff --git a/lib/puppet/util/rdoc/generators/puppet_generator.rb b/lib/puppet/util/rdoc/generators/puppet_generator.rb index bf2609f..378c3aa 100644 --- a/lib/puppet/util/rdoc/generators/puppet_generator.rb +++ b/lib/puppet/util/rdoc/generators/puppet_generator.rb @@ -320,6 +320,27 @@ module Generators end + # This module is used to generate a referenced full name list of ContextUser + module ReferencedListBuilder + def build_referenced_list(list) + res = [] + list.each do |i| + ref = AllReferences[i.name] + ref = @context.find_symbol(i.name) + ref = ref.viewer if ref + name = i.respond_to?(:full_name) ? i.full_name : i.name + h_name = CGI.escapeHTML(name) + if ref and ref.document_self + path = url(ref.path) + res << { "name" => h_name, "aref" => path } + else + res << { "name" => h_name } + end + end + res + end + end + # This module is used to hold/generate a list of puppet resources # this is used in HTMLPuppetClass and HTMLPuppetNode module ResourceContainer @@ -360,7 +381,7 @@ module Generators end class HTMLPuppetClass < HtmlClass - include ResourceContainer + include ResourceContainer, ReferencedListBuilder def value_hash super @@ -376,12 +397,20 @@ module Generators secdata["resource_list"] = rdl unless rdl.empty? end end + + rl = build_require_list(@context) + @values["requires"] = rl unless rl.empty? + @values end + + def build_require_list(context) + build_referenced_list(context.requires) + end end class HTMLPuppetNode < ContextUser - include ResourceContainer + include ResourceContainer, ReferencedListBuilder attr_reader :path @@ -452,6 +481,9 @@ module Generators il = build_include_list(@context) @values["includes"] = il unless il.empty? + rl = build_require_list(@context) + @values["requires"] = rl unless rl.empty? + @values["sections"] = @context.sections.map do |section| secdata = { @@ -554,6 +586,10 @@ module Generators @values['infiles'] = files end + def build_require_list(context) + build_referenced_list(context.requires) + end + def <=>(other) self.name <=> other.name end diff --git a/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb b/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb index e12b651..c8f1e7d 100644 --- a/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +++ b/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb @@ -538,18 +538,6 @@ IF:description </div> ENDIF:description -IF:requires - <div id="requires-list"> - <h3 class="section-bar">Required files</h3> - - <div class="name-list"> -START:requires - HREF:aref:name: -END:requires - </div> - </div> -ENDIF:requires - IF:toc <div id="contents-list"> <h3 class="section-bar">Contents</h3> @@ -601,6 +589,19 @@ END:includes </div> ENDIF:includes + <!-- if requires --> +IF:requires + <div id="requires"> + <h3 class="section-bar">Required Classes</h3> + + <div id="requires-list"> +START:requires + <span class="require-name">HREF:aref:name:</span> +END:requires + </div> + </div> +ENDIF:requires + START:sections <div id="section"> IF:sectitle diff --git a/lib/puppet/util/rdoc/parser.rb b/lib/puppet/util/rdoc/parser.rb index 554f8cb..842b81c 100644 --- a/lib/puppet/util/rdoc/parser.rb +++ b/lib/puppet/util/rdoc/parser.rb @@ -147,14 +147,22 @@ class Parser # create documentation for include statements we can find in +code+ # and associate it with +container+ - def scan_for_include(container, code) + def scan_for_include_or_require(container, code) code.each do |stmt| - scan_for_include(container,stmt.children) if stmt.is_a?(Puppet::Parser::AST::ASTArray) - - if stmt.is_a?(Puppet::Parser::AST::Function) and stmt.name == "include" - stmt.arguments.each do |included| - Puppet.debug "found include: %s" % included.value - container.add_include(Include.new(included.value, stmt.doc)) + scan_for_include_or_require(container,stmt.children) if stmt.is_a?(Puppet::Parser::AST::ASTArray) + + if stmt.is_a?(Puppet::Parser::AST::Function) + case stmt.name + when "include" + stmt.arguments.each do |included| + Puppet.debug "found include: %s" % included.value + container.add_include(Include.new(included.value, stmt.doc)) + end + when "require" + stmt.arguments.each do |required| + Puppet.debug "found require: %s" % required.value + container.add_require(Include.new(required.value, stmt.doc)) + end end end end @@ -220,7 +228,7 @@ class Parser code = klass.code.children if klass.code.is_a?(Puppet::Parser::AST::ASTArray) code ||= klass.code unless code.nil? - scan_for_include(cls, code) + scan_for_include_or_require(cls, code) scan_for_resource(cls, code) if Puppet.settings[:document_all] end @@ -241,7 +249,7 @@ class Parser code = node.code.children if node.code.is_a?(Puppet::Parser::AST::ASTArray) code ||= node.code unless code.nil? - scan_for_include(n, code) + scan_for_include_or_require(n, code) scan_for_vardef(n, code) scan_for_resource(n, code) if Puppet.settings[:document_all] end -- 1.6.4 --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/puppet-dev?hl=en -~----------~----~----~----~------~----~------~--~---
