puppet-strings 2.1.0 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +78 -4
  3. data/CONTRIBUTING.md +32 -2
  4. data/README.md +81 -17
  5. data/lib/puppet-strings.rb +13 -4
  6. data/lib/puppet-strings/describe.rb +68 -0
  7. data/lib/puppet-strings/json.rb +2 -38
  8. data/lib/puppet-strings/markdown.rb +3 -1
  9. data/lib/puppet-strings/markdown/base.rb +37 -16
  10. data/lib/puppet-strings/markdown/data_type.rb +34 -0
  11. data/lib/puppet-strings/markdown/data_types.rb +41 -0
  12. data/lib/puppet-strings/markdown/function.rb +2 -2
  13. data/lib/puppet-strings/markdown/resource_type.rb +19 -2
  14. data/lib/puppet-strings/markdown/table_of_contents.rb +1 -0
  15. data/lib/puppet-strings/markdown/templates/classes_and_defines.erb +12 -4
  16. data/lib/puppet-strings/markdown/templates/data_type.erb +93 -0
  17. data/lib/puppet-strings/markdown/templates/data_type_function.erb +67 -0
  18. data/lib/puppet-strings/markdown/templates/function.erb +36 -1
  19. data/lib/puppet-strings/markdown/templates/puppet_task.erb +1 -1
  20. data/lib/puppet-strings/markdown/templates/resource_type.erb +32 -12
  21. data/lib/puppet-strings/markdown/templates/table_of_contents.erb +6 -6
  22. data/lib/puppet-strings/tasks/generate.rb +10 -3
  23. data/lib/puppet-strings/version.rb +1 -1
  24. data/lib/puppet-strings/yard.rb +16 -0
  25. data/lib/puppet-strings/yard/code_objects.rb +2 -0
  26. data/lib/puppet-strings/yard/code_objects/class.rb +2 -2
  27. data/lib/puppet-strings/yard/code_objects/data_type.rb +100 -0
  28. data/lib/puppet-strings/yard/code_objects/data_type_alias.rb +58 -0
  29. data/lib/puppet-strings/yard/code_objects/defined_type.rb +2 -2
  30. data/lib/puppet-strings/yard/code_objects/function.rb +4 -4
  31. data/lib/puppet-strings/yard/code_objects/plan.rb +2 -2
  32. data/lib/puppet-strings/yard/code_objects/provider.rb +1 -1
  33. data/lib/puppet-strings/yard/code_objects/task.rb +1 -1
  34. data/lib/puppet-strings/yard/code_objects/type.rb +48 -6
  35. data/lib/puppet-strings/yard/handlers.rb +3 -0
  36. data/lib/puppet-strings/yard/handlers/puppet/data_type_alias_handler.rb +24 -0
  37. data/lib/puppet-strings/yard/handlers/ruby/base.rb +12 -1
  38. data/lib/puppet-strings/yard/handlers/ruby/data_type_handler.rb +393 -0
  39. data/lib/puppet-strings/yard/handlers/ruby/function_handler.rb +2 -12
  40. data/lib/puppet-strings/yard/handlers/ruby/provider_handler.rb +1 -9
  41. data/lib/puppet-strings/yard/handlers/ruby/rsapi_handler.rb +3 -3
  42. data/lib/puppet-strings/yard/handlers/ruby/type_base.rb +135 -0
  43. data/lib/puppet-strings/yard/handlers/ruby/type_extras_handler.rb +56 -0
  44. data/lib/puppet-strings/yard/handlers/ruby/type_handler.rb +9 -115
  45. data/lib/puppet-strings/yard/parsers/json/parser.rb +4 -2
  46. data/lib/puppet-strings/yard/parsers/puppet/parser.rb +14 -7
  47. data/lib/puppet-strings/yard/parsers/puppet/statement.rb +25 -0
  48. data/lib/puppet-strings/yard/tags.rb +2 -0
  49. data/lib/puppet-strings/yard/tags/enum_tag.rb +12 -0
  50. data/lib/puppet-strings/yard/tags/factory.rb +16 -0
  51. data/lib/puppet-strings/yard/tags/overload_tag.rb +2 -2
  52. data/lib/puppet-strings/yard/templates/default/fulldoc/html/full_list_puppet_data_type.erb +10 -0
  53. data/lib/puppet-strings/yard/templates/default/fulldoc/html/setup.rb +9 -0
  54. data/lib/puppet-strings/yard/templates/default/layout/html/objects.erb +2 -0
  55. data/lib/puppet-strings/yard/templates/default/layout/html/setup.rb +18 -1
  56. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/box_info.erb +10 -0
  57. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/header.erb +1 -0
  58. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/method_details_list.erb +6 -0
  59. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/note.erb +6 -0
  60. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/overview.erb +6 -0
  61. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/setup.rb +13 -0
  62. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/source.erb +12 -0
  63. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/summary.erb +4 -0
  64. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/todo.erb +6 -0
  65. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/alias_of.erb +10 -0
  66. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/box_info.erb +10 -0
  67. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/header.erb +1 -0
  68. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/note.erb +6 -0
  69. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/overview.erb +6 -0
  70. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/setup.rb +17 -0
  71. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/source.erb +12 -0
  72. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/summary.erb +4 -0
  73. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/todo.erb +6 -0
  74. data/lib/puppet-strings/yard/templates/default/puppet_type/html/setup.rb +3 -1
  75. data/lib/puppet-strings/yard/templates/default/tags/html/enum.erb +17 -0
  76. data/lib/puppet-strings/yard/templates/default/tags/setup.rb +7 -0
  77. data/lib/puppet-strings/yard/util.rb +48 -0
  78. data/lib/puppet/face/strings.rb +68 -3
  79. metadata +36 -45
  80. data/Gemfile +0 -37
  81. data/HISTORY.md +0 -218
  82. data/JSON.md +0 -802
  83. data/Rakefile +0 -93
  84. data/codecov.yml +0 -3
  85. data/misc/ANNOUNCEMENT_TEMPLATE.md +0 -40
  86. data/spec/acceptance/emit_json_options.rb +0 -71
  87. data/spec/acceptance/generate_markdown_spec.rb +0 -49
  88. data/spec/acceptance/lib/util.rb +0 -163
  89. data/spec/acceptance/running_strings_generate.rb +0 -54
  90. data/spec/fixtures/acceptance/modules/test/functions/add.pp +0 -9
  91. data/spec/fixtures/acceptance/modules/test/lib/puppet/functions/4x_function.rb +0 -5
  92. data/spec/fixtures/acceptance/modules/test/lib/puppet/parser/functions/function3x.rb +0 -2
  93. data/spec/fixtures/acceptance/modules/test/lib/puppet/provider/server/linux.rb +0 -9
  94. data/spec/fixtures/acceptance/modules/test/lib/puppet/type/database.rb +0 -15
  95. data/spec/fixtures/acceptance/modules/test/manifests/init.pp +0 -27
  96. data/spec/fixtures/acceptance/modules/test/manifests/triple_nested_classes.pp +0 -27
  97. data/spec/fixtures/acceptance/modules/test/metadata.json +0 -6
  98. data/spec/fixtures/unit/json/output.json +0 -660
  99. data/spec/fixtures/unit/json/output_with_plan.json +0 -697
  100. data/spec/fixtures/unit/json/output_without_puppet_function.json +0 -480
  101. data/spec/fixtures/unit/markdown/output.md +0 -444
  102. data/spec/fixtures/unit/markdown/output_with_plan.md +0 -478
  103. data/spec/spec_helper.rb +0 -45
  104. data/spec/spec_helper_acceptance.rb +0 -28
  105. data/spec/unit/puppet-strings/json_spec.rb +0 -229
  106. data/spec/unit/puppet-strings/markdown/base_spec.rb +0 -146
  107. data/spec/unit/puppet-strings/markdown_spec.rb +0 -283
  108. data/spec/unit/puppet-strings/yard/code_objects/task_spec.rb +0 -92
  109. data/spec/unit/puppet-strings/yard/handlers/json/task_handler_spec.rb +0 -124
  110. data/spec/unit/puppet-strings/yard/handlers/puppet/class_handler_spec.rb +0 -217
  111. data/spec/unit/puppet-strings/yard/handlers/puppet/defined_type_handler_spec.rb +0 -231
  112. data/spec/unit/puppet-strings/yard/handlers/puppet/function_handler_spec.rb +0 -315
  113. data/spec/unit/puppet-strings/yard/handlers/ruby/function_handler_spec.rb +0 -729
  114. data/spec/unit/puppet-strings/yard/handlers/ruby/provider_handler_spec.rb +0 -139
  115. data/spec/unit/puppet-strings/yard/handlers/ruby/rsapi_handler_spec.rb +0 -214
  116. data/spec/unit/puppet-strings/yard/handlers/ruby/type_handler_spec.rb +0 -269
  117. data/spec/unit/puppet-strings/yard/parsers/json/parser_spec.rb +0 -70
  118. data/spec/unit/puppet-strings/yard/parsers/json/task_statement_spec.rb +0 -56
  119. data/spec/unit/puppet-strings/yard/parsers/puppet/parser_spec.rb +0 -209
  120. data/spec/unit/puppet-strings/yard/util_spec.rb +0 -48
@@ -41,41 +41,48 @@ class PuppetStrings::Yard::Parsers::Puppet::Parser < YARD::Parser::Base
41
41
  end
42
42
 
43
43
  private
44
- def transform_Program(o)
44
+
45
+ def transform_Program(o) # rubocop:disable Naming/UncommunicativeMethodParamName
45
46
  # Cache the lines of the source text; we'll use this to locate comments
46
47
  @lines = o.source_text.lines.to_a
47
48
  o.definitions.map { |d| @visitor.visit(d) }
48
49
  end
49
50
 
50
- def transform_Factory(o)
51
+ def transform_Factory(o) # rubocop:disable Naming/UncommunicativeMethodParamName
51
52
  @visitor.visit(o.current)
52
53
  end
53
54
 
54
- def transform_HostClassDefinition(o)
55
+ def transform_HostClassDefinition(o) # rubocop:disable Naming/UncommunicativeMethodParamName
55
56
  statement = PuppetStrings::Yard::Parsers::Puppet::ClassStatement.new(o, @file)
56
57
  statement.extract_docstring(@lines)
57
58
  statement
58
59
  end
59
60
 
60
- def transform_ResourceTypeDefinition(o)
61
+ def transform_ResourceTypeDefinition(o) # rubocop:disable Naming/UncommunicativeMethodParamName
61
62
  statement = PuppetStrings::Yard::Parsers::Puppet::DefinedTypeStatement.new(o, @file)
62
63
  statement.extract_docstring(@lines)
63
64
  statement
64
65
  end
65
66
 
66
- def transform_FunctionDefinition(o)
67
+ def transform_FunctionDefinition(o) # rubocop:disable Naming/UncommunicativeMethodParamName
67
68
  statement = PuppetStrings::Yard::Parsers::Puppet::FunctionStatement.new(o, @file)
68
69
  statement.extract_docstring(@lines)
69
70
  statement
70
71
  end
71
72
 
72
- def transform_PlanDefinition(o)
73
+ def transform_PlanDefinition(o) # rubocop:disable Naming/UncommunicativeMethodParamName
73
74
  statement = PuppetStrings::Yard::Parsers::Puppet::PlanStatement.new(o, @file)
74
75
  statement.extract_docstring(@lines)
75
76
  statement
76
77
  end
77
78
 
78
- def transform_Object(o)
79
+ def transform_TypeAlias(o) # rubocop:disable Naming/UncommunicativeMethodParamName
80
+ statement = PuppetStrings::Yard::Parsers::Puppet::DataTypeAliasStatement.new(o, @file)
81
+ statement.extract_docstring(@lines)
82
+ statement
83
+ end
84
+
85
+ def transform_Object(o) # rubocop:disable Naming/UncommunicativeMethodParamName
79
86
  # Ignore anything else (will be compacted out of the resulting array)
80
87
  end
81
88
  end
@@ -165,4 +165,29 @@ module PuppetStrings::Yard::Parsers::Puppet
165
165
  end
166
166
  end
167
167
 
168
+ # Implements the Puppet data type alias statement.
169
+ class DataTypeAliasStatement < Statement
170
+ attr_reader :name
171
+ attr_reader :alias_of
172
+
173
+ # Initializes the Puppet data type alias statement.
174
+ # @param [Puppet::Pops::Model::TypeAlias] object The model object for the type statement.
175
+ # @param [String] file The file containing the statement.
176
+ def initialize(object, file)
177
+ super(object, file)
178
+
179
+ type_expr = object.type_expr
180
+ case type_expr
181
+ when Puppet::Pops::Model::AccessExpression
182
+ # TODO: I don't like rebuilding the source from the AST, but AccessExpressions don't expose the original source
183
+ @alias_of = ::Puppet::Pops::Adapters::SourcePosAdapter.adapt(type_expr.left_expr).extract_text + '['
184
+ @alias_of << type_expr.keys.map { |key| ::Puppet::Pops::Adapters::SourcePosAdapter.adapt(key).extract_text }.join(', ')
185
+ @alias_of << ']'
186
+ else
187
+ adapter = ::Puppet::Pops::Adapters::SourcePosAdapter.adapt(type_expr)
188
+ @alias_of = adapter.extract_text
189
+ end
190
+ @name = object.name
191
+ end
192
+ end
168
193
  end
@@ -1,7 +1,9 @@
1
1
  # The module for custom YARD tags.
2
2
  module PuppetStrings::Yard::Tags
3
+ require 'puppet-strings/yard/tags/factory'
3
4
  require 'puppet-strings/yard/tags/parameter_directive'
4
5
  require 'puppet-strings/yard/tags/property_directive'
5
6
  require 'puppet-strings/yard/tags/overload_tag'
6
7
  require 'puppet-strings/yard/tags/summary_tag'
8
+ require 'puppet-strings/yard/tags/enum_tag'
7
9
  end
@@ -0,0 +1,12 @@
1
+ require 'yard/tags/option_tag'
2
+
3
+ # Implements an enum tag for describing enumerated value data types
4
+
5
+ class PuppetStrings::Yard::Tags::EnumTag < YARD::Tags::OptionTag
6
+ # Registers the tag with YARD.
7
+ # @return [void]
8
+ def self.register!
9
+ YARD::Tags::Library.define_tag("puppet.enum", :enum, :with_enums)
10
+ YARD::Tags::Library.visible_tags.place(:enum).after(:option)
11
+ end
12
+ end
@@ -0,0 +1,16 @@
1
+ require 'yard/tags/default_factory'
2
+ require 'puppet-strings/yard/tags/enum_tag'
3
+
4
+ class PuppetStrings::Yard::Tags::Factory < YARD::Tags::DefaultFactory
5
+
6
+ # Parses tag text and creates a new enum tag type. Modeled after
7
+ # the parse_tag_with_options method in YARD::Tags::DefaultFactory.
8
+ #
9
+ # @param tag_name the name of the tag to parse
10
+ # @param [String] text the raw tag text
11
+ # @return [Tag] a tag object with the tag_name, name, and nested Tag as type
12
+ def parse_tag_with_enums(tag_name, text)
13
+ name, text = *extract_name_from_text(text)
14
+ PuppetStrings::Yard::Tags::EnumTag.new(tag_name, name, parse_tag_with_name(tag_name, text))
15
+ end
16
+ end
@@ -99,8 +99,8 @@ class PuppetStrings::Yard::Tags::OverloadTag < YARD::Tags::Tag
99
99
  hash[:tag_name] = tag_name
100
100
  hash[:text] = text if text
101
101
  hash[:signature] = signature
102
- hash[:docstring] = PuppetStrings::Json.docstring_to_hash(docstring) if !docstring.blank?
103
- defaults = Hash[*parameters.select{ |p| !p[1].nil? }.flatten]
102
+ hash[:docstring] = PuppetStrings::Yard::Util.docstring_to_hash(docstring) if !docstring.blank?
103
+ defaults = Hash[*parameters.reject{ |p| p[1].nil? }.flatten]
104
104
  hash[:defaults] = defaults unless defaults.empty?
105
105
  hash[:types] = types if types
106
106
  hash[:name] = name if name
@@ -0,0 +1,10 @@
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(false)) %>
6
+ <% if item.type == :puppet_data_type_alias %><small>Alias</small><% end %>
7
+ </div>
8
+ </li>
9
+ <% even = !even %>
10
+ <% end %>
@@ -7,6 +7,15 @@ def generate_puppet_class_list
7
7
  generate_list_contents
8
8
  end
9
9
 
10
+ # Generates the searchable Puppet data type list.
11
+ # @return [void]
12
+ def generate_puppet_data_type_list
13
+ @items = Registry.all(:puppet_data_type, :puppet_data_type_alias).sort_by {|dt| dt.name.to_s }
14
+ @list_title = 'Data Type List'
15
+ @list_type = 'puppet_data_type'
16
+ generate_list_contents
17
+ end
18
+
10
19
  # Generates the searchable Puppet defined type list.
11
20
  # @return [void]
12
21
  def generate_puppet_defined_type_list
@@ -23,6 +23,8 @@
23
23
  <small>(Resource type: <%= obj.type_name %>)</small>
24
24
  <% elsif obj.type == :puppet_function %>
25
25
  <small>(<%= obj.function_type %>)</small>
26
+ <% elsif obj.type == :puppet_data_type_alias %>
27
+ <small>(Alias)</small>
26
28
  <% end %>
27
29
  </li>
28
30
  <% 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, :tasks, :plans, :files, :objects]]]
7
+ sections :layout, [:index, [:listing, [:classes, :data_types, :defined_types, :types, :providers, :functions, :tasks, :plans, :files, :objects]]]
8
8
  else
9
9
  super
10
10
  end
@@ -30,6 +30,10 @@ def layout
30
30
  @nav_url = url_for_list('puppet_class')
31
31
  @page_title = "Puppet Class: #{object.name}"
32
32
  @path = object.path
33
+ when PuppetStrings::Yard::CodeObjects::DataType, PuppetStrings::Yard::CodeObjects::DataTypeAlias
34
+ @nav_url = url_for_list('puppet_data_type')
35
+ @page_title = "Data Type: #{object.name}"
36
+ @path = object.path
33
37
  when PuppetStrings::Yard::CodeObjects::DefinedType
34
38
  @nav_url = url_for_list('puppet_defined_type')
35
39
  @page_title = "Defined Type: #{object.name}"
@@ -76,6 +80,11 @@ def create_menu_lists
76
80
  title: 'Puppet Classes',
77
81
  search_title: 'Puppet Classes'
78
82
  },
83
+ {
84
+ type: 'puppet_data_type',
85
+ title: 'Data Types',
86
+ search_title: 'Data Types',
87
+ },
79
88
  {
80
89
  type: 'puppet_defined_type',
81
90
  title: 'Defined Types',
@@ -155,6 +164,14 @@ def classes
155
164
  erb(:objects)
156
165
  end
157
166
 
167
+ # Renders the data types section.
168
+ # @return [String] Returns the rendered section.
169
+ def data_types
170
+ @title = 'Data Type Listing A-Z'
171
+ @objects_by_letter = objects_by_letter(:puppet_data_type, :puppet_data_type_alias)
172
+ erb(:objects)
173
+ end
174
+
158
175
  # Renders the defined types section.
159
176
  # @return [String] Returns the rendered section.
160
177
  def defined_types
@@ -0,0 +1,10 @@
1
+ <div class="box_info">
2
+ <dl>
3
+ <dt>Defined in:</dt>
4
+ <dd>
5
+ <%= object.file %><% if object.files.size > 1 %><span class="defines">,<br />
6
+ <%= object.files[1..-1].map {|f| f.first }.join(",<br /> ") %></div>
7
+ <% end %>
8
+ </dd>
9
+ </dl>
10
+ </div>
@@ -0,0 +1 @@
1
+ <h1>Puppet Data Type: <%= object.name %></h1>
@@ -0,0 +1,6 @@
1
+ <h2>Data Type Functions</h2>
2
+ <% method_listing.each_with_index do |meth, i| %>
3
+ <div id="<%= meth.name %>-instance_method"><h3><%= meth.name %></h3>
4
+ <%= yieldall :object => meth, :owner => object, :index => i %>
5
+ </div>
6
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <% object.tags(:note).each do |tag| %>
2
+ <div class="note notetag">
3
+ <strong>Note:</strong>
4
+ <%= htmlify_line tag.text %>
5
+ </div>
6
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <h2>Overview</h2>
2
+ <div class="docstring">
3
+ <div class="discussion">
4
+ <%= htmlify(object.docstring) %>
5
+ </div>
6
+ </div>
@@ -0,0 +1,13 @@
1
+ # Initializes the template.
2
+ # @return [void]
3
+ def init
4
+ sections :header, :box_info, :summary, :overview, :note, :todo, T('tags'), :method_details_list, [T('method_details')], :source
5
+ end
6
+
7
+ def method_listing
8
+ sort_listing(object.functions)
9
+ end
10
+
11
+ def sort_listing(list)
12
+ list.sort_by {|o| [o.scope.to_s, o.name.to_s.downcase] }
13
+ end
@@ -0,0 +1,12 @@
1
+ <div class="method_details_list">
2
+ <table class="source_code">
3
+ <tr>
4
+ <td>
5
+ <pre class="lines"><%= "\n\n\n" %><%= h format_lines(object) %></pre>
6
+ </td>
7
+ <td>
8
+ <pre class="code"><span class="info file"># File '<%= h object.file %>'<% if object.line %>, line <%= object.line %><% end %></span><%= "\n\n" %><%= html_syntax_highlight object.source %></pre>
9
+ </td>
10
+ </tr>
11
+ </table>
12
+ </div>
@@ -0,0 +1,4 @@
1
+ <% if object.docstring.has_tag?(:summary) %>
2
+ <h2>Summary</h2>
3
+ <%= object.docstring.tag(:summary).text %>
4
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <% object.tags(:todo).each do |tag| %>
2
+ <div class="note todo">
3
+ <strong>TODO:</strong>
4
+ <%= htmlify_line tag.text %>
5
+ </div>
6
+ <% end %>
@@ -0,0 +1,10 @@
1
+ <% if @alias_of && !@alias_of.empty? %>
2
+ <div class="tags">
3
+ <p class="tag_title"><%= @tag_title %></p>
4
+ <div class="docstring">
5
+ <div class="discussion">
6
+ <pre class="code"><span class="info"><%= @alias_of %></span></pre>
7
+ </div>
8
+ </div>
9
+ </div>
10
+ <% end %>
@@ -0,0 +1,10 @@
1
+ <div class="box_info">
2
+ <dl>
3
+ <dt>Defined in:</dt>
4
+ <dd>
5
+ <%= object.file %><% if object.files.size > 1 %><span class="defines">,<br />
6
+ <%= object.files[1..-1].map {|f| f.first }.join(",<br /> ") %></div>
7
+ <% end %>
8
+ </dd>
9
+ </dl>
10
+ </div>
@@ -0,0 +1 @@
1
+ <h1>Puppet Data Type Alias: <%= object.name %></h1>
@@ -0,0 +1,6 @@
1
+ <% object.tags(:note).each do |tag| %>
2
+ <div class="note notetag">
3
+ <strong>Note:</strong>
4
+ <%= htmlify_line tag.text %>
5
+ </div>
6
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <h2>Overview</h2>
2
+ <div class="docstring">
3
+ <div class="discussion">
4
+ <%= htmlify(object.docstring) %>
5
+ </div>
6
+ </div>
@@ -0,0 +1,17 @@
1
+ # Initializes the template.
2
+ # @return [void]
3
+ def init
4
+ sections :header, :box_info, :summary, :overview, :alias_of, :note, :todo, T('tags'), :source
5
+ end
6
+
7
+ # Renders the alias_of section.
8
+ # @return [String] Returns the rendered section.
9
+ def alias_of
10
+ # Properties are the same thing as parameters (from the documentation standpoint),
11
+ # so reuse the same template but with a different title and data source.
12
+ #@parameters = object.properties || []
13
+ #@parameters.sort_by! { |p| p.name }
14
+ @tag_title = 'Alias of'
15
+ @alias_of = object.alias_of
16
+ erb(:alias_of)
17
+ end
@@ -0,0 +1,12 @@
1
+ <div class="method_details_list">
2
+ <table class="source_code">
3
+ <tr>
4
+ <td>
5
+ <pre class="lines"><%= "\n\n\n" %><%= h format_lines(object) %></pre>
6
+ </td>
7
+ <td>
8
+ <pre class="code"><span class="info file"># File '<%= h object.file %>'<% if object.line %>, line <%= object.line %><% end %></span><%= "\n\n" %><%= html_syntax_highlight object.source %></pre>
9
+ </td>
10
+ </tr>
11
+ </table>
12
+ </div>
@@ -0,0 +1,4 @@
1
+ <% if object.docstring.has_tag?(:summary) %>
2
+ <h2>Summary</h2>
3
+ <%= object.docstring.tag(:summary).text %>
4
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <% object.tags(:todo).each do |tag| %>
2
+ <div class="note todo">
3
+ <strong>TODO:</strong>
4
+ <%= htmlify_line tag.text %>
5
+ </div>
6
+ <% end %>
@@ -16,7 +16,9 @@ end
16
16
  def properties
17
17
  # Properties are the same thing as parameters (from the documentation standpoint),
18
18
  # so reuse the same template but with a different title and data source.
19
- @parameters = object.properties || []
19
+ #
20
+ # "checks" such as "creates" and "onlyif" are another type of property
21
+ @parameters = (object.properties || []) + (object.checks || [])
20
22
  @parameters.sort_by! { |p| p.name }
21
23
  @tag_title = 'Properties'
22
24
  erb(:parameters)
@@ -0,0 +1,17 @@
1
+ <% if object.has_tag?(:enum) %>
2
+ <% object.parameters.each do |param, default| %>
3
+ <% tags = object.tags(:enum).select {|x| x.name.to_s == param.to_s.sub(/^\*+|:$/, '') } %>
4
+ <% next if tags.empty? %>
5
+ <p class="tag_title">Enum Options (<tt><%= param %></tt>):</p>
6
+ <ul class="option">
7
+ <% for tag in tags %>
8
+ <li>
9
+ <span class="name"><%= tag.pair.name %></span>
10
+ <% if tag.pair.text && tag.pair.text =~ /\S/ %>
11
+ &mdash; <%= htmlify_line(tag.pair.text) %>
12
+ <% end %>
13
+ </li>
14
+ <% end %>
15
+ </ul>
16
+ <% end %>
17
+ <% end %>
@@ -4,6 +4,7 @@ def param
4
4
  tag(:param) if
5
5
  object.type == :method ||
6
6
  object.type == :puppet_class ||
7
+ object.type == :puppet_data_type ||
7
8
  object.type == :puppet_defined_type ||
8
9
  object.type == :puppet_function ||
9
10
  object.type == :puppet_task ||
@@ -15,3 +16,9 @@ end
15
16
  def overload
16
17
  erb(if object.type == :puppet_function then :puppet_overload else :overload end)
17
18
  end
19
+
20
+ # Renders the enum section.
21
+ # @return [String] Returns the rendered section.
22
+ def enum
23
+ erb(:enum)
24
+ end
@@ -28,4 +28,52 @@ module PuppetStrings::Yard::Util
28
28
  end
29
29
  data
30
30
  end
31
+
32
+ # Converts a list of tags into an array of hashes.
33
+ # @param [Array] tags List of tags to be converted into an array of hashes.
34
+ # @return [Array] Returns an array of tag hashes.
35
+ def self.tags_to_hashes(tags)
36
+ # Skip over the API tags that are public
37
+ tags.select { |t| (t.tag_name != 'api' || t.text != 'public') }.map do |t|
38
+ next t.to_hash if t.respond_to?(:to_hash)
39
+
40
+ tag = { tag_name: t.tag_name }
41
+ # grab nested information for @option and @enum tags
42
+ if tag[:tag_name] == 'option' || tag[:tag_name] == 'enum'
43
+ tag[:opt_name] = t.pair.name
44
+ tag[:opt_text] = t.pair.text
45
+ tag[:opt_types] = t.pair.types if t.pair.types
46
+ tag[:parent] = t.name
47
+ end
48
+ tag[:text] = t.text if t.text
49
+ tag[:types] = t.types if t.types
50
+ tag[:name] = t.name if t.name
51
+ tag
52
+ end
53
+ end
54
+
55
+ # Converts a YARD::Docstring (or String) to a docstring hash for JSON output.
56
+ # @param [YARD::Docstring, String] docstring The docstring to convert to a hash.
57
+ # @param [Array] select_tags List of tags to select. Other tags will be filtered out.
58
+ # @return [Hash] Returns a hash representation of the given docstring.
59
+ def self.docstring_to_hash(docstring, select_tags=nil)
60
+ hash = {}
61
+ hash[:text] = docstring
62
+
63
+ if docstring.is_a? YARD::Docstring
64
+ tags = tags_to_hashes(docstring.tags.select { |t| select_tags.nil? || select_tags.include?(t.tag_name.to_sym) })
65
+
66
+ unless tags.empty?
67
+ hash[:tags] = tags
68
+ # .sort_by do |tag|
69
+ # sort_key = tag[:tag_name].dup
70
+ # sort_key << "-#{tag[:name]}" if tag[:name]
71
+ # sort_key << "-#{tag[:opt_name]}" if tag[:opt_name]
72
+ # sort_key
73
+ # end
74
+ end
75
+ end
76
+
77
+ hash
78
+ end
31
79
  end