While we were keeping track of superclass/nodes during RDoc generation
we weren't doing the reverse.
This patch enhance Puppetdoc RDoc mode by tracking inheritance and
for each base/super class/nodes displays the list of inherited classes
/nodes.

Signed-off-by: Brice Figureau <[email protected]>
---
 lib/puppet/util/rdoc/code_objects.rb               |    7 +++++-
 .../util/rdoc/generators/puppet_generator.rb       |   23 ++++++++++++++++++++
 .../util/rdoc/generators/template/puppet/puppet.rb |   13 +++++++++++
 3 files changed, 42 insertions(+), 1 deletions(-)

diff --git a/lib/puppet/util/rdoc/code_objects.rb 
b/lib/puppet/util/rdoc/code_objects.rb
index e59e1a0..ce1dfc1 100644
--- a/lib/puppet/util/rdoc/code_objects.rb
+++ b/lib/puppet/util/rdoc/code_objects.rb
@@ -88,12 +88,13 @@ module RDoc
     # It is mapped to a HTMLPuppetClass for display
     # It leverages RDoc (ruby) Class
     class PuppetClass < ClassModule
-        attr_accessor :resource_list, :requires
+        attr_accessor :resource_list, :requires, :childs
 
         def initialize(name, superclass)
             super(name,superclass)
             @resource_list = []
             @requires = []
+            @childs = []
         end
 
         def add_resource(resource)
@@ -111,6 +112,10 @@ module RDoc
         def add_require(required)
             add_to(@requires, required)
         end
+
+        def add_child(child)
+            @childs << child
+        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 378c3aa..17fa48d 100644
--- a/lib/puppet/util/rdoc/generators/puppet_generator.rb
+++ b/lib/puppet/util/rdoc/generators/puppet_generator.rb
@@ -136,6 +136,15 @@ module Generators
                 @allfiles << { "file" => file, "modules" => modules, "classes" 
=> classes, "methods" => methods, "nodes" => nodes }
             end
 
+            # scan all classes to create the childs references
+            @allclasses.values.each do |klass|
+                if superklass = klass.context.superclass
+                    if superklass = AllReferences[superklass] and 
(superklass.is_a?(HTMLPuppetClass) or superklass.is_a?(HTMLPuppetNode))
+                        superklass.context.add_child(klass.context)
+                    end
+                end
+            end
+
             @classes = @allclasses.values
         end
 
@@ -401,12 +410,19 @@ module Generators
             rl = build_require_list(@context)
             @values["requires"] = rl unless rl.empty?
 
+            cl = build_child_list(@context)
+            @values["childs"] = cl unless cl.empty?
+
             @values
         end
 
         def build_require_list(context)
             build_referenced_list(context.requires)
         end
+
+        def build_child_list(context)
+            build_referenced_list(context.childs)
+        end
     end
 
     class HTMLPuppetNode < ContextUser
@@ -484,6 +500,9 @@ module Generators
             rl = build_require_list(@context)
             @values["requires"] = rl unless rl.empty?
 
+            cl = build_child_list(@context)
+            @values["childs"] = cl unless cl.empty?
+
             @values["sections"] = @context.sections.map do |section|
 
                 secdata = {
@@ -590,6 +609,10 @@ module Generators
             build_referenced_list(context.requires)
         end
 
+        def build_child_list(context)
+            build_referenced_list(context.childs)
+        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 c8f1e7d..bae9fc7 100644
--- a/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb
+++ b/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb
@@ -538,6 +538,7 @@ IF:description
     </div>
 ENDIF:description
 
+
 IF:toc
     <div id="contents-list">
       <h3 class="section-bar">Contents</h3>
@@ -549,6 +550,18 @@ END:toc
 ENDIF:toc
    </div>
 
+<!-- if childs -->
+IF:childs
+       <div id="childs">
+         <h3 class="section-bar">Inherited by</h3>
+         <div id="childs-list">
+START:childs
+           <span class="child-name">HREF:aref:name:</span>
+END:childs
+         </div>
+       </div>
+ENDIF:childs
+
 IF:methods
     <div id="method-list">
       <h3 class="section-bar">Defines</h3>
-- 
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to