openvox-strings 5.0.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 (175) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +407 -0
  3. data/LICENSE +177 -0
  4. data/README.md +116 -0
  5. data/lib/openvox-strings/describe.rb +75 -0
  6. data/lib/openvox-strings/json.rb +33 -0
  7. data/lib/openvox-strings/markdown/base.rb +236 -0
  8. data/lib/openvox-strings/markdown/data_type.rb +39 -0
  9. data/lib/openvox-strings/markdown/defined_type.rb +20 -0
  10. data/lib/openvox-strings/markdown/function.rb +59 -0
  11. data/lib/openvox-strings/markdown/helpers.rb +21 -0
  12. data/lib/openvox-strings/markdown/puppet_class.rb +20 -0
  13. data/lib/openvox-strings/markdown/puppet_plan.rb +20 -0
  14. data/lib/openvox-strings/markdown/puppet_task.rb +29 -0
  15. data/lib/openvox-strings/markdown/resource_type.rb +56 -0
  16. data/lib/openvox-strings/markdown/templates/classes_and_defines.erb +94 -0
  17. data/lib/openvox-strings/markdown/templates/data_type.erb +101 -0
  18. data/lib/openvox-strings/markdown/templates/data_type_function.erb +67 -0
  19. data/lib/openvox-strings/markdown/templates/function.erb +106 -0
  20. data/lib/openvox-strings/markdown/templates/puppet_task.erb +28 -0
  21. data/lib/openvox-strings/markdown/templates/resource_type.erb +156 -0
  22. data/lib/openvox-strings/markdown/templates/table_of_contents.erb +26 -0
  23. data/lib/openvox-strings/markdown.rb +81 -0
  24. data/lib/openvox-strings/monkey_patches/display_object_command.rb +16 -0
  25. data/lib/openvox-strings/tasks/generate.rb +54 -0
  26. data/lib/openvox-strings/tasks/gh_pages.rb +72 -0
  27. data/lib/openvox-strings/tasks/validate.rb +42 -0
  28. data/lib/openvox-strings/tasks.rb +14 -0
  29. data/lib/openvox-strings/version.rb +5 -0
  30. data/lib/openvox-strings/yard/code_objects/base.rb +16 -0
  31. data/lib/openvox-strings/yard/code_objects/class.rb +60 -0
  32. data/lib/openvox-strings/yard/code_objects/data_type.rb +102 -0
  33. data/lib/openvox-strings/yard/code_objects/data_type_alias.rb +60 -0
  34. data/lib/openvox-strings/yard/code_objects/defined_type.rb +59 -0
  35. data/lib/openvox-strings/yard/code_objects/function.rb +106 -0
  36. data/lib/openvox-strings/yard/code_objects/group.rb +33 -0
  37. data/lib/openvox-strings/yard/code_objects/plan.rb +59 -0
  38. data/lib/openvox-strings/yard/code_objects/provider.rb +98 -0
  39. data/lib/openvox-strings/yard/code_objects/task.rb +69 -0
  40. data/lib/openvox-strings/yard/code_objects/type.rb +196 -0
  41. data/lib/openvox-strings/yard/code_objects.rb +14 -0
  42. data/lib/openvox-strings/yard/handlers/helpers.rb +10 -0
  43. data/lib/openvox-strings/yard/handlers/json/base.rb +8 -0
  44. data/lib/openvox-strings/yard/handlers/json/task_handler.rb +34 -0
  45. data/lib/openvox-strings/yard/handlers/puppet/base.rb +52 -0
  46. data/lib/openvox-strings/yard/handlers/puppet/class_handler.rb +29 -0
  47. data/lib/openvox-strings/yard/handlers/puppet/data_type_alias_handler.rb +26 -0
  48. data/lib/openvox-strings/yard/handlers/puppet/defined_type_handler.rb +29 -0
  49. data/lib/openvox-strings/yard/handlers/puppet/function_handler.rb +54 -0
  50. data/lib/openvox-strings/yard/handlers/puppet/plan_handler.rb +29 -0
  51. data/lib/openvox-strings/yard/handlers/ruby/base.rb +55 -0
  52. data/lib/openvox-strings/yard/handlers/ruby/data_type_handler.rb +411 -0
  53. data/lib/openvox-strings/yard/handlers/ruby/function_handler.rb +386 -0
  54. data/lib/openvox-strings/yard/handlers/ruby/provider_handler.rb +127 -0
  55. data/lib/openvox-strings/yard/handlers/ruby/rsapi_handler.rb +157 -0
  56. data/lib/openvox-strings/yard/handlers/ruby/type_base.rb +146 -0
  57. data/lib/openvox-strings/yard/handlers/ruby/type_extras_handler.rb +65 -0
  58. data/lib/openvox-strings/yard/handlers/ruby/type_handler.rb +105 -0
  59. data/lib/openvox-strings/yard/handlers.rb +28 -0
  60. data/lib/openvox-strings/yard/parsers/json/parser.rb +38 -0
  61. data/lib/openvox-strings/yard/parsers/json/task_statement.rb +37 -0
  62. data/lib/openvox-strings/yard/parsers/puppet/parser.rb +89 -0
  63. data/lib/openvox-strings/yard/parsers/puppet/statement.rb +182 -0
  64. data/lib/openvox-strings/yard/parsers.rb +14 -0
  65. data/lib/openvox-strings/yard/tags/enum_tag.rb +13 -0
  66. data/lib/openvox-strings/yard/tags/factory.rb +18 -0
  67. data/lib/openvox-strings/yard/tags/overload_tag.rb +112 -0
  68. data/lib/openvox-strings/yard/tags/parameter_directive.rb +25 -0
  69. data/lib/openvox-strings/yard/tags/property_directive.rb +25 -0
  70. data/lib/openvox-strings/yard/tags/summary_tag.rb +10 -0
  71. data/lib/openvox-strings/yard/tags.rb +11 -0
  72. data/lib/openvox-strings/yard/templates/default/fulldoc/html/css/common.css +8 -0
  73. data/lib/openvox-strings/yard/templates/default/fulldoc/html/full_list_puppet_class.erb +9 -0
  74. data/lib/openvox-strings/yard/templates/default/fulldoc/html/full_list_puppet_data_type.erb +10 -0
  75. data/lib/openvox-strings/yard/templates/default/fulldoc/html/full_list_puppet_defined_type.erb +9 -0
  76. data/lib/openvox-strings/yard/templates/default/fulldoc/html/full_list_puppet_function.erb +10 -0
  77. data/lib/openvox-strings/yard/templates/default/fulldoc/html/full_list_puppet_plan.erb +9 -0
  78. data/lib/openvox-strings/yard/templates/default/fulldoc/html/full_list_puppet_provider.erb +10 -0
  79. data/lib/openvox-strings/yard/templates/default/fulldoc/html/full_list_puppet_task.erb +9 -0
  80. data/lib/openvox-strings/yard/templates/default/fulldoc/html/full_list_puppet_type.erb +9 -0
  81. data/lib/openvox-strings/yard/templates/default/fulldoc/html/setup.rb +93 -0
  82. data/lib/openvox-strings/yard/templates/default/layout/html/footer.erb +3 -0
  83. data/lib/openvox-strings/yard/templates/default/layout/html/objects.erb +37 -0
  84. data/lib/openvox-strings/yard/templates/default/layout/html/setup.rb +231 -0
  85. data/lib/openvox-strings/yard/templates/default/puppet_class/html/box_info.erb +26 -0
  86. data/lib/openvox-strings/yard/templates/default/puppet_class/html/deprecated.erb +6 -0
  87. data/lib/openvox-strings/yard/templates/default/puppet_class/html/header.erb +1 -0
  88. data/lib/openvox-strings/yard/templates/default/puppet_class/html/note.erb +6 -0
  89. data/lib/openvox-strings/yard/templates/default/puppet_class/html/overview.erb +6 -0
  90. data/lib/openvox-strings/yard/templates/default/puppet_class/html/setup.rb +16 -0
  91. data/lib/openvox-strings/yard/templates/default/puppet_class/html/source.erb +12 -0
  92. data/lib/openvox-strings/yard/templates/default/puppet_class/html/summary.erb +4 -0
  93. data/lib/openvox-strings/yard/templates/default/puppet_class/html/todo.erb +6 -0
  94. data/lib/openvox-strings/yard/templates/default/puppet_data_type/html/box_info.erb +10 -0
  95. data/lib/openvox-strings/yard/templates/default/puppet_data_type/html/deprecated.erb +6 -0
  96. data/lib/openvox-strings/yard/templates/default/puppet_data_type/html/header.erb +1 -0
  97. data/lib/openvox-strings/yard/templates/default/puppet_data_type/html/method_details_list.erb +6 -0
  98. data/lib/openvox-strings/yard/templates/default/puppet_data_type/html/note.erb +6 -0
  99. data/lib/openvox-strings/yard/templates/default/puppet_data_type/html/overview.erb +6 -0
  100. data/lib/openvox-strings/yard/templates/default/puppet_data_type/html/setup.rb +15 -0
  101. data/lib/openvox-strings/yard/templates/default/puppet_data_type/html/source.erb +12 -0
  102. data/lib/openvox-strings/yard/templates/default/puppet_data_type/html/summary.erb +4 -0
  103. data/lib/openvox-strings/yard/templates/default/puppet_data_type/html/todo.erb +6 -0
  104. data/lib/openvox-strings/yard/templates/default/puppet_data_type_alias/html/alias_of.erb +10 -0
  105. data/lib/openvox-strings/yard/templates/default/puppet_data_type_alias/html/box_info.erb +10 -0
  106. data/lib/openvox-strings/yard/templates/default/puppet_data_type_alias/html/deprecated.erb +6 -0
  107. data/lib/openvox-strings/yard/templates/default/puppet_data_type_alias/html/header.erb +1 -0
  108. data/lib/openvox-strings/yard/templates/default/puppet_data_type_alias/html/note.erb +6 -0
  109. data/lib/openvox-strings/yard/templates/default/puppet_data_type_alias/html/overview.erb +6 -0
  110. data/lib/openvox-strings/yard/templates/default/puppet_data_type_alias/html/setup.rb +19 -0
  111. data/lib/openvox-strings/yard/templates/default/puppet_data_type_alias/html/source.erb +12 -0
  112. data/lib/openvox-strings/yard/templates/default/puppet_data_type_alias/html/summary.erb +4 -0
  113. data/lib/openvox-strings/yard/templates/default/puppet_data_type_alias/html/todo.erb +6 -0
  114. data/lib/openvox-strings/yard/templates/default/puppet_defined_type/html/box_info.erb +10 -0
  115. data/lib/openvox-strings/yard/templates/default/puppet_defined_type/html/deprecated.erb +6 -0
  116. data/lib/openvox-strings/yard/templates/default/puppet_defined_type/html/header.erb +1 -0
  117. data/lib/openvox-strings/yard/templates/default/puppet_defined_type/html/note.erb +6 -0
  118. data/lib/openvox-strings/yard/templates/default/puppet_defined_type/html/overview.erb +6 -0
  119. data/lib/openvox-strings/yard/templates/default/puppet_defined_type/html/setup.rb +7 -0
  120. data/lib/openvox-strings/yard/templates/default/puppet_defined_type/html/source.erb +12 -0
  121. data/lib/openvox-strings/yard/templates/default/puppet_defined_type/html/summary.erb +4 -0
  122. data/lib/openvox-strings/yard/templates/default/puppet_defined_type/html/todo.erb +6 -0
  123. data/lib/openvox-strings/yard/templates/default/puppet_function/html/box_info.erb +14 -0
  124. data/lib/openvox-strings/yard/templates/default/puppet_function/html/deprecated.erb +6 -0
  125. data/lib/openvox-strings/yard/templates/default/puppet_function/html/header.erb +1 -0
  126. data/lib/openvox-strings/yard/templates/default/puppet_function/html/note.erb +6 -0
  127. data/lib/openvox-strings/yard/templates/default/puppet_function/html/overview.erb +18 -0
  128. data/lib/openvox-strings/yard/templates/default/puppet_function/html/setup.rb +7 -0
  129. data/lib/openvox-strings/yard/templates/default/puppet_function/html/source.erb +12 -0
  130. data/lib/openvox-strings/yard/templates/default/puppet_function/html/summary.erb +4 -0
  131. data/lib/openvox-strings/yard/templates/default/puppet_function/html/todo.erb +6 -0
  132. data/lib/openvox-strings/yard/templates/default/puppet_plan/html/box_info.erb +10 -0
  133. data/lib/openvox-strings/yard/templates/default/puppet_plan/html/deprecated.erb +6 -0
  134. data/lib/openvox-strings/yard/templates/default/puppet_plan/html/header.erb +1 -0
  135. data/lib/openvox-strings/yard/templates/default/puppet_plan/html/note.erb +6 -0
  136. data/lib/openvox-strings/yard/templates/default/puppet_plan/html/overview.erb +6 -0
  137. data/lib/openvox-strings/yard/templates/default/puppet_plan/html/setup.rb +13 -0
  138. data/lib/openvox-strings/yard/templates/default/puppet_plan/html/source.erb +12 -0
  139. data/lib/openvox-strings/yard/templates/default/puppet_plan/html/summary.erb +4 -0
  140. data/lib/openvox-strings/yard/templates/default/puppet_plan/html/todo.erb +6 -0
  141. data/lib/openvox-strings/yard/templates/default/puppet_provider/html/box_info.erb +14 -0
  142. data/lib/openvox-strings/yard/templates/default/puppet_provider/html/collection.erb +17 -0
  143. data/lib/openvox-strings/yard/templates/default/puppet_provider/html/features.erb +12 -0
  144. data/lib/openvox-strings/yard/templates/default/puppet_provider/html/header.erb +1 -0
  145. data/lib/openvox-strings/yard/templates/default/puppet_provider/html/overview.erb +6 -0
  146. data/lib/openvox-strings/yard/templates/default/puppet_provider/html/setup.rb +31 -0
  147. data/lib/openvox-strings/yard/templates/default/puppet_provider/html/summary.erb +4 -0
  148. data/lib/openvox-strings/yard/templates/default/puppet_task/html/box_info.erb +9 -0
  149. data/lib/openvox-strings/yard/templates/default/puppet_task/html/header.erb +1 -0
  150. data/lib/openvox-strings/yard/templates/default/puppet_task/html/input.erb +5 -0
  151. data/lib/openvox-strings/yard/templates/default/puppet_task/html/overview.erb +6 -0
  152. data/lib/openvox-strings/yard/templates/default/puppet_task/html/parameters.erb +16 -0
  153. data/lib/openvox-strings/yard/templates/default/puppet_task/html/setup.rb +24 -0
  154. data/lib/openvox-strings/yard/templates/default/puppet_task/html/supports_noop.erb +3 -0
  155. data/lib/openvox-strings/yard/templates/default/puppet_type/html/box_info.erb +20 -0
  156. data/lib/openvox-strings/yard/templates/default/puppet_type/html/deprecated.erb +6 -0
  157. data/lib/openvox-strings/yard/templates/default/puppet_type/html/features.erb +13 -0
  158. data/lib/openvox-strings/yard/templates/default/puppet_type/html/header.erb +1 -0
  159. data/lib/openvox-strings/yard/templates/default/puppet_type/html/note.erb +6 -0
  160. data/lib/openvox-strings/yard/templates/default/puppet_type/html/overview.erb +6 -0
  161. data/lib/openvox-strings/yard/templates/default/puppet_type/html/parameters.erb +35 -0
  162. data/lib/openvox-strings/yard/templates/default/puppet_type/html/setup.rb +36 -0
  163. data/lib/openvox-strings/yard/templates/default/puppet_type/html/summary.erb +4 -0
  164. data/lib/openvox-strings/yard/templates/default/puppet_type/html/todo.erb +6 -0
  165. data/lib/openvox-strings/yard/templates/default/tags/html/enum.erb +17 -0
  166. data/lib/openvox-strings/yard/templates/default/tags/html/puppet_overload.erb +12 -0
  167. data/lib/openvox-strings/yard/templates/default/tags/setup.rb +20 -0
  168. data/lib/openvox-strings/yard/util.rb +87 -0
  169. data/lib/openvox-strings/yard.rb +132 -0
  170. data/lib/openvox-strings.rb +88 -0
  171. data/lib/puppet/application/strings.rb +7 -0
  172. data/lib/puppet/face/strings.rb +185 -0
  173. data/lib/puppet/feature/rgen.rb +5 -0
  174. data/lib/puppet/feature/yard.rb +5 -0
  175. metadata +263 -0
@@ -0,0 +1,132 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yard'
4
+
5
+ # Module for YARD related functionality.
6
+ module OpenvoxStrings::Yard
7
+ require 'openvox-strings/yard/code_objects'
8
+ require 'openvox-strings/yard/handlers'
9
+ require 'openvox-strings/yard/tags'
10
+ require 'openvox-strings/yard/parsers'
11
+ require 'openvox-strings/monkey_patches/display_object_command'
12
+
13
+ # Sets up YARD for use with openvox-strings.
14
+ # @return [void]
15
+ def self.setup!
16
+ # Register our factory
17
+ YARD::Tags::Library.default_factory = OpenvoxStrings::Yard::Tags::Factory
18
+
19
+ # Register the template path
20
+ YARD::Templates::Engine.register_template_path(File.join(File.dirname(__FILE__), 'yard', 'templates'))
21
+
22
+ # Register the Puppet parser
23
+ YARD::Parser::SourceParser.register_parser_type(:puppet, OpenvoxStrings::Yard::Parsers::Puppet::Parser, ['pp'])
24
+ YARD::Parser::SourceParser.register_parser_type(:json, OpenvoxStrings::Yard::Parsers::JSON::Parser, ['json'])
25
+
26
+ # Register our handlers
27
+ YARD::Handlers::Processor.register_handler_namespace(:puppet, OpenvoxStrings::Yard::Handlers::Puppet)
28
+ YARD::Handlers::Processor.register_handler_namespace(:puppet_ruby, OpenvoxStrings::Yard::Handlers::Ruby)
29
+ YARD::Handlers::Processor.register_handler_namespace(:json, OpenvoxStrings::Yard::Handlers::JSON)
30
+
31
+ # Register the tag directives
32
+ OpenvoxStrings::Yard::Tags::ParameterDirective.register!
33
+ OpenvoxStrings::Yard::Tags::PropertyDirective.register!
34
+
35
+ # Register the summary tag
36
+ OpenvoxStrings::Yard::Tags::SummaryTag.register!
37
+
38
+ # Register the enum tag
39
+ OpenvoxStrings::Yard::Tags::EnumTag.register!
40
+
41
+ # Ignore documentation on Puppet DSL calls
42
+ # This prevents the YARD DSL parser from emitting warnings for Puppet's Ruby DSL
43
+ YARD::Handlers::Ruby::DSLHandlerMethods::IGNORE_METHODS['create_function'] = true
44
+ YARD::Handlers::Ruby::DSLHandlerMethods::IGNORE_METHODS['newtype'] = true
45
+ end
46
+ end
47
+
48
+ # Monkey patch YARD::CLI::Yardoc#all_objects to return our custom code objects.
49
+ # @private
50
+ class YARD::CLI::Yardoc
51
+ def all_objects
52
+ YARD::Registry.all(
53
+ :root,
54
+ :module,
55
+ :class,
56
+ :puppet_class,
57
+ :puppet_data_type,
58
+ :puppet_data_type_alias,
59
+ :puppet_defined_type,
60
+ :puppet_type,
61
+ :puppet_provider,
62
+ :puppet_function,
63
+ :puppet_task,
64
+ :puppet_plan
65
+ )
66
+ end
67
+ end
68
+
69
+ # Monkey patch the stats object to return statistics for our objects.
70
+ # This is the recommended way to add custom stats.
71
+ # @private
72
+ class YARD::CLI::Stats
73
+ def stats_for_puppet_classes
74
+ output 'Puppet Classes', *type_statistics_all(:puppet_class)
75
+ end
76
+
77
+ def stats_for_puppet_data_types
78
+ output 'Puppet Data Types', *type_statistics_all(:puppet_data_type)
79
+ end
80
+
81
+ def stats_for_puppet_data_type_aliases
82
+ output 'Puppet Data Type Aliases', *type_statistics_all(:puppet_data_type_alias)
83
+ end
84
+
85
+ def stats_for_puppet_defined_types
86
+ output 'Puppet Defined Types', *type_statistics_all(:puppet_defined_type)
87
+ end
88
+
89
+ def stats_for_puppet_types
90
+ output 'Puppet Types', *type_statistics_all(:puppet_type)
91
+ end
92
+
93
+ def stats_for_puppet_providers
94
+ output 'Puppet Providers', *type_statistics_all(:puppet_provider)
95
+ end
96
+
97
+ def stats_for_puppet_functions
98
+ output 'Puppet Functions', *type_statistics_all(:puppet_function)
99
+ end
100
+
101
+ def stats_for_puppet_tasks
102
+ output 'Puppet Tasks', *type_statistics_all(:puppet_task)
103
+ end
104
+
105
+ def stats_for_puppet_plans
106
+ return unless OpenvoxStrings.puppet_5?
107
+
108
+ output 'Puppet Plans', *type_statistics_all(:puppet_plan)
109
+ end
110
+
111
+ def output(name, data, undoc = nil)
112
+ # Monkey patch output to accommodate our larger header widths
113
+ @total += data if data.is_a?(Integer) && undoc
114
+ @undocumented += undoc if undoc.is_a?(Integer)
115
+ data =
116
+ if undoc
117
+ "#{data} (#{undoc} undocumented)"
118
+ else
119
+ data.to_s
120
+ end
121
+ log.puts("#{name.ljust(25)} #{data}")
122
+ end
123
+
124
+ # This differs from the YARD implementation in that it considers
125
+ # a docstring without text but with tags to be undocumented.
126
+ def type_statistics_all(type)
127
+ objs = all_objects.select { |m| m.type == type }
128
+ undoc = objs.select { |m| m.docstring.all.empty? }
129
+ @undoc_list |= undoc if @undoc_list
130
+ [objs.size, undoc.size]
131
+ end
132
+ end
@@ -0,0 +1,88 @@
1
+ # frozen_string_literal: true
2
+
3
+ # The root module for Puppet Strings.
4
+ module OpenvoxStrings
5
+ # The glob patterns used to search for files to document.
6
+ DEFAULT_SEARCH_PATTERNS = ['manifests/**/*.pp', 'functions/**/*.pp', 'types/**/*.pp', 'lib/**/*.rb', 'tasks/*.json', 'plans/**/*.pp'].freeze
7
+
8
+ # Generates documentation.
9
+ # @param [Array<String>] search_patterns The search patterns (e.g. manifests/**/*.pp) to look for files.
10
+ # @param [Hash] options The options hash.
11
+ # @option options [Boolean] :debug Enable YARD debug output.
12
+ # @option options [Boolean] :backtrace Enable YARD backtraces.
13
+ # @option options [String] :markup The YARD markup format to use (defaults to 'markdown').
14
+ # @option options [String] :path Write the selected format to a file path
15
+ # @option options [Boolean] :markdown From the --format option, is the format Markdown?
16
+ # @option options [Boolean] :json Is the format JSON?
17
+ # @option options [Array<String>] :yard_args The arguments to pass to yard.
18
+ # @return [void]
19
+ def self.generate(search_patterns = DEFAULT_SEARCH_PATTERNS, options = {})
20
+ require 'openvox-strings/yard'
21
+ OpenvoxStrings::Yard.setup!
22
+
23
+ # Format the arguments to YARD
24
+ args = ['doc']
25
+ args << '--no-progress'
26
+ args << '--debug' if options[:debug]
27
+ args << '--backtrace' if options[:debug]
28
+ args << "-m#{options[:markup] || 'markdown'}"
29
+
30
+ file = nil
31
+ if options[:json] || options[:markdown]
32
+ file = if options[:json]
33
+ options[:path]
34
+ elsif options[:markdown]
35
+ options[:path] || 'REFERENCE.md'
36
+ end
37
+ # Disable output and prevent stats/progress when writing to STDOUT
38
+ args << '-n'
39
+ args << '-q' unless file
40
+ args << '--no-stats' unless file
41
+ end
42
+
43
+ yard_args = options[:yard_args]
44
+ args += yard_args if yard_args
45
+ args += search_patterns
46
+
47
+ # Run YARD
48
+ YARD::CLI::Yardoc.run(*args)
49
+
50
+ # If outputting JSON, render the output
51
+ render_json(file) if options[:json] && !options[:describe]
52
+
53
+ # If outputting Markdown, render the output
54
+ render_markdown(file) if options[:markdown]
55
+
56
+ return unless options[:describe]
57
+
58
+ render_describe(options[:describe_types], options[:describe_list], options[:providers], options[:list_providers])
59
+ end
60
+
61
+ def self.puppet_5?
62
+ Puppet::Util::Package.versioncmp(Puppet.version, '5.0.0') >= 0
63
+ end
64
+
65
+ def self.render_json(path)
66
+ require 'openvox-strings/json'
67
+ OpenvoxStrings::Json.render(path)
68
+ end
69
+
70
+ def self.render_markdown(path)
71
+ require 'openvox-strings/markdown'
72
+ OpenvoxStrings::Markdown.render(path)
73
+ end
74
+
75
+ def self.render_describe(describe_types, list = false, show_providers = true, list_providers = false)
76
+ require 'openvox-strings/describe'
77
+ OpenvoxStrings::Describe.render(describe_types, list, show_providers, list_providers)
78
+ end
79
+
80
+ # Runs the YARD documentation server.
81
+ # @param [Array<String>] args The arguments to YARD.
82
+ def self.run_server(*args)
83
+ require 'openvox-strings/yard'
84
+ OpenvoxStrings::Yard.setup!
85
+
86
+ YARD::CLI::Server.run(*args)
87
+ end
88
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'puppet/application/face_base'
4
+
5
+ # Implements the 'puppet strings' application.
6
+ class Puppet::Application::Strings < Puppet::Application::FaceBase
7
+ end
@@ -0,0 +1,185 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'puppet/face'
4
+
5
+ # Implements the 'puppet strings' interface.
6
+ Puppet::Face.define(:strings, '0.0.1') do # rubocop:disable Metrics/BlockLength
7
+ summary 'Generate Puppet module documentation with YARD.'
8
+
9
+ action(:generate) do
10
+ default
11
+
12
+ option '--format OUTPUT_FORMAT' do
13
+ summary 'Designate output format, JSON or markdown.'
14
+ end
15
+ option '--out PATH' do
16
+ summary 'Write selected format to PATH. If no path is designated, strings prints to STDOUT.'
17
+ end
18
+ option '--markup FORMAT' do
19
+ summary "The markup format to use for docstring text (defaults to 'markdown')."
20
+ end
21
+
22
+ summary 'Generate documentation from files.'
23
+ arguments '[[search_pattern] ...]'
24
+
25
+ when_invoked do |*args|
26
+ check_required_features
27
+ require 'openvox-strings'
28
+
29
+ OpenvoxStrings.generate(
30
+ args.count > 1 ? args[0..-2] : OpenvoxStrings::DEFAULT_SEARCH_PATTERNS,
31
+ build_generate_options(args.last)
32
+ )
33
+ nil
34
+ end
35
+ end
36
+
37
+ action(:server) do
38
+ option '--markup FORMAT' do
39
+ summary "The markup format to use for docstring text (defaults to 'markdown')."
40
+ end
41
+
42
+ summary 'Runs a local documentation server for the modules in the current Puppet environment.'
43
+ arguments '[[module_name] ...]'
44
+
45
+ when_invoked do |*args|
46
+ check_required_features
47
+ require 'openvox-strings'
48
+
49
+ modules = args.count > 1 ? args[0..-2] : []
50
+
51
+ # Generate documentation for all (or the given) modules
52
+ module_docs = []
53
+ environment = Puppet.lookup(:current_environment)
54
+ environment.modules.each do |mod|
55
+ next unless modules.empty? || modules.include?(mod.name)
56
+
57
+ db = File.join(mod.path, '.yardoc')
58
+ patterns = OpenvoxStrings::DEFAULT_SEARCH_PATTERNS.map do |p|
59
+ File.join(mod.path, p)
60
+ end
61
+ puts "Generating documentation for Puppet module '#{mod.name}'."
62
+ OpenvoxStrings.generate(patterns, build_generate_options(args.last, '--db', db))
63
+
64
+ # Clear the registry so that the next call to generate has a clean database
65
+ YARD::Registry.clear
66
+
67
+ module_docs << mod.name
68
+ module_docs << db
69
+ end
70
+
71
+ if module_docs.empty?
72
+ puts 'No Puppet modules were found to serve documentation for.'
73
+ return
74
+ end
75
+ puts 'Starting YARD documentation server.'
76
+ OpenvoxStrings.run_server('-m', *module_docs)
77
+ nil
78
+ end
79
+ end
80
+
81
+ action(:describe) do # This is Kris' experiment with string based describe
82
+ option '--list' do
83
+ summary 'list types'
84
+ end
85
+ option '--providers' do
86
+ summary 'provide details on providers for each type'
87
+ end
88
+ option '--list-providers' do
89
+ summary 'list all providers'
90
+ end
91
+
92
+ # TODO: Implement the rest of describe behavior
93
+ # * --help:
94
+ # Print this help text
95
+
96
+ # * --providers:
97
+ # Describe providers in detail for each type
98
+
99
+ # * --list:
100
+ # List all types
101
+
102
+ # * --list-providers:
103
+ # list all providers
104
+
105
+ # * --meta:
106
+ # List all metaparameters
107
+
108
+ # * --short:
109
+ # List only parameters without detail
110
+
111
+ when_invoked do |*args|
112
+ check_required_features
113
+ require 'openvox-strings'
114
+
115
+ options = args.last
116
+ options[:describe] = true
117
+ options[:stdout] = true
118
+ options[:format] = 'json'
119
+
120
+ if args.length > 1
121
+ if options[:list]
122
+ warn 'WARNING: ignoring types when listing all types.'
123
+ else
124
+ options[:describe_types] = args[0..-2]
125
+ end
126
+ end
127
+
128
+ # TODO: Set up search_patterns and whatever else needed to collect data for describe - currently missing some
129
+ # manifests/**/*.pp
130
+ # functions/**/*.pp
131
+ # tasks/*.json
132
+ # plans/*.pp
133
+ search_patterns = ['types/**/*.pp', 'lib/**/*.rb']
134
+ OpenvoxStrings.generate(
135
+ search_patterns,
136
+ build_generate_options(options)
137
+ )
138
+ nil
139
+ end
140
+ end
141
+
142
+ # Checks that the required features are installed.
143
+ # @return [void]
144
+ def check_required_features
145
+ raise "The 'yard' gem must be installed in order to use this face." unless Puppet.features.yard?
146
+ raise "The 'rgen' gem must be installed in order to use this face." unless Puppet.features.rgen?
147
+ end
148
+
149
+ # Builds the options to OpenvoxStrings.generate.
150
+ # @param [Hash] options The Puppet face options hash.
151
+ # @param [Array] yard_args The additional arguments to pass to YARD.
152
+ # @return [Hash] Returns the OpenvoxStrings.generate options hash.
153
+ def build_generate_options(options = nil, *yard_args)
154
+ generate_options = {}
155
+ generate_options[:debug] = Puppet[:debug]
156
+ generate_options[:backtrace] = Puppet[:trace]
157
+ generate_options[:yard_args] = yard_args unless yard_args.empty?
158
+ if options
159
+ markup = options[:markup]
160
+ generate_options[:markup] = markup if markup
161
+ generate_options[:path] = options[:out] if options[:out]
162
+ generate_options[:stdout] = options[:stdout]
163
+
164
+ if options[:describe]
165
+ generate_options[:describe] = true
166
+ generate_options[:describe_types] = options[:describe_types]
167
+ generate_options[:describe_list] = options[:list]
168
+ generate_options[:providers] = options[:providers]
169
+ generate_options[:list_providers] = options[:list_providers]
170
+ end
171
+
172
+ format = options[:format]
173
+ if format
174
+ if format.casecmp('markdown').zero?
175
+ generate_options[:markdown] = true
176
+ elsif format.casecmp('json').zero?
177
+ generate_options[:json] = true
178
+ else
179
+ raise "Invalid format #{options[:format]}. Please select 'json' or 'markdown'."
180
+ end
181
+ end
182
+ end
183
+ generate_options
184
+ end
185
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'puppet/util/feature'
4
+
5
+ Puppet.features.add(:rgen, libs: ['rgen/metamodel_builder', 'rgen/ecore/ecore'])
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'puppet/util/feature'
4
+
5
+ Puppet.features.add(:yard, libs: ['yard'])