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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +407 -0
- data/LICENSE +177 -0
- data/README.md +116 -0
- data/lib/openvox-strings/describe.rb +75 -0
- data/lib/openvox-strings/json.rb +33 -0
- data/lib/openvox-strings/markdown/base.rb +236 -0
- data/lib/openvox-strings/markdown/data_type.rb +39 -0
- data/lib/openvox-strings/markdown/defined_type.rb +20 -0
- data/lib/openvox-strings/markdown/function.rb +59 -0
- data/lib/openvox-strings/markdown/helpers.rb +21 -0
- data/lib/openvox-strings/markdown/puppet_class.rb +20 -0
- data/lib/openvox-strings/markdown/puppet_plan.rb +20 -0
- data/lib/openvox-strings/markdown/puppet_task.rb +29 -0
- data/lib/openvox-strings/markdown/resource_type.rb +56 -0
- data/lib/openvox-strings/markdown/templates/classes_and_defines.erb +94 -0
- data/lib/openvox-strings/markdown/templates/data_type.erb +101 -0
- data/lib/openvox-strings/markdown/templates/data_type_function.erb +67 -0
- data/lib/openvox-strings/markdown/templates/function.erb +106 -0
- data/lib/openvox-strings/markdown/templates/puppet_task.erb +28 -0
- data/lib/openvox-strings/markdown/templates/resource_type.erb +156 -0
- data/lib/openvox-strings/markdown/templates/table_of_contents.erb +26 -0
- data/lib/openvox-strings/markdown.rb +81 -0
- data/lib/openvox-strings/monkey_patches/display_object_command.rb +16 -0
- data/lib/openvox-strings/tasks/generate.rb +54 -0
- data/lib/openvox-strings/tasks/gh_pages.rb +72 -0
- data/lib/openvox-strings/tasks/validate.rb +42 -0
- data/lib/openvox-strings/tasks.rb +14 -0
- data/lib/openvox-strings/version.rb +5 -0
- data/lib/openvox-strings/yard/code_objects/base.rb +16 -0
- data/lib/openvox-strings/yard/code_objects/class.rb +60 -0
- data/lib/openvox-strings/yard/code_objects/data_type.rb +102 -0
- data/lib/openvox-strings/yard/code_objects/data_type_alias.rb +60 -0
- data/lib/openvox-strings/yard/code_objects/defined_type.rb +59 -0
- data/lib/openvox-strings/yard/code_objects/function.rb +106 -0
- data/lib/openvox-strings/yard/code_objects/group.rb +33 -0
- data/lib/openvox-strings/yard/code_objects/plan.rb +59 -0
- data/lib/openvox-strings/yard/code_objects/provider.rb +98 -0
- data/lib/openvox-strings/yard/code_objects/task.rb +69 -0
- data/lib/openvox-strings/yard/code_objects/type.rb +196 -0
- data/lib/openvox-strings/yard/code_objects.rb +14 -0
- data/lib/openvox-strings/yard/handlers/helpers.rb +10 -0
- data/lib/openvox-strings/yard/handlers/json/base.rb +8 -0
- data/lib/openvox-strings/yard/handlers/json/task_handler.rb +34 -0
- data/lib/openvox-strings/yard/handlers/puppet/base.rb +52 -0
- data/lib/openvox-strings/yard/handlers/puppet/class_handler.rb +29 -0
- data/lib/openvox-strings/yard/handlers/puppet/data_type_alias_handler.rb +26 -0
- data/lib/openvox-strings/yard/handlers/puppet/defined_type_handler.rb +29 -0
- data/lib/openvox-strings/yard/handlers/puppet/function_handler.rb +54 -0
- data/lib/openvox-strings/yard/handlers/puppet/plan_handler.rb +29 -0
- data/lib/openvox-strings/yard/handlers/ruby/base.rb +55 -0
- data/lib/openvox-strings/yard/handlers/ruby/data_type_handler.rb +411 -0
- data/lib/openvox-strings/yard/handlers/ruby/function_handler.rb +386 -0
- data/lib/openvox-strings/yard/handlers/ruby/provider_handler.rb +127 -0
- data/lib/openvox-strings/yard/handlers/ruby/rsapi_handler.rb +157 -0
- data/lib/openvox-strings/yard/handlers/ruby/type_base.rb +146 -0
- data/lib/openvox-strings/yard/handlers/ruby/type_extras_handler.rb +65 -0
- data/lib/openvox-strings/yard/handlers/ruby/type_handler.rb +105 -0
- data/lib/openvox-strings/yard/handlers.rb +28 -0
- data/lib/openvox-strings/yard/parsers/json/parser.rb +38 -0
- data/lib/openvox-strings/yard/parsers/json/task_statement.rb +37 -0
- data/lib/openvox-strings/yard/parsers/puppet/parser.rb +89 -0
- data/lib/openvox-strings/yard/parsers/puppet/statement.rb +182 -0
- data/lib/openvox-strings/yard/parsers.rb +14 -0
- data/lib/openvox-strings/yard/tags/enum_tag.rb +13 -0
- data/lib/openvox-strings/yard/tags/factory.rb +18 -0
- data/lib/openvox-strings/yard/tags/overload_tag.rb +112 -0
- data/lib/openvox-strings/yard/tags/parameter_directive.rb +25 -0
- data/lib/openvox-strings/yard/tags/property_directive.rb +25 -0
- data/lib/openvox-strings/yard/tags/summary_tag.rb +10 -0
- data/lib/openvox-strings/yard/tags.rb +11 -0
- data/lib/openvox-strings/yard/templates/default/fulldoc/html/css/common.css +8 -0
- data/lib/openvox-strings/yard/templates/default/fulldoc/html/full_list_puppet_class.erb +9 -0
- data/lib/openvox-strings/yard/templates/default/fulldoc/html/full_list_puppet_data_type.erb +10 -0
- data/lib/openvox-strings/yard/templates/default/fulldoc/html/full_list_puppet_defined_type.erb +9 -0
- data/lib/openvox-strings/yard/templates/default/fulldoc/html/full_list_puppet_function.erb +10 -0
- data/lib/openvox-strings/yard/templates/default/fulldoc/html/full_list_puppet_plan.erb +9 -0
- data/lib/openvox-strings/yard/templates/default/fulldoc/html/full_list_puppet_provider.erb +10 -0
- data/lib/openvox-strings/yard/templates/default/fulldoc/html/full_list_puppet_task.erb +9 -0
- data/lib/openvox-strings/yard/templates/default/fulldoc/html/full_list_puppet_type.erb +9 -0
- data/lib/openvox-strings/yard/templates/default/fulldoc/html/setup.rb +93 -0
- data/lib/openvox-strings/yard/templates/default/layout/html/footer.erb +3 -0
- data/lib/openvox-strings/yard/templates/default/layout/html/objects.erb +37 -0
- data/lib/openvox-strings/yard/templates/default/layout/html/setup.rb +231 -0
- data/lib/openvox-strings/yard/templates/default/puppet_class/html/box_info.erb +26 -0
- data/lib/openvox-strings/yard/templates/default/puppet_class/html/deprecated.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_class/html/header.erb +1 -0
- data/lib/openvox-strings/yard/templates/default/puppet_class/html/note.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_class/html/overview.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_class/html/setup.rb +16 -0
- data/lib/openvox-strings/yard/templates/default/puppet_class/html/source.erb +12 -0
- data/lib/openvox-strings/yard/templates/default/puppet_class/html/summary.erb +4 -0
- data/lib/openvox-strings/yard/templates/default/puppet_class/html/todo.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_data_type/html/box_info.erb +10 -0
- data/lib/openvox-strings/yard/templates/default/puppet_data_type/html/deprecated.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_data_type/html/header.erb +1 -0
- data/lib/openvox-strings/yard/templates/default/puppet_data_type/html/method_details_list.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_data_type/html/note.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_data_type/html/overview.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_data_type/html/setup.rb +15 -0
- data/lib/openvox-strings/yard/templates/default/puppet_data_type/html/source.erb +12 -0
- data/lib/openvox-strings/yard/templates/default/puppet_data_type/html/summary.erb +4 -0
- data/lib/openvox-strings/yard/templates/default/puppet_data_type/html/todo.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_data_type_alias/html/alias_of.erb +10 -0
- data/lib/openvox-strings/yard/templates/default/puppet_data_type_alias/html/box_info.erb +10 -0
- data/lib/openvox-strings/yard/templates/default/puppet_data_type_alias/html/deprecated.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_data_type_alias/html/header.erb +1 -0
- data/lib/openvox-strings/yard/templates/default/puppet_data_type_alias/html/note.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_data_type_alias/html/overview.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_data_type_alias/html/setup.rb +19 -0
- data/lib/openvox-strings/yard/templates/default/puppet_data_type_alias/html/source.erb +12 -0
- data/lib/openvox-strings/yard/templates/default/puppet_data_type_alias/html/summary.erb +4 -0
- data/lib/openvox-strings/yard/templates/default/puppet_data_type_alias/html/todo.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_defined_type/html/box_info.erb +10 -0
- data/lib/openvox-strings/yard/templates/default/puppet_defined_type/html/deprecated.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_defined_type/html/header.erb +1 -0
- data/lib/openvox-strings/yard/templates/default/puppet_defined_type/html/note.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_defined_type/html/overview.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_defined_type/html/setup.rb +7 -0
- data/lib/openvox-strings/yard/templates/default/puppet_defined_type/html/source.erb +12 -0
- data/lib/openvox-strings/yard/templates/default/puppet_defined_type/html/summary.erb +4 -0
- data/lib/openvox-strings/yard/templates/default/puppet_defined_type/html/todo.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_function/html/box_info.erb +14 -0
- data/lib/openvox-strings/yard/templates/default/puppet_function/html/deprecated.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_function/html/header.erb +1 -0
- data/lib/openvox-strings/yard/templates/default/puppet_function/html/note.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_function/html/overview.erb +18 -0
- data/lib/openvox-strings/yard/templates/default/puppet_function/html/setup.rb +7 -0
- data/lib/openvox-strings/yard/templates/default/puppet_function/html/source.erb +12 -0
- data/lib/openvox-strings/yard/templates/default/puppet_function/html/summary.erb +4 -0
- data/lib/openvox-strings/yard/templates/default/puppet_function/html/todo.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_plan/html/box_info.erb +10 -0
- data/lib/openvox-strings/yard/templates/default/puppet_plan/html/deprecated.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_plan/html/header.erb +1 -0
- data/lib/openvox-strings/yard/templates/default/puppet_plan/html/note.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_plan/html/overview.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_plan/html/setup.rb +13 -0
- data/lib/openvox-strings/yard/templates/default/puppet_plan/html/source.erb +12 -0
- data/lib/openvox-strings/yard/templates/default/puppet_plan/html/summary.erb +4 -0
- data/lib/openvox-strings/yard/templates/default/puppet_plan/html/todo.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_provider/html/box_info.erb +14 -0
- data/lib/openvox-strings/yard/templates/default/puppet_provider/html/collection.erb +17 -0
- data/lib/openvox-strings/yard/templates/default/puppet_provider/html/features.erb +12 -0
- data/lib/openvox-strings/yard/templates/default/puppet_provider/html/header.erb +1 -0
- data/lib/openvox-strings/yard/templates/default/puppet_provider/html/overview.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_provider/html/setup.rb +31 -0
- data/lib/openvox-strings/yard/templates/default/puppet_provider/html/summary.erb +4 -0
- data/lib/openvox-strings/yard/templates/default/puppet_task/html/box_info.erb +9 -0
- data/lib/openvox-strings/yard/templates/default/puppet_task/html/header.erb +1 -0
- data/lib/openvox-strings/yard/templates/default/puppet_task/html/input.erb +5 -0
- data/lib/openvox-strings/yard/templates/default/puppet_task/html/overview.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_task/html/parameters.erb +16 -0
- data/lib/openvox-strings/yard/templates/default/puppet_task/html/setup.rb +24 -0
- data/lib/openvox-strings/yard/templates/default/puppet_task/html/supports_noop.erb +3 -0
- data/lib/openvox-strings/yard/templates/default/puppet_type/html/box_info.erb +20 -0
- data/lib/openvox-strings/yard/templates/default/puppet_type/html/deprecated.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_type/html/features.erb +13 -0
- data/lib/openvox-strings/yard/templates/default/puppet_type/html/header.erb +1 -0
- data/lib/openvox-strings/yard/templates/default/puppet_type/html/note.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_type/html/overview.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/puppet_type/html/parameters.erb +35 -0
- data/lib/openvox-strings/yard/templates/default/puppet_type/html/setup.rb +36 -0
- data/lib/openvox-strings/yard/templates/default/puppet_type/html/summary.erb +4 -0
- data/lib/openvox-strings/yard/templates/default/puppet_type/html/todo.erb +6 -0
- data/lib/openvox-strings/yard/templates/default/tags/html/enum.erb +17 -0
- data/lib/openvox-strings/yard/templates/default/tags/html/puppet_overload.erb +12 -0
- data/lib/openvox-strings/yard/templates/default/tags/setup.rb +20 -0
- data/lib/openvox-strings/yard/util.rb +87 -0
- data/lib/openvox-strings/yard.rb +132 -0
- data/lib/openvox-strings.rb +88 -0
- data/lib/puppet/application/strings.rb +7 -0
- data/lib/puppet/face/strings.rb +185 -0
- data/lib/puppet/feature/rgen.rb +5 -0
- data/lib/puppet/feature/yard.rb +5 -0
- 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,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
|