puppet-strings 2.9.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +257 -237
- data/README.md +52 -65
- data/lib/puppet/face/strings.rb +30 -50
- data/lib/puppet/feature/rgen.rb +1 -1
- data/lib/puppet/feature/yard.rb +1 -1
- data/lib/puppet-strings/describe.rb +18 -18
- data/lib/puppet-strings/markdown/base.rb +63 -28
- data/lib/puppet-strings/markdown/data_type.rb +4 -0
- data/lib/puppet-strings/markdown/defined_type.rb +4 -0
- data/lib/puppet-strings/markdown/function.rb +13 -8
- data/lib/puppet-strings/markdown/helpers.rb +21 -0
- data/lib/puppet-strings/markdown/puppet_class.rb +4 -0
- data/lib/puppet-strings/markdown/puppet_plan.rb +4 -0
- data/lib/puppet-strings/markdown/puppet_task.rb +4 -1
- data/lib/puppet-strings/markdown/resource_type.rb +13 -3
- data/lib/puppet-strings/markdown/templates/classes_and_defines.erb +4 -4
- data/lib/puppet-strings/markdown/templates/data_type.erb +5 -9
- data/lib/puppet-strings/markdown/templates/data_type_function.erb +1 -1
- data/lib/puppet-strings/markdown/templates/function.erb +1 -1
- data/lib/puppet-strings/markdown/templates/puppet_task.erb +1 -1
- data/lib/puppet-strings/markdown/templates/resource_type.erb +6 -6
- data/lib/puppet-strings/markdown/templates/table_of_contents.erb +8 -8
- data/lib/puppet-strings/markdown.rb +62 -20
- data/lib/puppet-strings/monkey_patches/display_object_command.rb +4 -1
- data/lib/puppet-strings/tasks/generate.rb +8 -10
- data/lib/puppet-strings/tasks/gh_pages.rb +6 -5
- data/lib/puppet-strings/tasks/validate.rb +1 -1
- data/lib/puppet-strings/tasks.rb +5 -7
- data/lib/puppet-strings/version.rb +1 -1
- data/lib/puppet-strings/yard/code_objects/class.rb +2 -2
- data/lib/puppet-strings/yard/code_objects/data_type.rb +4 -4
- data/lib/puppet-strings/yard/code_objects/data_type_alias.rb +1 -1
- data/lib/puppet-strings/yard/code_objects/defined_type.rb +2 -2
- data/lib/puppet-strings/yard/code_objects/function.rb +11 -11
- data/lib/puppet-strings/yard/code_objects/group.rb +1 -1
- data/lib/puppet-strings/yard/code_objects/plan.rb +4 -2
- data/lib/puppet-strings/yard/code_objects/provider.rb +2 -2
- data/lib/puppet-strings/yard/code_objects/task.rb +6 -7
- data/lib/puppet-strings/yard/code_objects/type.rb +6 -6
- data/lib/puppet-strings/yard/handlers/helpers.rb +3 -4
- data/lib/puppet-strings/yard/handlers/json/base.rb +2 -1
- data/lib/puppet-strings/yard/handlers/json/task_handler.rb +4 -4
- data/lib/puppet-strings/yard/handlers/puppet/base.rb +7 -2
- data/lib/puppet-strings/yard/handlers/puppet/function_handler.rb +3 -2
- data/lib/puppet-strings/yard/handlers/ruby/base.rb +3 -2
- data/lib/puppet-strings/yard/handlers/ruby/data_type_handler.rb +19 -16
- data/lib/puppet-strings/yard/handlers/ruby/function_handler.rb +70 -50
- data/lib/puppet-strings/yard/handlers/ruby/provider_handler.rb +2 -1
- data/lib/puppet-strings/yard/handlers/ruby/rsapi_handler.rb +12 -9
- data/lib/puppet-strings/yard/handlers/ruby/type_base.rb +27 -27
- data/lib/puppet-strings/yard/handlers/ruby/type_extras_handler.rb +2 -3
- data/lib/puppet-strings/yard/handlers/ruby/type_handler.rb +2 -1
- data/lib/puppet-strings/yard/parsers/json/parser.rb +3 -2
- data/lib/puppet-strings/yard/parsers/json/task_statement.rb +3 -3
- data/lib/puppet-strings/yard/parsers/puppet/parser.rb +7 -7
- data/lib/puppet-strings/yard/parsers/puppet/statement.rb +16 -23
- data/lib/puppet-strings/yard/parsers.rb +1 -0
- data/lib/puppet-strings/yard/tags/enum_tag.rb +1 -2
- data/lib/puppet-strings/yard/tags/factory.rb +1 -1
- data/lib/puppet-strings/yard/tags/overload_tag.rb +7 -7
- data/lib/puppet-strings/yard/tags/parameter_directive.rb +2 -2
- data/lib/puppet-strings/yard/tags/property_directive.rb +2 -2
- data/lib/puppet-strings/yard/tags/summary_tag.rb +1 -2
- data/lib/puppet-strings/yard/util.rb +11 -4
- data/lib/puppet-strings/yard.rb +6 -6
- data/lib/puppet-strings.rb +7 -13
- metadata +13 -20
- data/lib/puppet-strings/markdown/data_types.rb +0 -43
- data/lib/puppet-strings/markdown/defined_types.rb +0 -39
- data/lib/puppet-strings/markdown/functions.rb +0 -40
- data/lib/puppet-strings/markdown/puppet_classes.rb +0 -39
- data/lib/puppet-strings/markdown/puppet_plans.rb +0 -39
- data/lib/puppet-strings/markdown/puppet_tasks.rb +0 -36
- data/lib/puppet-strings/markdown/resource_types.rb +0 -39
- data/lib/puppet-strings/markdown/table_of_contents.rb +0 -26
data/README.md
CHANGED
@@ -1,24 +1,16 @@
|
|
1
|
-
Puppet
|
2
|
-
==============
|
3
|
-
[![Build Status](https://travis-ci.org/puppetlabs/puppet-strings.png?branch=main)](https://travis-ci.org/puppetlabs/puppet-strings) [![Gem Version](https://badge.fury.io/rb/puppet-strings.svg)](https://badge.fury.io/rb/puppet-strings)
|
1
|
+
# Puppet strings
|
4
2
|
|
5
|
-
|
3
|
+
[![ci](https://github.com/puppetlabs/puppet-strings/actions/workflows/ci.yml/badge.svg)](https://github.com/puppetlabs/puppet-strings/actions/workflows/ci.yml) [![Gem Version](https://badge.fury.io/rb/puppet-strings.svg)](https://badge.fury.io/rb/puppet-strings)
|
6
4
|
|
7
|
-
|
8
|
-
|
9
|
-
| -------------- |---------------------------------------------------------------- |
|
10
|
-
| *Code* | [GitHub][repo] |
|
11
|
-
| *Issues* | [GitHub issues][issues] |
|
12
|
-
| *License* | [Apache 2.0][LICENSE] |
|
13
|
-
| *Change log* | [CHANGELOG.md][changelog] |
|
14
|
-
| *Contributing* | [CONTRIBUTING.md][contributing] and [COMMITTERS.md][committers] |
|
5
|
+
Puppet Strings generates documentation for Puppet code and extensions written in Puppet and Ruby.
|
6
|
+
Strings processes code and YARD-style code comments to create documentation in HTML, Markdown, or JSON formats.
|
15
7
|
|
16
8
|
## Installing Puppet Strings
|
17
9
|
|
18
10
|
### Requirements
|
19
11
|
|
20
|
-
|
21
|
-
|
12
|
+
* Ruby 2.7.0 or newer
|
13
|
+
* Puppet 6.0.0 or newer
|
22
14
|
|
23
15
|
### Install Puppet Strings
|
24
16
|
|
@@ -28,7 +20,7 @@ Installation instructions vary slightly depending on how you have installed Pupp
|
|
28
20
|
|
29
21
|
Install the `puppet-strings` gem into the `puppet-agent` environment:
|
30
22
|
|
31
|
-
```
|
23
|
+
``` bash
|
32
24
|
sudo /opt/puppetlabs/puppet/bin/gem install puppet-strings
|
33
25
|
```
|
34
26
|
|
@@ -36,35 +28,44 @@ sudo /opt/puppetlabs/puppet/bin/gem install puppet-strings
|
|
36
28
|
|
37
29
|
Install the `puppet-strings` gem into the same Ruby installation where you have installed the `puppet` gem:
|
38
30
|
|
39
|
-
```
|
31
|
+
``` bash
|
40
32
|
gem install puppet-strings
|
41
33
|
```
|
42
34
|
|
43
35
|
### Configure Puppet Strings (Optional)
|
44
36
|
|
45
|
-
|
37
|
+
To use YARD options with Puppet Strings, specify a `.yardopts` file in the same directory in which you run `puppet strings`.
|
38
|
+
|
39
|
+
Puppet Strings supports the Markdown format and automatically sets the YARD `markup` option to `markdown`.
|
40
|
+
|
41
|
+
To see a list of available YARD options, run `yard help doc`.
|
46
42
|
|
47
|
-
|
43
|
+
For details about YARD options configuration, see the [YARD docs](http://www.rubydoc.info/gems/yard/file/docs/GettingStarted.md#config).
|
48
44
|
|
49
45
|
## Generating documentation with Puppet Strings
|
50
46
|
|
51
47
|
By default, Puppet Strings outputs documentation as HTML, or you can specify JSON or Markdown output instead.
|
52
48
|
|
53
|
-
Strings generates reference documentation based on the code and Strings code comments in all Puppet and
|
49
|
+
Strings generates reference documentation based on the code and Strings code comments in all Puppet and
|
50
|
+
Ruby source files under the `./manifests/`, `./functions/`, `./lib/`, `./types/`, and `./tasks/` directories.
|
54
51
|
|
55
52
|
Strings outputs HTML of the reference information and the module README to the module's `./doc/` directory. This output can be rendered in any browser.
|
56
53
|
|
57
|
-
JSON and Markdown output include the reference documentation only.
|
54
|
+
JSON and Markdown output include the reference documentation only.
|
55
|
+
Strings sends JSON output to either STDOUT or to a file.
|
56
|
+
Markdown output is written to a REFERENCE.md file in the module's main directory.
|
58
57
|
|
59
|
-
See the [Puppet Strings documentation](https://puppet.com/docs/puppet/latest/puppet_strings.html) for complete instructions for generating documentation with Strings.
|
58
|
+
See the [Puppet Strings documentation](https://puppet.com/docs/puppet/latest/puppet_strings.html) for complete instructions for generating documentation with Strings.
|
59
|
+
|
60
|
+
For code comment style guidelines and examples, see the [Puppet Strings style guide](https://puppet.com/docs/puppet/latest/puppet_strings_style.html).
|
60
61
|
|
61
62
|
### Additional Resources
|
62
63
|
|
63
64
|
Here are a few other good resources for getting started with documentation:
|
64
65
|
|
65
|
-
|
66
|
-
|
67
|
-
|
66
|
+
* [Module README Template](https://puppet.com/docs/puppet/latest/puppet_strings.html)
|
67
|
+
* [YARD Getting Started Guide](http://www.rubydoc.info/gems/yard/file/docs/GettingStarted.md)
|
68
|
+
* [YARD Tags Overview](http://www.rubydoc.info/gems/yard/file/docs/Tags.md)
|
68
69
|
|
69
70
|
## Developing and Contributing
|
70
71
|
|
@@ -78,72 +79,58 @@ If you plan on developing features or fixing bugs in Puppet Strings, it is essen
|
|
78
79
|
|
79
80
|
To run specs, run the `spec` rake task:
|
80
81
|
|
81
|
-
|
82
|
-
|
82
|
+
``` bash
|
83
|
+
bundle install --path .bundle/gems
|
84
|
+
bundle exec rake spec
|
85
|
+
```
|
83
86
|
|
84
87
|
### Running Acceptance Tests
|
85
88
|
|
86
|
-
|
89
|
+
Acceptance tests can be executed with [puppet_litmus](https://github.com/puppetlabs/puppet_litmus).
|
87
90
|
|
88
91
|
An example of running the acceptance tests locally with Docker:
|
89
92
|
|
90
93
|
1. Ensure [Docker](https://www.docker.com/products/docker-desktop) is installed and running.
|
91
94
|
|
92
|
-
2. Install Ruby gems. This step can be skipped if you have already followed the [Running Specs](#running-specs) instructions
|
95
|
+
2. Install Ruby gems. This step can be skipped if you have already followed the [Running Specs](#running-specs) instructions.
|
93
96
|
|
94
|
-
```
|
95
|
-
|
96
|
-
```
|
97
|
+
``` bash
|
98
|
+
bundle install --path .bundle/gems
|
99
|
+
```
|
97
100
|
|
98
101
|
3. Provision a docker container, in this case CentOS 7
|
99
102
|
|
100
|
-
```
|
101
|
-
|
102
|
-
```
|
103
|
+
``` bash
|
104
|
+
bundle exec rake 'litmus:provision[docker, centos:7]'
|
105
|
+
```
|
103
106
|
|
104
107
|
4. Install test items; Puppet Agent, our test module, and the puppet-strings gem built from this source code
|
105
108
|
|
106
|
-
```
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
```
|
109
|
+
``` bash
|
110
|
+
bundle exec rake 'litmus:install_agent[puppet6]'
|
111
|
+
bundle exec rake 'litmus:install_modules_from_directory[./spec/fixtures/acceptance/modules]'
|
112
|
+
bundle exec rake litmus:install_gems
|
113
|
+
```
|
111
114
|
|
112
115
|
5. Run the acceptance tests. These tests can be run more than once without the need to run the provisioning steps again
|
113
116
|
|
114
|
-
```
|
115
|
-
|
116
|
-
```
|
117
|
+
``` bash
|
118
|
+
bundle exec rake litmus:acceptance:parallel
|
119
|
+
```
|
117
120
|
|
118
121
|
6. Remove any test containers
|
119
122
|
|
120
|
-
```
|
121
|
-
|
122
|
-
```
|
123
|
-
|
124
|
-
The [Litmus Wiki](https://github.com/puppetlabs/puppet_litmus/wiki) contains more indepth information about Litmus. There is also a tutorial on using Litmus with an example [Puppet Module](https://github.com/puppetlabs/puppet_litmus/wiki/Tutorial:-use-Litmus-to-execute-acceptance-tests-with-a-sample-module-(MoTD)#install-the-necessary-gems-for-the-module)
|
125
|
-
|
126
|
-
|
127
|
-
An example of run the acceptance tests follow the instructions [here].
|
123
|
+
``` bash
|
124
|
+
bundle exec rake litmus:tear_down
|
125
|
+
```
|
128
126
|
|
129
127
|
## Support
|
130
128
|
|
131
|
-
Please log issues in [GitHub issues]
|
129
|
+
Please log issues in [GitHub issues](https://github.com/puppetlabs/puppet-strings/issues).
|
130
|
+
Check out [CONTRIBUTING.md](https://github.com/puppetlabs/puppet-strings/blob/main/CONTRIBUTING.md) for tips on writing _the best_ issues.
|
132
131
|
|
133
|
-
|
134
|
-
|
135
|
-
There is also an active community on the [Puppet community Slack][] in the #forge-modules channel.
|
132
|
+
There is also an active community on the [Puppet community Slack](https://slack.puppet.com) in the #forge-modules channel.
|
136
133
|
|
137
134
|
We use semantic version numbers for our releases and recommend that users upgrade to patch releases and minor releases as they become available.
|
138
135
|
|
139
|
-
Bug fixes and ongoing development will occur in minor releases for the current major version.
|
140
|
-
|
141
|
-
|
142
|
-
[repo]: https://github.com/puppetlabs/puppet-strings
|
143
|
-
[issues]: https://github.com/puppetlabs/puppet-strings/issues
|
144
|
-
[LICENSE]: https://github.com/puppetlabs/puppet-strings/blob/main/LICENSE
|
145
|
-
[changelog]: https://github.com/puppetlabs/puppet-strings/blob/main/CHANGELOG.md
|
146
|
-
[contributing]: https://github.com/puppetlabs/puppet-strings/blob/main/CONTRIBUTING.md
|
147
|
-
[committers]: https://github.com/puppetlabs/puppet-strings/blob/main/COMMITTERS.md
|
148
|
-
[Puppet community Slack]: https://slack.puppet.com
|
149
|
-
|
136
|
+
Bug fixes and ongoing development will occur in minor releases for the current major version.
|
data/lib/puppet/face/strings.rb
CHANGED
@@ -18,12 +18,6 @@ Puppet::Face.define(:strings, '0.0.1') do
|
|
18
18
|
option '--markup FORMAT' do
|
19
19
|
summary "The markup format to use for docstring text (defaults to 'markdown')."
|
20
20
|
end
|
21
|
-
option '--emit-json-stdout' do
|
22
|
-
summary 'DEPRECATED: Print JSON representation of the documentation to stdout.'
|
23
|
-
end
|
24
|
-
option '--emit-json PATH' do
|
25
|
-
summary 'DEPRECATED: Write JSON representation of the documentation to the given file.'
|
26
|
-
end
|
27
21
|
|
28
22
|
summary 'Generate documentation from files.'
|
29
23
|
arguments '[[search_pattern] ...]'
|
@@ -32,9 +26,9 @@ Puppet::Face.define(:strings, '0.0.1') do
|
|
32
26
|
check_required_features
|
33
27
|
require 'puppet-strings'
|
34
28
|
|
35
|
-
PuppetStrings
|
29
|
+
PuppetStrings.generate(
|
36
30
|
args.count > 1 ? args[0..-2] : PuppetStrings::DEFAULT_SEARCH_PATTERNS,
|
37
|
-
build_generate_options(args.last)
|
31
|
+
build_generate_options(args.last),
|
38
32
|
)
|
39
33
|
nil
|
40
34
|
end
|
@@ -79,35 +73,34 @@ Puppet::Face.define(:strings, '0.0.1') do
|
|
79
73
|
return
|
80
74
|
end
|
81
75
|
puts 'Starting YARD documentation server.'
|
82
|
-
PuppetStrings
|
76
|
+
PuppetStrings.run_server('-m', *module_docs)
|
83
77
|
nil
|
84
78
|
end
|
85
79
|
end
|
86
80
|
|
87
|
-
action(:describe) do #This is Kris' experiment with string based describe
|
88
|
-
option
|
89
|
-
summary
|
81
|
+
action(:describe) do # This is Kris' experiment with string based describe
|
82
|
+
option '--list' do
|
83
|
+
summary 'list types'
|
90
84
|
end
|
91
|
-
option
|
92
|
-
summary
|
85
|
+
option '--providers' do
|
86
|
+
summary 'provide details on providers'
|
93
87
|
end
|
94
88
|
|
95
|
-
#TODO: Implement the rest of describe behavior
|
96
|
-
# * --help:
|
97
|
-
# Print this help text
|
89
|
+
# TODO: Implement the rest of describe behavior
|
90
|
+
# * --help:
|
91
|
+
# Print this help text
|
98
92
|
|
99
|
-
# * --providers:
|
100
|
-
# Describe providers in detail for each type
|
93
|
+
# * --providers:
|
94
|
+
# Describe providers in detail for each type
|
101
95
|
|
102
|
-
# * --list:
|
103
|
-
# List all types
|
96
|
+
# * --list:
|
97
|
+
# List all types
|
104
98
|
|
105
|
-
# * --meta:
|
106
|
-
# List all metaparameters
|
107
|
-
|
108
|
-
# * --short:
|
109
|
-
# List only parameters without detail
|
99
|
+
# * --meta:
|
100
|
+
# List all metaparameters
|
110
101
|
|
102
|
+
# * --short:
|
103
|
+
# List only parameters without detail
|
111
104
|
|
112
105
|
when_invoked do |*args|
|
113
106
|
check_required_features
|
@@ -117,27 +110,24 @@ Puppet::Face.define(:strings, '0.0.1') do
|
|
117
110
|
options[:describe] = true
|
118
111
|
options[:stdout] = true
|
119
112
|
options[:format] = 'json'
|
120
|
-
|
113
|
+
|
121
114
|
if args.length > 1
|
122
115
|
if options[:list]
|
123
|
-
warn
|
116
|
+
warn 'WARNING: ignoring types when listing all types.'
|
124
117
|
else
|
125
118
|
options[:describe_types] = args[0..-2]
|
126
119
|
end
|
127
120
|
end
|
128
121
|
|
129
|
-
#TODO: Set up search_patterns and whatever else needed to collect data for describe - currently missing some
|
122
|
+
# TODO: Set up search_patterns and whatever else needed to collect data for describe - currently missing some
|
130
123
|
# manifests/**/*.pp
|
131
124
|
# functions/**/*.pp
|
132
125
|
# tasks/*.json
|
133
126
|
# plans/*.pp
|
134
|
-
search_patterns =
|
135
|
-
|
136
|
-
lib/**/*.rb
|
137
|
-
)
|
138
|
-
PuppetStrings::generate(
|
127
|
+
search_patterns = ['types/**/*.pp', 'lib/**/*.rb']
|
128
|
+
PuppetStrings.generate(
|
139
129
|
search_patterns,
|
140
|
-
build_generate_options(options)
|
130
|
+
build_generate_options(options),
|
141
131
|
)
|
142
132
|
nil
|
143
133
|
end
|
@@ -146,9 +136,9 @@ Puppet::Face.define(:strings, '0.0.1') do
|
|
146
136
|
# Checks that the required features are installed.
|
147
137
|
# @return [void]
|
148
138
|
def check_required_features
|
149
|
-
raise
|
150
|
-
raise
|
151
|
-
raise
|
139
|
+
raise "The 'yard' gem must be installed in order to use this face." unless Puppet.features.yard?
|
140
|
+
raise "The 'rgen' gem must be installed in order to use this face." unless Puppet.features.rgen?
|
141
|
+
raise 'This face requires Ruby 1.9 or greater.' if RUBY_VERSION.match?(%r{^1\.8})
|
152
142
|
end
|
153
143
|
|
154
144
|
# Builds the options to PuppetStrings.generate.
|
@@ -161,12 +151,6 @@ Puppet::Face.define(:strings, '0.0.1') do
|
|
161
151
|
generate_options[:backtrace] = Puppet[:trace]
|
162
152
|
generate_options[:yard_args] = yard_args unless yard_args.empty?
|
163
153
|
if options
|
164
|
-
if options[:emit_json]
|
165
|
-
warn "WARNING: '--emit-json PATH' is deprecated. Use '--format json --out PATH' instead."
|
166
|
-
end
|
167
|
-
if options[:emit_json_stdout]
|
168
|
-
warn "WARNING: '--emit-json-stdout' is deprecated. Use '--format json' instead."
|
169
|
-
end
|
170
154
|
markup = options[:markup]
|
171
155
|
generate_options[:markup] = markup if markup
|
172
156
|
generate_options[:path] = options[:out] if options[:out]
|
@@ -182,15 +166,11 @@ Puppet::Face.define(:strings, '0.0.1') do
|
|
182
166
|
if format
|
183
167
|
if format.casecmp('markdown').zero?
|
184
168
|
generate_options[:markdown] = true
|
185
|
-
elsif format.casecmp('json').zero?
|
169
|
+
elsif format.casecmp('json').zero?
|
186
170
|
generate_options[:json] = true
|
187
|
-
generate_options[:path] ||= options[:emit_json] if options[:emit_json]
|
188
171
|
else
|
189
|
-
raise
|
172
|
+
raise "Invalid format #{options[:format]}. Please select 'json' or 'markdown'."
|
190
173
|
end
|
191
|
-
elsif options[:emit_json] || options[:emit_json_stdout]
|
192
|
-
generate_options[:json] = true
|
193
|
-
generate_options[:path] ||= options[:emit_json] if options[:emit_json]
|
194
174
|
end
|
195
175
|
end
|
196
176
|
generate_options
|
data/lib/puppet/feature/rgen.rb
CHANGED
data/lib/puppet/feature/yard.rb
CHANGED
@@ -8,16 +8,16 @@ module PuppetStrings::Describe
|
|
8
8
|
# Renders requested types or a summarized list in the current YARD registry to STDOUT.
|
9
9
|
# @param [Array] describe_types The list of names of the types to be displayed.
|
10
10
|
# @param [bool] list Create the summarized list instead of describing each type.
|
11
|
-
# @param [bool]
|
11
|
+
# @param [bool] _providers Show details of the providers.
|
12
12
|
# @return [void]
|
13
|
-
def self.render(describe_types = [], list = false,
|
13
|
+
def self.render(describe_types = [], list = false, _providers = false)
|
14
14
|
document = {
|
15
15
|
defined_types: YARD::Registry.all(:puppet_defined_type).sort_by!(&:name).map!(&:to_hash),
|
16
|
-
resource_types: YARD::Registry.all(:puppet_type).sort_by!(&:name).map!(&:to_hash),
|
16
|
+
resource_types: YARD::Registry.all(:puppet_type).sort_by!(&:name).map!(&:to_hash),
|
17
17
|
}
|
18
18
|
|
19
19
|
if list
|
20
|
-
puts
|
20
|
+
puts 'These are the types known to puppet:'
|
21
21
|
document[:resource_types].each { |t| list_one_type(t) }
|
22
22
|
else
|
23
23
|
document[:providers] = YARD::Registry.all(:puppet_provider).sort_by!(&:name).map!(&:to_hash)
|
@@ -26,31 +26,31 @@ module PuppetStrings::Describe
|
|
26
26
|
describe_types.each { |name| type_names[name] = true }
|
27
27
|
|
28
28
|
document[:resource_types].each do |t|
|
29
|
-
show_one_type(t
|
29
|
+
show_one_type(t) if type_names[t[:name].to_s]
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
def self.show_one_type(resource_type
|
35
|
-
puts "\n%{name}\n%{underscore}" % { name: resource_type[:name], underscore:
|
34
|
+
def self.show_one_type(resource_type)
|
35
|
+
puts "\n%{name}\n%{underscore}" % { name: resource_type[:name], underscore: '=' * resource_type[:name].length }
|
36
36
|
puts resource_type[:docstring][:text]
|
37
37
|
|
38
38
|
combined_list = (resource_type[:parameters].nil? ? [] : resource_type[:parameters]) +
|
39
39
|
(resource_type[:properties].nil? ? [] : resource_type[:properties])
|
40
40
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
#Show providers here - list or provide details
|
41
|
+
return unless combined_list.any?
|
42
|
+
|
43
|
+
puts "\nParameters\n----------"
|
44
|
+
combined_list.sort_by { |p| p[:name] }.each { |p| show_one_parameter(p) }
|
45
|
+
puts "\nProviders\n---------"
|
46
|
+
# Show providers here - list or provide details
|
47
47
|
end
|
48
48
|
|
49
49
|
def self.show_one_parameter(parameter)
|
50
50
|
puts "\n- **%{name}**\n" % { name: parameter[:name] }
|
51
51
|
puts parameter[:description]
|
52
|
-
puts
|
53
|
-
puts
|
52
|
+
puts 'Valid values are `%{values}`.' % { values: parameter[:values].join('`, `') } unless parameter[:values].nil?
|
53
|
+
puts 'Requires features %{required_features}.' % { required_features: parameter[:required_features] } unless parameter[:required_features].nil?
|
54
54
|
end
|
55
55
|
|
56
56
|
def self.list_one_type(type)
|
@@ -58,13 +58,13 @@ module PuppetStrings::Describe
|
|
58
58
|
shortento = targetlength - 4
|
59
59
|
contentstring = type[:docstring][:text]
|
60
60
|
end_of_line = contentstring.index("\n") # "." gives closer results to old describeb, but breaks for '.k5login'
|
61
|
-
|
61
|
+
unless end_of_line.nil?
|
62
62
|
contentstring = contentstring[0..end_of_line]
|
63
63
|
end
|
64
64
|
if contentstring.length > targetlength
|
65
65
|
contentstring = contentstring[0..shortento] + ' ...'
|
66
66
|
end
|
67
|
-
|
68
|
-
puts "
|
67
|
+
|
68
|
+
puts "#{type[:name].to_s.ljust(15)} - #{contentstring}"
|
69
69
|
end
|
70
70
|
end
|
@@ -3,12 +3,14 @@
|
|
3
3
|
require 'puppet-strings'
|
4
4
|
require 'puppet-strings/json'
|
5
5
|
require 'puppet-strings/yard'
|
6
|
+
require 'puppet-strings/markdown/helpers'
|
6
7
|
|
8
|
+
# Implements classes that make elements in a YARD::Registry hash easily accessible for template.
|
7
9
|
module PuppetStrings::Markdown
|
8
10
|
# This class makes elements in a YARD::Registry hash easily accessible for templates.
|
9
11
|
#
|
10
12
|
# Here's an example hash:
|
11
|
-
#{:name=>:klass,
|
13
|
+
# {:name=>:klass,
|
12
14
|
# :file=>"(stdin)",
|
13
15
|
# :line=>16,
|
14
16
|
# :inherits=>"foo::bar",
|
@@ -49,6 +51,36 @@ module PuppetStrings::Markdown
|
|
49
51
|
# ") inherits foo::bar {\n" +
|
50
52
|
# "}"}
|
51
53
|
class Base
|
54
|
+
# Helpers for ERB templates
|
55
|
+
include PuppetStrings::Markdown::Helpers
|
56
|
+
|
57
|
+
# Set or return the name of the group
|
58
|
+
#
|
59
|
+
# @param [Optional[String]] Name of the group to set
|
60
|
+
# @return [String] Name of the group
|
61
|
+
def self.group_name(name = nil)
|
62
|
+
@group_name = name if name
|
63
|
+
@group_name
|
64
|
+
end
|
65
|
+
|
66
|
+
# Set or return the types registered with YARD
|
67
|
+
#
|
68
|
+
# @param [Optional[Array[Symbol]]] Array of symbols registered with YARD to set
|
69
|
+
# @return [Array[Symbol]] Array of symbols registered with YARD
|
70
|
+
def self.yard_types(types = nil)
|
71
|
+
@yard_types = types if types
|
72
|
+
@yard_types
|
73
|
+
end
|
74
|
+
|
75
|
+
# @return [Array] list of items
|
76
|
+
def self.items
|
77
|
+
yard_types
|
78
|
+
.flat_map { |type| YARD::Registry.all(type) }
|
79
|
+
.sort_by(&:name)
|
80
|
+
.map(&:to_hash)
|
81
|
+
.map { |i| new(i) }
|
82
|
+
end
|
83
|
+
|
52
84
|
def initialize(registry, component_type)
|
53
85
|
@type = component_type
|
54
86
|
@registry = registry
|
@@ -57,11 +89,11 @@ module PuppetStrings::Markdown
|
|
57
89
|
|
58
90
|
# generate 1:1 tag methods
|
59
91
|
# e.g. {:tag_name=>"author", :text=>"eputnam"}
|
60
|
-
{ :
|
61
|
-
:
|
62
|
-
:
|
63
|
-
:
|
64
|
-
:
|
92
|
+
{ return_val: 'return',
|
93
|
+
since: 'since',
|
94
|
+
summary: 'summary',
|
95
|
+
note: 'note',
|
96
|
+
todo: 'todo' }.each do |method_name, tag_name|
|
65
97
|
# @return [String] unless the tag is nil or the string.empty?
|
66
98
|
define_method method_name do
|
67
99
|
@tags.find { |tag| tag[:tag_name] == tag_name && !tag[:text].empty? }[:text] if @tags.any? { |tag| tag[:tag_name] == tag_name && !tag[:text].empty? }
|
@@ -95,7 +127,11 @@ module PuppetStrings::Markdown
|
|
95
127
|
|
96
128
|
# @return [Array] parameter tag hashes
|
97
129
|
def params
|
98
|
-
|
130
|
+
tags = @tags.select { |tag| tag[:tag_name] == 'param' }.map do |param|
|
131
|
+
param[:link] = clean_link("$#{name}::#{param[:name]}")
|
132
|
+
param
|
133
|
+
end
|
134
|
+
tags.empty? ? nil : tags
|
99
135
|
end
|
100
136
|
|
101
137
|
# @return [Array] example tag hashes
|
@@ -144,27 +180,14 @@ module PuppetStrings::Markdown
|
|
144
180
|
{
|
145
181
|
name: name.to_s,
|
146
182
|
link: link,
|
147
|
-
desc: summary || @registry[:docstring][:text][0..140].
|
183
|
+
desc: summary || @registry[:docstring][:text][0..140].tr("\n", ' '),
|
148
184
|
private: private?
|
149
185
|
}
|
150
186
|
end
|
151
187
|
|
152
188
|
# @return [String] makes the component name suitable for a GitHub markdown link
|
153
189
|
def link
|
154
|
-
name
|
155
|
-
end
|
156
|
-
|
157
|
-
# Some return, default, or valid values need to be in backticks. Instead of fu in the handler or code_object, this just does the change on the front.
|
158
|
-
# @param value
|
159
|
-
# any string
|
160
|
-
# @return [String] value or value in backticks if it is in a list
|
161
|
-
def value_string(value)
|
162
|
-
to_symbol = %w[undef true false]
|
163
|
-
if to_symbol.include? value
|
164
|
-
return "`#{value}`"
|
165
|
-
else
|
166
|
-
return value
|
167
|
-
end
|
190
|
+
clean_link(name)
|
168
191
|
end
|
169
192
|
|
170
193
|
def private?
|
@@ -174,18 +197,18 @@ module PuppetStrings::Markdown
|
|
174
197
|
def word_wrap(text, line_width: 120, break_sequence: "\n")
|
175
198
|
return unless text
|
176
199
|
|
177
|
-
text.split("\n").
|
178
|
-
line.length > line_width ? line.gsub(
|
179
|
-
|
200
|
+
text.split("\n").map! { |line|
|
201
|
+
line.length > line_width ? line.gsub(%r{(.{1,#{line_width}})(\s+|$)}, "\\1#{break_sequence}").strip : line
|
202
|
+
} * break_sequence
|
180
203
|
end
|
181
204
|
|
182
205
|
# @return [String] full markdown rendering of a component
|
183
206
|
def render(template)
|
207
|
+
file = File.join(File.dirname(__FILE__), 'templates', template)
|
184
208
|
begin
|
185
|
-
|
186
|
-
ERB.new(File.read(file), nil, '-').result(binding)
|
209
|
+
PuppetStrings::Markdown.erb(file).result(binding)
|
187
210
|
rescue StandardError => e
|
188
|
-
|
211
|
+
raise "Processing #{@registry[:file]}:#{@registry[:line]} with #{file} => #{e}"
|
189
212
|
end
|
190
213
|
end
|
191
214
|
|
@@ -195,5 +218,17 @@ module PuppetStrings::Markdown
|
|
195
218
|
tags = @tags.select { |tag| tag[:tag_name] == name }
|
196
219
|
tags.empty? ? nil : tags
|
197
220
|
end
|
221
|
+
|
222
|
+
# Convert an input into a string appropriate for an anchor name.
|
223
|
+
#
|
224
|
+
# This converts any character not suitable for an id attribute into a '-'. Generally we're running this on Puppet identifiers for types and
|
225
|
+
# variables, so we only need to worry about the special characters ':' and '$'. With namespaces Puppet variables this should always be produce a
|
226
|
+
# unique result from a unique input, since ':' only appears in pairs, '$' only appears at the beginning, and '-' never appears.
|
227
|
+
#
|
228
|
+
# @param [String] the input to convert
|
229
|
+
# @return [String] the anchor-safe string
|
230
|
+
def clean_link(input)
|
231
|
+
input.tr('^a-zA-Z0-9_-', '-')
|
232
|
+
end
|
198
233
|
end
|
199
234
|
end
|
@@ -8,6 +8,9 @@ module PuppetStrings::Markdown
|
|
8
8
|
attr_reader :alias_of
|
9
9
|
attr_reader :functions
|
10
10
|
|
11
|
+
group_name 'Data types'
|
12
|
+
yard_types [:puppet_data_type, :puppet_data_type_alias]
|
13
|
+
|
11
14
|
def initialize(registry)
|
12
15
|
@template = 'data_type.erb'
|
13
16
|
super(registry, 'data type')
|
@@ -20,6 +23,7 @@ module PuppetStrings::Markdown
|
|
20
23
|
end
|
21
24
|
end
|
22
25
|
|
26
|
+
# Generates Markdown for a Puppet Function.
|
23
27
|
class DataType::Function < Base
|
24
28
|
def initialize(registry)
|
25
29
|
super(registry, 'data_type_function')
|
@@ -3,7 +3,11 @@
|
|
3
3
|
require 'puppet-strings/markdown/base'
|
4
4
|
|
5
5
|
module PuppetStrings::Markdown
|
6
|
+
# Generates Markdown for a Puppet Defined Type.
|
6
7
|
class DefinedType < Base
|
8
|
+
group_name 'Defined types'
|
9
|
+
yard_types [:puppet_defined_type]
|
10
|
+
|
7
11
|
def initialize(registry)
|
8
12
|
@template = 'classes_and_defines.erb'
|
9
13
|
super(registry, 'defined type')
|