class Generators::PuppetGenerator
This is a specialized HTMLGenerator tailored to Puppet manifests
Public Class Methods
for(options)
click to toggle source
# File lib/puppet/util/rdoc/generators/puppet_generator.rb 56 def PuppetGenerator.for(options) 57 AllReferences::reset 58 HtmlMethod::reset 59 60 if options.all_one_file 61 PuppetGeneratorInOne.new(options) 62 else 63 PuppetGenerator.new(options) 64 end 65 end
Public Instance Methods
build_indices()
click to toggle source
Generate:
the list of modules the list of classes and definitions of a specific module the list of all classes the list of nodes the list of resources
# File lib/puppet/util/rdoc/generators/puppet_generator.rb 101 def build_indices 102 @allfiles = [] 103 @nodes = [] 104 @plugins = [] 105 106 # contains all the seen modules 107 @modules = {} 108 @allclasses = {} 109 110 # remove unknown toplevels 111 # it can happen that RDoc triggers a different parser for some files (ie .c, .cc or .h) 112 # in this case RDoc generates a RDoc::TopLevel which we do not support in this generator 113 # So let's make sure we don't generate html for those. 114 @toplevels = @toplevels.select { |tl| tl.is_a? RDoc::PuppetTopLevel } 115 116 # build the modules, classes and per modules classes and define list 117 @toplevels.each do |toplevel| 118 next unless toplevel.document_self 119 file = HtmlFile.new(toplevel, @options, FILE_DIR) 120 classes = [] 121 methods = [] 122 modules = [] 123 nodes = [] 124 125 # find all classes of this toplevel 126 # store modules if we find one 127 toplevel.each_classmodule do |k| 128 generate_class_list(classes, modules, k, toplevel, CLASS_DIR) 129 end 130 131 # find all defines belonging to this toplevel 132 HtmlMethod.all_methods.each do |m| 133 # find parent module, check this method is not already 134 # defined. 135 if m.context.parent.toplevel === toplevel 136 methods << m 137 end 138 end 139 140 classes.each do |k| 141 @allclasses[k.index_name] = k if !@allclasses.has_key?(k.index_name) 142 end 143 144 # generate nodes and plugins found 145 classes.each do |k| 146 if k.context.is_module? 147 k.context.each_node do |name,node| 148 nodes << HTMLPuppetNode.new(node, toplevel, NODE_DIR, @options) 149 @nodes << nodes.last 150 end 151 k.context.each_plugin do |plugin| 152 @plugins << HTMLPuppetPlugin.new(plugin, toplevel, PLUGIN_DIR, @options) 153 end 154 k.context.each_fact do |fact| 155 @plugins << HTMLPuppetPlugin.new(fact, toplevel, PLUGIN_DIR, @options) 156 end 157 end 158 end 159 160 @files << file 161 @allfiles << { "file" => file, "modules" => modules, "classes" => classes, "methods" => methods, "nodes" => nodes } 162 end 163 164 # scan all classes to create the child's references 165 @allclasses.values.each do |klass| 166 superklass = klass.context.superclass 167 if superklass 168 superklass = AllReferences[superklass] 169 if superklass && (superklass.is_a?(HTMLPuppetClass) || superklass.is_a?(HTMLPuppetNode)) 170 superklass.context.add_child(klass.context) 171 end 172 end 173 end 174 175 @classes = @allclasses.values 176 end
gen_class_index()
click to toggle source
generate the all classes index file and the combo index
# File lib/puppet/util/rdoc/generators/puppet_generator.rb 237 def gen_class_index 238 gen_an_index(@classes, 'All Classes', RDoc::Page::CLASS_INDEX, "fr_class_index.html") 239 @allfiles.each do |file| 240 unless file['file'].context.file_relative_name =~ /\.rb$/ 241 242 gen_composite_index( 243 file, 244 RDoc::Page::COMBO_INDEX, 245 246 "#{MODULE_DIR}/fr_#{file["file"].context.module_name}.html") 247 end 248 end 249 end
gen_composite_index(collection, template, filename)
click to toggle source
# File lib/puppet/util/rdoc/generators/puppet_generator.rb 251 def gen_composite_index(collection, template, filename) 252 return if Puppet::FileSystem.exist?(filename) 253 254 template = TemplatePage.new(RDoc::Page::FR_INDEX_BODY, template) 255 res1 = [] 256 collection['classes'].sort.each do |f| 257 if f.document_self 258 res1 << { "href" => "../"+CGI.escapeHTML(f.path), "name" => CGI.escapeHTML(f.index_name) } unless f.context.is_module? 259 end 260 end 261 262 res2 = [] 263 collection['methods'].sort.each do |f| 264 res2 << { "href" => "../#{f.path}", "name" => f.index_name.sub(/\(.*\)$/,'') } if f.document_self 265 end 266 267 module_name = [] 268 res3 = [] 269 res4 = [] 270 collection['modules'].sort.each do |f| 271 module_name << { "href" => "../"+CGI.escapeHTML(f.path), "name" => CGI.escapeHTML(f.index_name) } 272 unless f.facts.nil? 273 f.facts.each do |fact| 274 res3 << {"href" => "../"+CGI.escapeHTML(AllReferences["PLUGIN(#{fact.name})"].path), "name" => CGI.escapeHTML(fact.name)} 275 end 276 end 277 unless f.plugins.nil? 278 f.plugins.each do |plugin| 279 res4 << {"href" => "../"+CGI.escapeHTML(AllReferences["PLUGIN(#{plugin.name})"].path), "name" => CGI.escapeHTML(plugin.name)} 280 end 281 end 282 end 283 284 res5 = [] 285 collection['nodes'].sort.each do |f| 286 res5 << { "href" => "../"+CGI.escapeHTML(f.path), "name" => CGI.escapeHTML(f.name) } if f.document_self 287 end 288 289 values = { 290 "module" => module_name, 291 "classes" => res1, 292 'classes_title' => CGI.escapeHTML("Classes"), 293 'defines_title' => CGI.escapeHTML("Defines"), 294 'facts_title' => CGI.escapeHTML("Custom Facts"), 295 'plugins_title' => CGI.escapeHTML("Plugins"), 296 'nodes_title' => CGI.escapeHTML("Nodes"), 297 'index_url' => main_url, 298 'charset' => @options.charset, 299 'style_url' => style_url('', @options.css), 300 } 301 302 values["defines"] = res2 if res2.size>0 303 values["facts"] = res3 if res3.size>0 304 values["plugins"] = res4 if res4.size>0 305 values["nodes"] = res5 if res5.size>0 306 307 Puppet::FileSystem.open(filename, nil, "w:UTF-8") do |f| 308 template.write_html_on(f, values) 309 end 310 end
gen_file_index()
click to toggle source
generate the index of modules
# File lib/puppet/util/rdoc/generators/puppet_generator.rb 209 def gen_file_index 210 gen_top_index(@modules.values, 'All Modules', RDoc::Page::TOP_INDEX, "fr_modules_index.html") 211 end
gen_method_index()
click to toggle source
# File lib/puppet/util/rdoc/generators/puppet_generator.rb 81 def gen_method_index 82 # we don't generate an all define index 83 # as the presentation is per module/per class 84 end
gen_sub_directories()
click to toggle source
generate all the subdirectories, modules, classes and files
Calls superclass method
# File lib/puppet/util/rdoc/generators/puppet_generator.rb 198 def gen_sub_directories 199 super 200 File.makedirs(MODULE_DIR) 201 File.makedirs(NODE_DIR) 202 File.makedirs(PLUGIN_DIR) 203 rescue 204 $stderr.puts $ERROR_INFO.message 205 exit 1 206 end
gen_top_index(collection, title, template, filename)
click to toggle source
generate a top index
# File lib/puppet/util/rdoc/generators/puppet_generator.rb 214 def gen_top_index(collection, title, template, filename) 215 template = TemplatePage.new(RDoc::Page::FR_INDEX_BODY, template) 216 res = [] 217 collection.sort.each do |f| 218 if f.document_self 219 res << { "classlist" => CGI.escapeHTML("#{MODULE_DIR}/fr_#{f.index_name}.html"), "module" => CGI.escapeHTML("#{CLASS_DIR}/#{f.index_name}.html"),"name" => CGI.escapeHTML(f.index_name) } 220 end 221 end 222 223 values = { 224 "entries" => res, 225 'list_title' => CGI.escapeHTML(title), 226 'index_url' => main_url, 227 'charset' => @options.charset, 228 'style_url' => style_url('', @options.css), 229 } 230 231 Puppet::FileSystem.open(filename, nil, "w:UTF-8") do |f| 232 template.write_html_on(f, values) 233 end 234 end
generate_class_list(classes, modules, from, html_file, class_dir)
click to toggle source
produce a class/module list of HTMLPuppetModule/HTMLPuppetClass based on the code object traversal.
# File lib/puppet/util/rdoc/generators/puppet_generator.rb 180 def generate_class_list(classes, modules, from, html_file, class_dir) 181 if from.is_module? and !@modules.has_key?(from.name) 182 k = HTMLPuppetModule.new(from, html_file, class_dir, @options) 183 classes << k 184 @modules[from.name] = k 185 modules << @modules[from.name] 186 elsif from.is_module? 187 modules << @modules[from.name] 188 elsif !from.is_module? 189 k = HTMLPuppetClass.new(from, html_file, class_dir, @options) 190 classes << k 191 end 192 from.each_classmodule do |mod| 193 generate_class_list(classes, modules, mod, html_file, class_dir) 194 end 195 end
generate_html()
click to toggle source
This is the central method, it generates the whole structures along with all the indices.
Calls superclass method
# File lib/puppet/util/rdoc/generators/puppet_generator.rb 88 def generate_html 89 super 90 gen_into(@nodes) 91 gen_into(@plugins) 92 end
load_html_template()
click to toggle source
loads our own html template file
# File lib/puppet/util/rdoc/generators/puppet_generator.rb 73 def load_html_template 74 require_relative '../../../../puppet/util/rdoc/generators/template/puppet/puppet' 75 extend RDoc::Page 76 rescue LoadError 77 $stderr.puts "Could not find Puppet template '#{template}'" 78 exit 99 79 end
main_url()
click to toggle source
returns the initial_page url
# File lib/puppet/util/rdoc/generators/puppet_generator.rb 313 def main_url 314 main_page = @options.main_page 315 ref = nil 316 if main_page 317 ref = AllReferences[main_page] 318 if ref 319 ref = ref.path 320 else 321 $stderr.puts "Could not find main page #{main_page}" 322 end 323 end 324 325 unless ref 326 for file in @files 327 if file.document_self and file.context.global 328 ref = CGI.escapeHTML("#{CLASS_DIR}/#{file.context.module_name}.html") 329 break 330 end 331 end 332 end 333 334 unless ref 335 for file in @files 336 if file.document_self and !file.context.global 337 ref = CGI.escapeHTML("#{CLASS_DIR}/#{file.context.module_name}.html") 338 break 339 end 340 end 341 end 342 343 unless ref 344 $stderr.puts "Couldn't find anything to document" 345 $stderr.puts "Perhaps you've used :stopdoc: in all classes" 346 exit(1) 347 end 348 349 ref 350 end
Protected Instance Methods
initialize(options)
click to toggle source
# File lib/puppet/util/rdoc/generators/puppet_generator.rb 67 def initialize(options) #:not-new: 68 @options = options 69 load_html_template 70 end