puppet-strings 1.2.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +26 -0
  3. data/CONTRIBUTING.md +3 -7
  4. data/JSON.md +126 -8
  5. data/README.md +16 -498
  6. data/lib/puppet-strings.rb +6 -0
  7. data/lib/puppet-strings/json.rb +2 -0
  8. data/lib/puppet-strings/markdown.rb +6 -1
  9. data/lib/puppet-strings/markdown/puppet_plan.rb +14 -0
  10. data/lib/puppet-strings/markdown/puppet_plans.rb +37 -0
  11. data/lib/puppet-strings/markdown/puppet_task.rb +24 -0
  12. data/lib/puppet-strings/markdown/puppet_tasks.rb +34 -0
  13. data/lib/puppet-strings/markdown/table_of_contents.rb +3 -1
  14. data/lib/puppet-strings/markdown/templates/classes_and_defines.erb +8 -5
  15. data/lib/puppet-strings/markdown/templates/function.erb +2 -3
  16. data/lib/puppet-strings/markdown/templates/puppet_task.erb +28 -0
  17. data/lib/puppet-strings/markdown/templates/resource_type.erb +9 -5
  18. data/lib/puppet-strings/markdown/templates/table_of_contents.erb +5 -0
  19. data/lib/puppet-strings/monkey_patches/display_object_command.rb +11 -0
  20. data/lib/puppet-strings/yard.rb +15 -1
  21. data/lib/puppet-strings/yard/code_objects.rb +2 -0
  22. data/lib/puppet-strings/yard/code_objects/plan.rb +56 -0
  23. data/lib/puppet-strings/yard/code_objects/task.rb +70 -0
  24. data/lib/puppet-strings/yard/handlers.rb +6 -0
  25. data/lib/puppet-strings/yard/handlers/json/base.rb +5 -0
  26. data/lib/puppet-strings/yard/handlers/json/task_handler.rb +31 -0
  27. data/lib/puppet-strings/yard/handlers/puppet/base.rb +1 -1
  28. data/lib/puppet-strings/yard/handlers/puppet/class_handler.rb +1 -1
  29. data/lib/puppet-strings/yard/handlers/puppet/defined_type_handler.rb +1 -1
  30. data/lib/puppet-strings/yard/handlers/puppet/function_handler.rb +1 -1
  31. data/lib/puppet-strings/yard/handlers/puppet/plan_handler.rb +27 -0
  32. data/lib/puppet-strings/yard/handlers/ruby/function_handler.rb +4 -1
  33. data/lib/puppet-strings/yard/handlers/ruby/rsapi_handler.rb +12 -2
  34. data/lib/puppet-strings/yard/parsers.rb +4 -0
  35. data/lib/puppet-strings/yard/parsers/json/parser.rb +33 -0
  36. data/lib/puppet-strings/yard/parsers/json/task_statement.rb +35 -0
  37. data/lib/puppet-strings/yard/parsers/puppet/parser.rb +11 -0
  38. data/lib/puppet-strings/yard/parsers/puppet/statement.rb +14 -0
  39. data/lib/puppet-strings/yard/templates/default/fulldoc/html/full_list_puppet_plan.erb +9 -0
  40. data/lib/puppet-strings/yard/templates/default/fulldoc/html/full_list_puppet_task.erb +9 -0
  41. data/lib/puppet-strings/yard/templates/default/fulldoc/html/setup.rb +18 -0
  42. data/lib/puppet-strings/yard/templates/default/layout/html/setup.rb +42 -2
  43. data/lib/puppet-strings/yard/templates/default/puppet_plan/html/box_info.erb +10 -0
  44. data/lib/puppet-strings/yard/templates/default/puppet_plan/html/header.erb +1 -0
  45. data/lib/puppet-strings/yard/templates/default/puppet_plan/html/overview.erb +6 -0
  46. data/lib/puppet-strings/yard/templates/default/puppet_plan/html/setup.rb +11 -0
  47. data/lib/puppet-strings/yard/templates/default/puppet_plan/html/source.erb +12 -0
  48. data/lib/puppet-strings/yard/templates/default/puppet_plan/html/summary.erb +4 -0
  49. data/lib/puppet-strings/yard/templates/default/puppet_task/html/box_info.erb +9 -0
  50. data/lib/puppet-strings/yard/templates/default/puppet_task/html/header.erb +1 -0
  51. data/lib/puppet-strings/yard/templates/default/puppet_task/html/input.erb +5 -0
  52. data/lib/puppet-strings/yard/templates/default/puppet_task/html/overview.erb +6 -0
  53. data/lib/puppet-strings/yard/templates/default/puppet_task/html/parameters.erb +16 -0
  54. data/lib/puppet-strings/yard/templates/default/puppet_task/html/setup.rb +22 -0
  55. data/lib/puppet-strings/yard/templates/default/puppet_task/html/supports_noop.erb +3 -0
  56. data/lib/puppet-strings/yard/templates/default/tags/setup.rb +3 -1
  57. data/lib/puppet-strings/yard/util.rb +14 -0
  58. data/spec/fixtures/unit/json/output.json +50 -0
  59. data/spec/fixtures/unit/json/output_with_plan.json +689 -0
  60. data/spec/fixtures/unit/markdown/output.md +63 -8
  61. data/spec/fixtures/unit/markdown/output_with_plan.md +472 -0
  62. data/spec/spec_helper.rb +5 -2
  63. data/spec/unit/puppet-strings/json_spec.rb +42 -2
  64. data/spec/unit/puppet-strings/markdown_spec.rb +41 -8
  65. data/spec/unit/puppet-strings/yard/code_objects/task_spec.rb +92 -0
  66. data/spec/unit/puppet-strings/yard/handlers/json/task_handler_spec.rb +124 -0
  67. data/spec/unit/puppet-strings/yard/handlers/puppet/class_handler_spec.rb +1 -1
  68. data/spec/unit/puppet-strings/yard/handlers/puppet/defined_type_handler_spec.rb +19 -12
  69. data/spec/unit/puppet-strings/yard/handlers/ruby/function_handler_spec.rb +33 -0
  70. data/spec/unit/puppet-strings/yard/handlers/ruby/rsapi_handler_spec.rb +8 -7
  71. data/spec/unit/puppet-strings/yard/parsers/json/parser_spec.rb +70 -0
  72. data/spec/unit/puppet-strings/yard/parsers/json/task_statement_spec.rb +56 -0
  73. data/spec/unit/puppet-strings/yard/parsers/puppet/parser_spec.rb +1 -1
  74. data/spec/unit/puppet-strings/yard/util_spec.rb +17 -0
  75. metadata +38 -5
  76. data/MAINTAINERS +0 -17
@@ -0,0 +1,70 @@
1
+ require 'puppet-strings/yard/code_objects/group'
2
+
3
+ # Implements the group for Puppet tasks.
4
+ class PuppetStrings::Yard::CodeObjects::Tasks < PuppetStrings::Yard::CodeObjects::Group
5
+ # Gets the singleton instance of the group.
6
+ # @return Returns the singleton instance of the group.
7
+ def self.instance
8
+ super(:puppet_tasks)
9
+ end
10
+
11
+ # Gets the display name of the group.
12
+ # @param [Boolean] prefix whether to show a prefix.
13
+ # @return [String] Returns the display name of the group.
14
+ def name(prefix = false)
15
+ 'Puppet Tasks'
16
+ end
17
+ end
18
+
19
+ # Implements the Puppet task code object.
20
+ class PuppetStrings::Yard::CodeObjects::Task < PuppetStrings::Yard::CodeObjects::Base
21
+ attr_reader :statement
22
+
23
+ # Initializes a JSON task code object.
24
+ # @param statement TaskStatement object
25
+ # @return [void]
26
+ def initialize(statement)
27
+ @name = statement.name
28
+ @statement = statement
29
+ super(PuppetStrings::Yard::CodeObjects::Tasks.instance, name)
30
+ end
31
+
32
+ # Gets the type of the code object.
33
+ # @return Returns the type of the code object.
34
+ def type
35
+ :puppet_task
36
+ end
37
+
38
+ # Gets the source of the code object.
39
+ # @return Returns the source of the code object.
40
+ def source
41
+ @statement.source
42
+ end
43
+
44
+ def parameters
45
+ parameters = []
46
+ statement.json['parameters'].each do |name,props|
47
+ parameters.push({ name: name.to_s,
48
+ tag_name: 'param',
49
+ text: props['description'] || "",
50
+ types: [props['type']] || "" })
51
+ end
52
+ parameters
53
+ end
54
+
55
+ # Converts the code object to a hash representation.
56
+ # @return [Hash] Returns a hash representation of the code object.
57
+ def to_hash
58
+ { name: name.to_s,
59
+ file: statement.file,
60
+ line: statement.line,
61
+ docstring: {
62
+ text: statement.docstring,
63
+ tags: parameters
64
+ },
65
+ source: statement.source,
66
+ supports_noop: statement.json['supports_noop'] || false,
67
+ input_method: statement.json['input_method']
68
+ }
69
+ end
70
+ end
@@ -8,10 +8,16 @@ module PuppetStrings::Yard::Handlers
8
8
  require 'puppet-strings/yard/handlers/ruby/function_handler'
9
9
  end
10
10
 
11
+ # The module for custom JSON YARD handlers.
12
+ module JSON
13
+ require 'puppet-strings/yard/handlers/json/task_handler'
14
+ end
15
+
11
16
  # The module for custom Puppet YARD handlers.
12
17
  module Puppet
13
18
  require 'puppet-strings/yard/handlers/puppet/class_handler'
14
19
  require 'puppet-strings/yard/handlers/puppet/defined_type_handler'
15
20
  require 'puppet-strings/yard/handlers/puppet/function_handler'
21
+ require 'puppet-strings/yard/handlers/puppet/plan_handler'
16
22
  end
17
23
  end
@@ -0,0 +1,5 @@
1
+ class PuppetStrings::Yard::Handlers::JSON::Base < YARD::Handlers::Base
2
+ def self.handles?(statement)
3
+ handlers.any? {|handler| statement.is_a?(handler)}
4
+ end
5
+ end
@@ -0,0 +1,31 @@
1
+ require 'puppet-strings/yard/handlers/json/base'
2
+ require 'puppet-strings/yard/parsers'
3
+ require 'puppet-strings/yard/parsers/json/parser'
4
+
5
+ class PuppetStrings::Yard::Handlers::JSON::TaskHandler < PuppetStrings::Yard::Handlers::JSON::Base
6
+ handles PuppetStrings::Yard::Parsers::JSON::TaskStatement
7
+ namespace_only
8
+
9
+ process do
10
+ object = PuppetStrings::Yard::CodeObjects::Task.new(statement)
11
+ register object
12
+
13
+ @kind = "Puppet Task #{object.name}."
14
+ @statement = statement
15
+
16
+ validate_description
17
+ validate_params
18
+ end
19
+
20
+ def validate_description
21
+ log.warn "Missing a description for #{@kind}." if @statement.docstring.empty?
22
+ end
23
+
24
+ def validate_params
25
+ unless @statement.parameters.empty?
26
+ @statement.parameters.each do |param, val|
27
+ log.warn "Missing description for param '#{param}' in #{@kind}" if val['description'].nil?
28
+ end
29
+ end
30
+ end
31
+ end
@@ -17,7 +17,7 @@ class PuppetStrings::Yard::Handlers::Puppet::Base < YARD::Handlers::Base
17
17
  tags = object.tags(:param)
18
18
  tags.each do |tag|
19
19
  next if statement.parameters.find { |p| tag.name == p.name }
20
- log.warn "The @param tag for parameter '#{tag.name}' has no matching parameter at #{statement.file}:#{statement.line}."
20
+ log.warn "The @param tag for parameter '#{tag.name}' has no matching parameter at #{statement.file}:#{statement.line}." unless tag.name == 'name' || tag.name == 'title'
21
21
  end
22
22
 
23
23
  # Assign the types for the parameter
@@ -13,7 +13,7 @@ class PuppetStrings::Yard::Handlers::Puppet::ClassHandler < PuppetStrings::Yard:
13
13
  register object
14
14
 
15
15
  # Log a warning if missing documentation
16
- log.warn "Missing documentation for Puppet class '#{object.name}' at #{statement.file}:#{statement.line}." if object.docstring.empty?
16
+ log.warn "Missing documentation for Puppet class '#{object.name}' at #{statement.file}:#{statement.line}." if object.docstring.empty? && object.tags.empty?
17
17
 
18
18
  # Set the parameter types
19
19
  set_parameter_types(object)
@@ -13,7 +13,7 @@ class PuppetStrings::Yard::Handlers::Puppet::DefinedTypeHandler < PuppetStrings:
13
13
  register object
14
14
 
15
15
  # Log a warning if missing documentation
16
- log.warn "Missing documentation for Puppet defined type '#{object.name}' at #{statement.file}:#{statement.line}." if object.docstring.empty?
16
+ log.warn "Missing documentation for Puppet defined type '#{object.name}' at #{statement.file}:#{statement.line}." if object.docstring.empty? && object.tags.empty?
17
17
 
18
18
  # Set the parameter types
19
19
  set_parameter_types(object)
@@ -15,7 +15,7 @@ class PuppetStrings::Yard::Handlers::Puppet::FunctionHandler < PuppetStrings::Ya
15
15
  register object
16
16
 
17
17
  # Log a warning if missing documentation
18
- log.warn "Missing documentation for Puppet function '#{object.name}' at #{statement.file}:#{statement.line}." if object.docstring.empty?
18
+ log.warn "Missing documentation for Puppet function '#{object.name}' at #{statement.file}:#{statement.line}." if object.docstring.empty? && object.tags.empty?
19
19
 
20
20
  # Set the parameter tag types
21
21
  set_parameter_types(object)
@@ -0,0 +1,27 @@
1
+ require 'puppet-strings/yard/handlers/helpers'
2
+ require 'puppet-strings/yard/handlers/puppet/base'
3
+ require 'puppet-strings/yard/parsers'
4
+ require 'puppet-strings/yard/code_objects'
5
+
6
+ # Implements the handler for Puppet classes.
7
+ class PuppetStrings::Yard::Handlers::Puppet::PlanHandler < PuppetStrings::Yard::Handlers::Puppet::Base
8
+ handles PuppetStrings::Yard::Parsers::Puppet::PlanStatement
9
+
10
+ process do
11
+ # Register the object
12
+ object = PuppetStrings::Yard::CodeObjects::Plan.new(statement)
13
+ register object
14
+
15
+ # Log a warning if missing documentation
16
+ log.warn "Missing documentation for Puppet plan '#{object.name}' at #{statement.file}:#{statement.line}." if object.docstring.empty? && object.tags.empty?
17
+
18
+ # Set the parameter types
19
+ set_parameter_types(object)
20
+
21
+ # Mark the class as public if it doesn't already have an api tag
22
+ object.add_tag YARD::Tags::Tag.new(:api, 'public') unless object.has_tag? :api
23
+
24
+ # Warn if a summary longer than 140 characters was provided
25
+ PuppetStrings::Yard::Handlers::Helpers.validate_summary_tag(object) if object.has_tag? :summary
26
+ end
27
+ end
@@ -77,7 +77,7 @@ class PuppetStrings::Yard::Handlers::Ruby::FunctionHandler < PuppetStrings::Yard
77
77
  end
78
78
 
79
79
  def add_tags(object)
80
- log.warn "Missing documentation for Puppet function '#{object.name}' at #{statement.file}:#{statement.line}." if object.docstring.empty?
80
+ log.warn "Missing documentation for Puppet function '#{object.name}' at #{statement.file}:#{statement.line}." if object.docstring.empty? && object.tags.empty?
81
81
  log.warn "The docstring for Puppet 4.x function '#{object.name}' contains @param tags near #{object.file}:#{object.line}: parameter documentation should be made on the dispatch call." unless object.tags(:param).empty?
82
82
  log.warn "The docstring for Puppet 4.x function '#{object.name}' contains @return tags near #{object.file}:#{object.line}: return value documentation should be made on the dispatch call." unless object.tags(:return).empty?
83
83
  log.warn "The docstring for Puppet 4.x function '#{object.name}' contains @overload tags near #{object.file}:#{object.line}: overload tags are automatically generated from the dispatch calls." unless object.tags(:overload).empty?
@@ -139,6 +139,9 @@ class PuppetStrings::Yard::Handlers::Ruby::FunctionHandler < PuppetStrings::Yard
139
139
  next unless DISPATCH_METHOD_NAMES.include?(method_name)
140
140
 
141
141
  if method_name == 'return_type'
142
+ # Add a return tag if missing
143
+ overload_tag.add_tag YARD::Tags::Tag.new(:return, '', 'Any') if overload_tag.tag(:return).nil?
144
+
142
145
  overload_tag.tag(:return).types = [node_as_string(child.parameters[0])]
143
146
  next
144
147
  end
@@ -24,7 +24,7 @@ class PuppetStrings::Yard::Handlers::Ruby::RsapiHandler < PuppetStrings::Yard::H
24
24
  object = PuppetStrings::Yard::CodeObjects::Type.new(schema['name'])
25
25
  register object
26
26
 
27
- docstring = schema['desc'] || ""
27
+ docstring = schema['docs']
28
28
  if docstring
29
29
  register_docstring(object, PuppetStrings::Yard::Util.scrub_string(docstring.to_s), nil)
30
30
  else
@@ -44,7 +44,7 @@ class PuppetStrings::Yard::Handlers::Ruby::RsapiHandler < PuppetStrings::Yard::H
44
44
  private
45
45
 
46
46
  def raise_parse_error(msg, location = statement)
47
- raise YARD::Parser::UndocumentableError, "#{msg} at #{location.file}:#{location.line}." if parameters.empty?
47
+ raise YARD::Parser::UndocumentableError, "#{msg} at #{location.file}:#{location.line}."
48
48
  end
49
49
 
50
50
  # check that the params of the register_type call are key/value pairs.
@@ -67,6 +67,8 @@ class PuppetStrings::Yard::Handlers::Ruby::RsapiHandler < PuppetStrings::Yard::H
67
67
  node.source.to_i
68
68
  when :hash
69
69
  hash_from_node(node)
70
+ when :array
71
+ array_from_node(node)
70
72
  when :var_ref
71
73
  var_ref_from_node(node)
72
74
  when :symbol, :symbol_literal, :label, :dyna_symbol, :string_literal
@@ -76,6 +78,14 @@ class PuppetStrings::Yard::Handlers::Ruby::RsapiHandler < PuppetStrings::Yard::H
76
78
  end
77
79
  end
78
80
 
81
+ def array_from_node(node)
82
+ return nil unless node
83
+
84
+ arr = node.children.collect do |assoc|
85
+ value_from_node(assoc.children[0])
86
+ end
87
+ end
88
+
79
89
  def hash_from_node(node)
80
90
  return nil unless node
81
91
 
@@ -1,5 +1,9 @@
1
1
  # The module for custom YARD parsers.
2
2
  module PuppetStrings::Yard::Parsers
3
+ # The module for custom YARD parsers for JSON.
4
+ module JSON
5
+ require 'puppet-strings/yard/parsers/json/parser'
6
+ end
3
7
  # The module for custom YARD parsers for the Puppet language.
4
8
  module Puppet
5
9
  require 'puppet-strings/yard/parsers/puppet/parser'
@@ -0,0 +1,33 @@
1
+ require 'puppet-strings/yard/parsers/json/task_statement'
2
+
3
+ class PuppetStrings::Yard::Parsers::JSON::Parser < YARD::Parser::Base
4
+ attr_reader :file, :source
5
+
6
+ # Initializes the parser.
7
+ # @param [String] source The source being parsed.
8
+ # @param [String] filename The file name of the file being parsed.
9
+ # @return [void]
10
+ def initialize(source, filename)
11
+ @file = filename
12
+ @source = source
13
+ @statements = []
14
+ end
15
+
16
+ def enumerator
17
+ @statements
18
+ end
19
+
20
+ # Parses the source
21
+ # @return [void]
22
+ def parse
23
+ begin
24
+ json = JSON.parse(source)
25
+ @statements.push(PuppetStrings::Yard::Parsers::JSON::TaskStatement.new(json, @source, @file))
26
+ rescue
27
+ log.error "Failed to parse #{@file}: "
28
+ @statements = []
29
+ end
30
+ @statements.freeze
31
+ self
32
+ end
33
+ end
@@ -0,0 +1,35 @@
1
+ module PuppetStrings::Yard::Parsers::JSON
2
+ # Represents the Puppet Task statement.
3
+ class TaskStatement
4
+ attr_reader :line, :comments, :comments_range, :json, :file, :source, :docstring
5
+
6
+ def initialize(json, source, file)
7
+ @file = file
8
+ @source = source
9
+ @json = json
10
+ @line = 0
11
+ @comments_range = nil
12
+ @docstring = YARD::Docstring.new(@json['description'])
13
+ end
14
+
15
+ def parameters
16
+ json['parameters'] || {}
17
+ end
18
+
19
+ def comments_hash_flag
20
+ false
21
+ end
22
+
23
+ def show
24
+ ""
25
+ end
26
+
27
+ def comments
28
+ docstring.all
29
+ end
30
+
31
+ def name
32
+ File.basename(@file).gsub('.json','') || ""
33
+ end
34
+ end
35
+ end
@@ -20,6 +20,11 @@ class PuppetStrings::Yard::Parsers::Puppet::Parser < YARD::Parser::Base
20
20
  # @return [void]
21
21
  def parse
22
22
  begin
23
+ Puppet[:tasks] = true if Puppet.settings.include?(:tasks)
24
+ if Puppet::Util::Package.versioncmp(Puppet.version, "5.0.0") < 0 && @file.to_s.match(/^plans\//)
25
+ log.warn "Skipping #{@file}: Puppet Plans require Puppet 5 or greater."
26
+ return
27
+ end
23
28
  @statements ||= (@visitor.visit(::Puppet::Pops::Parser::Parser.new.parse_string(source)) || []).compact
24
29
  rescue ::Puppet::ParseError => ex
25
30
  log.error "Failed to parse #{@file}: #{ex.message}"
@@ -64,6 +69,12 @@ class PuppetStrings::Yard::Parsers::Puppet::Parser < YARD::Parser::Base
64
69
  statement
65
70
  end
66
71
 
72
+ def transform_PlanDefinition(o)
73
+ statement = PuppetStrings::Yard::Parsers::Puppet::PlanStatement.new(o, @file)
74
+ statement.extract_docstring(@lines)
75
+ statement
76
+ end
77
+
67
78
  def transform_Object(o)
68
79
  # Ignore anything else (will be compacted out of the resulting array)
69
80
  end
@@ -151,4 +151,18 @@ module PuppetStrings::Yard::Parsers::Puppet
151
151
  end
152
152
  end
153
153
  end
154
+
155
+ # Implements the Puppet plan statement.
156
+ class PlanStatement < ParameterizedStatement
157
+ attr_reader :name
158
+
159
+ # Initializes the Puppet plan statement.
160
+ # @param [Puppet::Pops::Model::PlanDefinition] object The model object for the plan statement.
161
+ # @param [String] file The file containing the statement.
162
+ def initialize(object, file)
163
+ super(object, file)
164
+ @name = object.name
165
+ end
166
+ end
167
+
154
168
  end
@@ -0,0 +1,9 @@
1
+ <% even = false %>
2
+ <% @items.each do |item| %>
3
+ <li id="object_<%=item.path%>" class="<%= even ? 'even' : 'odd' %>">
4
+ <div class="item">
5
+ <%= linkify item, h(item.name(true)) %>
6
+ </div>
7
+ </li>
8
+ <% even = !even %>
9
+ <% end %>
@@ -0,0 +1,9 @@
1
+ <% even = false %>
2
+ <% @items.each do |item| %>
3
+ <li id="object_<%=item.path%>" class="<%= even ? 'even' : 'odd' %>">
4
+ <div class="item">
5
+ <%= linkify item, h(item.name(true)) %>
6
+ </div>
7
+ </li>
8
+ <% even = !even %>
9
+ <% end %>
@@ -62,3 +62,21 @@ def generate_class_list
62
62
  @list_type = 'class'
63
63
  generate_list_contents
64
64
  end
65
+
66
+ # Generates the searchable Puppet Task list.
67
+ # @return [void]
68
+ def generate_puppet_task_list
69
+ @items = Registry.all(:puppet_task).sort_by {|t| t.name.to_s }
70
+ @list_title = 'Puppet Task List'
71
+ @list_type = 'puppet_task'
72
+ generate_list_contents
73
+ end
74
+
75
+ # Generates the searchable Puppet Plan list.
76
+ # @return [void]
77
+ def generate_puppet_plan_list
78
+ @items = Registry.all(:puppet_plan).sort_by {|t| t.name.to_s }
79
+ @list_title = 'Puppet Plan List'
80
+ @list_type = 'puppet_plan'
81
+ generate_list_contents
82
+ end
@@ -4,7 +4,7 @@ def init
4
4
  case object
5
5
  when '_index.html'
6
6
  @page_title = options.title
7
- sections :layout, [:index, [:listing, [:classes, :defined_types, :types, :providers, :functions, :files, :objects]]]
7
+ sections :layout, [:index, [:listing, [:classes, :defined_types, :types, :providers, :functions, :tasks, :plans, :files, :objects]]]
8
8
  else
9
9
  super
10
10
  end
@@ -46,11 +46,25 @@ def layout
46
46
  @nav_url = url_for_list('puppet_function')
47
47
  @page_title = "Puppet Function: #{object.name} (#{object.function_type})"
48
48
  @path = object.path
49
+ when PuppetStrings::Yard::CodeObjects::Task
50
+ @nav_url = url_for_list('puppet_task')
51
+ @page_title = "Puppet Task: #{object.name}"
52
+ @path = object.path
53
+ when PuppetStrings::Yard::CodeObjects::Plan
54
+ @nav_url = url_for_list('puppet_plan')
55
+ @page_title = "Puppet Plan: #{object.name}"
56
+ @path = object.path
49
57
  else
50
58
  @path = object.path
51
59
  end
52
60
 
53
- erb(:layout)
61
+ final_layout = erb(:layout)
62
+
63
+ if @file && @file.name == 'README'
64
+ PuppetStrings::Yard::Util.github_to_yard_links(final_layout)
65
+ end
66
+
67
+ final_layout
54
68
  end
55
69
 
56
70
  # Creates the dynamic menu lists.
@@ -82,6 +96,16 @@ def create_menu_lists
82
96
  title: 'Puppet Functions',
83
97
  search_title: 'Puppet Functions'
84
98
  },
99
+ {
100
+ type: 'puppet_task',
101
+ title: 'Puppet Tasks',
102
+ search_totle: 'Puppet Tasks'
103
+ },
104
+ {
105
+ type: 'puppet_plan',
106
+ title: 'Puppet Plans',
107
+ search_totle: 'Puppet Plans'
108
+ },
85
109
  {
86
110
  type: 'class',
87
111
  title: 'Ruby Classes',
@@ -163,6 +187,22 @@ def functions
163
187
  erb(:objects)
164
188
  end
165
189
 
190
+ # Renders the tasks section.
191
+ # @return [String] Returns the rendered section.
192
+ def tasks
193
+ @title = 'Puppet Task Listing A-Z'
194
+ @objects_by_letter = objects_by_letter(:puppet_task)
195
+ erb(:objects)
196
+ end
197
+
198
+ # Renders the plans section.
199
+ # @return [String] Returns the rendered section.
200
+ def plans
201
+ @title = 'Puppet Plan Listing A-Z'
202
+ @objects_by_letter = objects_by_letter(:puppet_plan)
203
+ erb(:objects)
204
+ end
205
+
166
206
  # Renders the objects section.
167
207
  # @return [String] Returns the rendered section.
168
208
  def objects