puppet-strings 0.4.0 → 0.99.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 +4 -4
- data/CHANGELOG.md +122 -0
- data/COMMITTERS.md +185 -0
- data/CONTRIBUTING.md +89 -0
- data/Gemfile +38 -0
- data/JSON.md +511 -0
- data/LICENSE +13 -0
- data/README.md +416 -0
- data/Rakefile +49 -0
- data/lib/puppet-strings.rb +63 -0
- data/lib/puppet-strings/json.rb +49 -0
- data/lib/puppet-strings/tasks.rb +10 -0
- data/lib/puppet-strings/tasks/generate.rb +23 -0
- data/lib/puppet-strings/tasks/gh_pages.rb +43 -0
- data/lib/puppet-strings/yard.rb +96 -0
- data/lib/puppet-strings/yard/code_objects.rb +8 -0
- data/lib/puppet-strings/yard/code_objects/base.rb +14 -0
- data/lib/puppet-strings/yard/code_objects/class.rb +59 -0
- data/lib/puppet-strings/yard/code_objects/defined_type.rb +58 -0
- data/lib/puppet-strings/yard/code_objects/function.rb +93 -0
- data/lib/puppet-strings/yard/code_objects/group.rb +30 -0
- data/lib/puppet-strings/yard/code_objects/provider.rb +93 -0
- data/lib/puppet-strings/yard/code_objects/type.rb +146 -0
- data/lib/puppet-strings/yard/handlers.rb +16 -0
- data/lib/puppet-strings/yard/handlers/puppet/base.rb +44 -0
- data/lib/puppet-strings/yard/handlers/puppet/class_handler.rb +23 -0
- data/lib/puppet-strings/yard/handlers/puppet/defined_type_handler.rb +23 -0
- data/lib/puppet-strings/yard/handlers/puppet/function_handler.rb +42 -0
- data/lib/puppet-strings/yard/handlers/ruby/base.rb +38 -0
- data/lib/puppet-strings/yard/handlers/ruby/function_handler.rb +357 -0
- data/lib/puppet-strings/yard/handlers/ruby/provider_handler.rb +113 -0
- data/lib/puppet-strings/yard/handlers/ruby/type_handler.rb +194 -0
- data/lib/puppet-strings/yard/parsers.rb +7 -0
- data/lib/puppet-strings/yard/parsers/puppet/parser.rb +70 -0
- data/lib/puppet-strings/yard/parsers/puppet/statement.rb +146 -0
- data/lib/puppet-strings/yard/tags.rb +6 -0
- data/lib/puppet-strings/yard/tags/overload_tag.rb +109 -0
- data/lib/puppet-strings/yard/tags/parameter_directive.rb +24 -0
- data/lib/puppet-strings/yard/tags/property_directive.rb +24 -0
- data/lib/puppet-strings/yard/templates/default/fulldoc/html/full_list_puppet_class.erb +9 -0
- data/lib/puppet-strings/yard/templates/default/fulldoc/html/full_list_puppet_defined_type.erb +9 -0
- data/lib/puppet-strings/yard/templates/default/fulldoc/html/full_list_puppet_function.erb +10 -0
- data/lib/puppet-strings/yard/templates/default/fulldoc/html/full_list_puppet_provider.erb +10 -0
- data/lib/puppet-strings/yard/templates/default/fulldoc/html/full_list_puppet_type.erb +9 -0
- data/lib/puppet-strings/yard/templates/default/fulldoc/html/setup.rb +64 -0
- data/lib/puppet-strings/yard/templates/default/layout/html/objects.erb +35 -0
- data/lib/puppet-strings/yard/templates/default/layout/html/setup.rb +172 -0
- data/lib/puppet-strings/yard/templates/default/puppet_class/html/box_info.erb +26 -0
- data/lib/puppet-strings/yard/templates/default/puppet_class/html/header.erb +1 -0
- data/lib/puppet-strings/yard/templates/default/puppet_class/html/overview.erb +6 -0
- data/lib/puppet-strings/yard/templates/default/puppet_class/html/setup.rb +14 -0
- data/lib/puppet-strings/yard/templates/default/puppet_class/html/source.erb +12 -0
- data/lib/puppet-strings/yard/templates/default/puppet_defined_type/html/box_info.erb +10 -0
- data/lib/puppet-strings/yard/templates/default/puppet_defined_type/html/header.erb +1 -0
- data/lib/puppet-strings/yard/templates/default/puppet_defined_type/html/overview.erb +6 -0
- data/lib/puppet-strings/yard/templates/default/puppet_defined_type/html/setup.rb +5 -0
- data/lib/puppet-strings/yard/templates/default/puppet_defined_type/html/source.erb +12 -0
- data/lib/puppet-strings/yard/templates/default/puppet_function/html/box_info.erb +14 -0
- data/lib/puppet-strings/yard/templates/default/puppet_function/html/header.erb +1 -0
- data/lib/puppet-strings/yard/templates/default/puppet_function/html/overview.erb +18 -0
- data/lib/puppet-strings/yard/templates/default/puppet_function/html/setup.rb +5 -0
- data/lib/puppet-strings/yard/templates/default/puppet_function/html/source.erb +12 -0
- data/lib/puppet-strings/yard/templates/default/puppet_provider/html/box_info.erb +14 -0
- data/lib/puppet-strings/yard/templates/default/puppet_provider/html/collection.erb +10 -0
- data/lib/puppet-strings/yard/templates/default/puppet_provider/html/features.erb +12 -0
- data/lib/puppet-strings/yard/templates/default/puppet_provider/html/header.erb +1 -0
- data/lib/puppet-strings/yard/templates/default/puppet_provider/html/overview.erb +6 -0
- data/lib/puppet-strings/yard/templates/default/puppet_provider/html/setup.rb +29 -0
- data/lib/puppet-strings/yard/templates/default/puppet_type/html/box_info.erb +20 -0
- data/lib/puppet-strings/yard/templates/default/puppet_type/html/features.erb +13 -0
- data/lib/puppet-strings/yard/templates/default/puppet_type/html/header.erb +1 -0
- data/lib/puppet-strings/yard/templates/default/puppet_type/html/overview.erb +6 -0
- data/lib/puppet-strings/yard/templates/default/puppet_type/html/parameters.erb +35 -0
- data/lib/puppet-strings/yard/templates/default/puppet_type/html/setup.rb +32 -0
- data/lib/puppet-strings/yard/templates/default/tags/html/puppet_overload.erb +12 -0
- data/lib/puppet-strings/yard/templates/default/tags/setup.rb +15 -0
- data/lib/puppet/application/strings.rb +1 -0
- data/lib/puppet/face/strings.rb +80 -39
- data/spec/acceptance/emit_json_options.rb +41 -0
- data/spec/acceptance/lib/util.rb +15 -0
- data/spec/acceptance/running_strings_generate.rb +54 -0
- data/spec/fixtures/acceptance/modules/test/functions/add.pp +9 -0
- data/spec/fixtures/acceptance/modules/test/lib/puppet/functions/4x_function.rb +5 -0
- data/spec/fixtures/acceptance/modules/test/lib/puppet/parser/functions/function3x.rb +2 -0
- data/spec/fixtures/acceptance/modules/test/lib/puppet/provider/server/linux.rb +9 -0
- data/spec/fixtures/acceptance/modules/test/lib/puppet/type/database.rb +15 -0
- data/spec/fixtures/acceptance/modules/test/manifests/init.pp +27 -0
- data/spec/fixtures/acceptance/modules/test/manifests/triple_nested_classes.pp +27 -0
- data/spec/fixtures/acceptance/modules/test/metadata.json +6 -0
- data/spec/fixtures/unit/json/output.json +348 -0
- data/spec/fixtures/unit/json/output_without_puppet_function.json +301 -0
- data/spec/spec_helper.rb +21 -0
- data/spec/spec_helper_acceptance.rb +27 -0
- data/spec/unit/puppet-strings/json_spec.rb +136 -0
- data/spec/unit/puppet-strings/yard/handlers/puppet/class_handler_spec.rb +155 -0
- data/spec/unit/puppet-strings/yard/handlers/puppet/defined_type_handler_spec.rb +155 -0
- data/spec/unit/puppet-strings/yard/handlers/puppet/function_handler_spec.rb +169 -0
- data/spec/unit/puppet-strings/yard/handlers/ruby/function_handler_spec.rb +613 -0
- data/spec/unit/puppet-strings/yard/handlers/ruby/provider_handler_spec.rb +90 -0
- data/spec/unit/puppet-strings/yard/handlers/ruby/type_handler_spec.rb +214 -0
- data/spec/unit/puppet-strings/yard/parsers/puppet/parser_spec.rb +171 -0
- metadata +115 -92
- data/lib/puppet-strings/rake_tasks.rb +0 -18
- data/lib/puppet_x/puppetlabs/strings.rb +0 -64
- data/lib/puppet_x/puppetlabs/strings/actions.rb +0 -92
- data/lib/puppet_x/puppetlabs/strings/pops/yard_statement.rb +0 -79
- data/lib/puppet_x/puppetlabs/strings/pops/yard_transformer.rb +0 -47
- data/lib/puppet_x/puppetlabs/strings/util.rb +0 -65
- data/lib/puppet_x/puppetlabs/strings/yard/code_objects/defined_type_object.rb +0 -33
- data/lib/puppet_x/puppetlabs/strings/yard/code_objects/host_class_object.rb +0 -22
- data/lib/puppet_x/puppetlabs/strings/yard/code_objects/method_object.rb +0 -62
- data/lib/puppet_x/puppetlabs/strings/yard/code_objects/provider_object.rb +0 -24
- data/lib/puppet_x/puppetlabs/strings/yard/code_objects/puppet_namespace_object.rb +0 -48
- data/lib/puppet_x/puppetlabs/strings/yard/code_objects/type_object.rb +0 -42
- data/lib/puppet_x/puppetlabs/strings/yard/core_ext/yard.rb +0 -40
- data/lib/puppet_x/puppetlabs/strings/yard/handlers/base.rb +0 -13
- data/lib/puppet_x/puppetlabs/strings/yard/handlers/defined_type_handler.rb +0 -31
- data/lib/puppet_x/puppetlabs/strings/yard/handlers/heredoc_helper.rb +0 -80
- data/lib/puppet_x/puppetlabs/strings/yard/handlers/host_class_handler.rb +0 -42
- data/lib/puppet_x/puppetlabs/strings/yard/handlers/provider_handler.rb +0 -95
- data/lib/puppet_x/puppetlabs/strings/yard/handlers/puppet_3x_function_handler.rb +0 -54
- data/lib/puppet_x/puppetlabs/strings/yard/handlers/puppet_4x_function_handler.rb +0 -234
- data/lib/puppet_x/puppetlabs/strings/yard/handlers/type_handler.rb +0 -295
- data/lib/puppet_x/puppetlabs/strings/yard/json_registry_store.rb +0 -85
- data/lib/puppet_x/puppetlabs/strings/yard/monkey_patches.rb +0 -68
- data/lib/puppet_x/puppetlabs/strings/yard/parser.rb +0 -30
- data/lib/puppet_x/puppetlabs/strings/yard/tags/directives.rb +0 -9
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/definedtype/html/docstring.erb +0 -34
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/definedtype/html/header.erb +0 -5
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/definedtype/html/parameter_details.erb +0 -6
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/definedtype/html/setup.rb +0 -1
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/definedtype/setup.rb +0 -49
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/fulldoc/html/full_list_class.erb +0 -2
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/fulldoc/html/full_list_puppet_manifest.erb +0 -1
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/fulldoc/html/full_list_puppet_plugin.erb +0 -21
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/fulldoc/html/full_list_puppet_provider.erb +0 -1
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/fulldoc/html/full_list_puppet_type.erb +0 -1
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/fulldoc/html/setup.rb +0 -82
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/hostclass/html/box_info.erb +0 -22
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/hostclass/html/setup.rb +0 -1
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/hostclass/html/subclasses.erb +0 -4
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/hostclass/setup.rb +0 -21
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/html_helper.rb +0 -139
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/layout/html/setup.rb +0 -18
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/method_details/html/header.erb +0 -17
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/method_details/setup.rb +0 -21
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/method_details/text/header.erb +0 -2
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/provider/html/command_details.erb +0 -8
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/provider/html/confine_details.erb +0 -10
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/provider/html/default_details.erb +0 -10
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/provider/html/docstring.erb +0 -34
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/provider/html/feature_details.erb +0 -10
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/provider/html/header.erb +0 -5
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/provider/html/setup.rb +0 -1
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/provider/setup.rb +0 -50
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/puppetnamespace/html/box_info.erb +0 -11
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/puppetnamespace/html/header.erb +0 -5
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/puppetnamespace/html/method_details_list.erb +0 -53
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/puppetnamespace/html/method_summary.erb +0 -20
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/puppetnamespace/html/setup.rb +0 -1
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/puppetnamespace/setup.rb +0 -91
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/template_helper.rb +0 -192
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/type/html/docstring.erb +0 -34
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/type/html/header.erb +0 -5
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/type/html/parameter_details.erb +0 -12
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/type/html/provider_details.erb +0 -10
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/type/html/setup.rb +0 -1
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/type/setup.rb +0 -55
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# The root module for Puppet Strings.
|
|
2
|
+
module PuppetStrings
|
|
3
|
+
# The glob patterns used to search for files to document.
|
|
4
|
+
DEFAULT_SEARCH_PATTERNS = %w(
|
|
5
|
+
manifests/**/*.pp
|
|
6
|
+
functions/**/*.pp
|
|
7
|
+
types/**/*.pp
|
|
8
|
+
lib/**/*.rb
|
|
9
|
+
).freeze
|
|
10
|
+
|
|
11
|
+
# Generates documentation.
|
|
12
|
+
# @param [Array<String>] search_patterns The search patterns (e.g. manifests/**/*.pp) to look for files.
|
|
13
|
+
# @param [Hash] options The options hash.
|
|
14
|
+
# @option options [Boolean] :debug Enable YARD debug output.
|
|
15
|
+
# @option options [Boolean] :backtrace Enable YARD backtraces.
|
|
16
|
+
# @option options [String] :markup The YARD markup format to use (defaults to 'markdown').
|
|
17
|
+
# @option options [String] :json Enables JSON output to the given file. If the file is nil, STDOUT is used.
|
|
18
|
+
# @option options [Array<String>] :yard_args The arguments to pass to yard.
|
|
19
|
+
# @return [void]
|
|
20
|
+
def self.generate(search_patterns = DEFAULT_SEARCH_PATTERNS, options = {})
|
|
21
|
+
require 'puppet-strings/yard'
|
|
22
|
+
PuppetStrings::Yard.setup!
|
|
23
|
+
|
|
24
|
+
# Format the arguments to YARD
|
|
25
|
+
args = ['doc']
|
|
26
|
+
args << '--debug' if options[:debug]
|
|
27
|
+
args << '--backtrace' if options[:backtrace]
|
|
28
|
+
args << "-m#{options[:markup] || 'markdown'}"
|
|
29
|
+
|
|
30
|
+
render_as_json = options.key? :json
|
|
31
|
+
json_file = nil
|
|
32
|
+
if render_as_json
|
|
33
|
+
json_file = options[:json]
|
|
34
|
+
# Disable output and prevent stats/progress when writing to STDOUT
|
|
35
|
+
args << '-n'
|
|
36
|
+
args << '-q' unless json_file
|
|
37
|
+
args << '--no-stats' unless json_file
|
|
38
|
+
args << '--no-progress' unless json_file
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
yard_args = options[:yard_args]
|
|
42
|
+
args += yard_args if yard_args
|
|
43
|
+
args += search_patterns
|
|
44
|
+
|
|
45
|
+
# Run YARD
|
|
46
|
+
YARD::CLI::Yardoc.run(*args)
|
|
47
|
+
|
|
48
|
+
# If outputting JSON, render the output
|
|
49
|
+
if render_as_json
|
|
50
|
+
require 'puppet-strings/json'
|
|
51
|
+
PuppetStrings::Json.render(json_file)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Runs the YARD documentation server.
|
|
56
|
+
# @param [Array<String>] args The arguments to YARD.
|
|
57
|
+
def self.run_server(*args)
|
|
58
|
+
require 'puppet-strings/yard'
|
|
59
|
+
PuppetStrings::Yard.setup!
|
|
60
|
+
|
|
61
|
+
YARD::CLI::Server.run(*args)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
# The module for JSON related functionality.
|
|
4
|
+
module PuppetStrings::Json
|
|
5
|
+
# Renders the current YARD registry as JSON to the given file (or STDOUT if nil).
|
|
6
|
+
# @param [String] file The path to the output file to render the registry to. If nil, output will be to STDOUT.
|
|
7
|
+
# @return [void]
|
|
8
|
+
def self.render(file = nil)
|
|
9
|
+
document = {
|
|
10
|
+
puppet_classes: YARD::Registry.all(:puppet_class).sort_by!(&:name).map!(&:to_hash),
|
|
11
|
+
defined_types: YARD::Registry.all(:puppet_defined_type).sort_by!(&:name).map!(&:to_hash),
|
|
12
|
+
resource_types: YARD::Registry.all(:puppet_type).sort_by!(&:name).map!(&:to_hash),
|
|
13
|
+
providers: YARD::Registry.all(:puppet_provider).sort_by!(&:name).map!(&:to_hash),
|
|
14
|
+
puppet_functions: YARD::Registry.all(:puppet_function).sort_by!(&:name).map!(&:to_hash),
|
|
15
|
+
# TODO: Need Ruby documentation?
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if file
|
|
19
|
+
File.open(file, 'w') do |f|
|
|
20
|
+
f.write(JSON.pretty_generate(document))
|
|
21
|
+
f.write("\n")
|
|
22
|
+
end
|
|
23
|
+
else
|
|
24
|
+
puts JSON.pretty_generate(document)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Converts a YARD::Docstring (or String) to a docstring hash for JSON output.
|
|
29
|
+
# @param [YARD::Docstring, String] docstring The docstring to convert to a hash.
|
|
30
|
+
# @return [Hash] Returns a hash representation of the given docstring.
|
|
31
|
+
def self.docstring_to_hash(docstring)
|
|
32
|
+
hash = {}
|
|
33
|
+
hash[:text] = docstring
|
|
34
|
+
if docstring.is_a? YARD::Docstring
|
|
35
|
+
# Skip over the API tags that are public
|
|
36
|
+
tags = docstring.tags.select { |t| t.tag_name != 'api' || t.text != 'public' }.map do |t|
|
|
37
|
+
next t.to_hash if t.respond_to?(:to_hash)
|
|
38
|
+
|
|
39
|
+
tag = { tag_name: t.tag_name }
|
|
40
|
+
tag[:text] = t.text if t.text
|
|
41
|
+
tag[:types] = t.types if t.types
|
|
42
|
+
tag[:name] = t.name if t.name
|
|
43
|
+
tag
|
|
44
|
+
end
|
|
45
|
+
hash[:tags] = tags unless tags.empty?
|
|
46
|
+
end
|
|
47
|
+
hash
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'puppet-strings'
|
|
2
|
+
|
|
3
|
+
# Implements the strings:generate task.
|
|
4
|
+
namespace :strings do
|
|
5
|
+
desc 'Generate Puppet documentation with YARD.'
|
|
6
|
+
task :generate, :patterns, :debug, :backtrace, :markup, :json, :yard_args do |t, args|
|
|
7
|
+
patterns = args[:patterns]
|
|
8
|
+
patterns = patterns.split if patterns
|
|
9
|
+
patterns ||= PuppetStrings::DEFAULT_SEARCH_PATTERNS
|
|
10
|
+
|
|
11
|
+
options = {
|
|
12
|
+
debug: args[:debug] == 'true',
|
|
13
|
+
backtrace: args[:backtrace] == 'true',
|
|
14
|
+
markup: args[:markup] || 'markdown',
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
options[:json] = args[:json] if args.key? :json
|
|
18
|
+
options[:yard_args] = args[:yard_args].split if args.key? :yard_args
|
|
19
|
+
|
|
20
|
+
PuppetStrings.generate(patterns, options)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'puppet-strings/tasks'
|
|
2
|
+
|
|
3
|
+
namespace :strings do
|
|
4
|
+
namespace :gh_pages do
|
|
5
|
+
desc 'Checkout the gh-pages branch for doc generation.'
|
|
6
|
+
task :checkout do
|
|
7
|
+
if Dir.exist?('doc')
|
|
8
|
+
fail "The 'doc' directory (#{File.expand_path('doc')}) is not a Git repository! Remove it and run the Rake task again." unless Dir.exist?('doc/.git')
|
|
9
|
+
Dir.chdir('doc') do
|
|
10
|
+
system 'git checkout gh-pages'
|
|
11
|
+
system 'git pull --rebase origin gh-pages'
|
|
12
|
+
end
|
|
13
|
+
else
|
|
14
|
+
git_uri = `git config --get remote.origin.url`.strip
|
|
15
|
+
fail "Could not determine the remote URL for origin: ensure the current directory is a Git repro with a remote named 'origin'." unless $?.success?
|
|
16
|
+
|
|
17
|
+
Dir.mkdir('doc')
|
|
18
|
+
Dir.chdir('doc') do
|
|
19
|
+
system 'git init'
|
|
20
|
+
system "git remote add origin #{git_uri}"
|
|
21
|
+
system 'git pull origin gh-pages'
|
|
22
|
+
system 'git checkout -b gh-pages'
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
desc 'Push new docs to GitHub.'
|
|
28
|
+
task :push do
|
|
29
|
+
Dir.chdir('doc') do
|
|
30
|
+
system 'git add .'
|
|
31
|
+
system "git commit -m '[strings] Generated Documentation Update'"
|
|
32
|
+
system 'git push origin gh-pages -f'
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
desc 'Run checkout, generate, and push tasks.'
|
|
37
|
+
task :update => [
|
|
38
|
+
:checkout,
|
|
39
|
+
:'strings:generate',
|
|
40
|
+
:push,
|
|
41
|
+
]
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
require 'yard'
|
|
2
|
+
|
|
3
|
+
# Module for YARD related functionality.
|
|
4
|
+
module PuppetStrings::Yard
|
|
5
|
+
require 'puppet-strings/yard/code_objects'
|
|
6
|
+
require 'puppet-strings/yard/handlers'
|
|
7
|
+
require 'puppet-strings/yard/tags'
|
|
8
|
+
require 'puppet-strings/yard/parsers'
|
|
9
|
+
|
|
10
|
+
# Sets up YARD for use with puppet-strings.
|
|
11
|
+
# @return [void]
|
|
12
|
+
def self.setup!
|
|
13
|
+
# Register the template path
|
|
14
|
+
YARD::Templates::Engine.register_template_path(File.join(File.dirname(__FILE__), 'yard', 'templates'))
|
|
15
|
+
|
|
16
|
+
# Register the Puppet parser
|
|
17
|
+
YARD::Parser::SourceParser.register_parser_type(:puppet, PuppetStrings::Yard::Parsers::Puppet::Parser, ['pp'])
|
|
18
|
+
|
|
19
|
+
# Register our handlers
|
|
20
|
+
YARD::Handlers::Processor.register_handler_namespace(:puppet, PuppetStrings::Yard::Handlers::Puppet)
|
|
21
|
+
YARD::Handlers::Processor.register_handler_namespace(:puppet_ruby, PuppetStrings::Yard::Handlers::Ruby)
|
|
22
|
+
|
|
23
|
+
# Register the tag directives
|
|
24
|
+
PuppetStrings::Yard::Tags::ParameterDirective.register!
|
|
25
|
+
PuppetStrings::Yard::Tags::PropertyDirective.register!
|
|
26
|
+
|
|
27
|
+
# Ignore documentation on Puppet DSL calls
|
|
28
|
+
# This prevents the YARD DSL parser from emitting warnings for Puppet's Ruby DSL
|
|
29
|
+
YARD::Handlers::Ruby::DSLHandlerMethods::IGNORE_METHODS['create_function'] = true
|
|
30
|
+
YARD::Handlers::Ruby::DSLHandlerMethods::IGNORE_METHODS['newtype'] = true
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Monkey patch YARD::CLI::Yardoc#all_objects to return our custom code objects.
|
|
35
|
+
# @private
|
|
36
|
+
class YARD::CLI::Yardoc
|
|
37
|
+
def all_objects
|
|
38
|
+
YARD::Registry.all(
|
|
39
|
+
:root,
|
|
40
|
+
:module,
|
|
41
|
+
:class,
|
|
42
|
+
:puppet_class,
|
|
43
|
+
:puppet_defined_type,
|
|
44
|
+
:puppet_type,
|
|
45
|
+
:puppet_provider,
|
|
46
|
+
:puppet_function
|
|
47
|
+
)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Monkey patch the stats object to return statistics for our objects.
|
|
52
|
+
# This is the recommended way to add custom stats.
|
|
53
|
+
# @private
|
|
54
|
+
class YARD::CLI::Stats
|
|
55
|
+
def stats_for_puppet_classes
|
|
56
|
+
output 'Puppet Classes', *type_statistics_all(:puppet_class)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def stats_for_puppet_defined_types
|
|
60
|
+
output 'Puppet Defined Types', *type_statistics_all(:puppet_defined_type)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def stats_for_puppet_types
|
|
64
|
+
output 'Puppet Types', *type_statistics_all(:puppet_type)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def stats_for_puppet_providers
|
|
68
|
+
output 'Puppet Providers', *type_statistics_all(:puppet_provider)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def stats_for_puppet_functions
|
|
72
|
+
output 'Puppet Functions', *type_statistics_all(:puppet_function)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def output(name, data, undoc = nil)
|
|
76
|
+
# Monkey patch output to accommodate our larger header widths
|
|
77
|
+
@total += data if data.is_a?(Integer) && undoc
|
|
78
|
+
@undocumented += undoc if undoc.is_a?(Integer)
|
|
79
|
+
data =
|
|
80
|
+
if undoc
|
|
81
|
+
('%5s (% 5d undocumented)' % [data, undoc])
|
|
82
|
+
else
|
|
83
|
+
'%5s' % data
|
|
84
|
+
end
|
|
85
|
+
log.puts('%-21s %s' % [name + ':', data])
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# This differs from the YARD implementation in that it considers
|
|
89
|
+
# a docstring without text but with tags to be undocumented.
|
|
90
|
+
def type_statistics_all(type)
|
|
91
|
+
objs = all_objects.select {|m| m.type == type }
|
|
92
|
+
undoc = objs.find_all {|m| m.docstring.all.empty? }
|
|
93
|
+
@undoc_list |= undoc if @undoc_list
|
|
94
|
+
[objs.size, undoc.size]
|
|
95
|
+
end
|
|
96
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# The module for custom YARD code objects.
|
|
2
|
+
module PuppetStrings::Yard::CodeObjects
|
|
3
|
+
require 'puppet-strings/yard/code_objects/class'
|
|
4
|
+
require 'puppet-strings/yard/code_objects/defined_type'
|
|
5
|
+
require 'puppet-strings/yard/code_objects/type'
|
|
6
|
+
require 'puppet-strings/yard/code_objects/provider'
|
|
7
|
+
require 'puppet-strings/yard/code_objects/function'
|
|
8
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Implements the base code object.
|
|
2
|
+
class PuppetStrings::Yard::CodeObjects::Base < YARD::CodeObjects::NamespaceObject
|
|
3
|
+
# Allocates a new code object.
|
|
4
|
+
# @param [Array] args The arguments to initialize the code object with.
|
|
5
|
+
# @return Returns the code object.
|
|
6
|
+
def self.new(*args)
|
|
7
|
+
# Skip the super class' implementation because it detects :: in names and this will cause namespaces in the output we don't want
|
|
8
|
+
object = Object.class.instance_method(:new).bind(self).call(*args)
|
|
9
|
+
existing = YARD::Registry.at(object.path)
|
|
10
|
+
object = existing if existing && existing.class == self
|
|
11
|
+
yield(object) if block_given?
|
|
12
|
+
object
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require 'puppet-strings/yard/code_objects/group'
|
|
2
|
+
|
|
3
|
+
# Implements the group for Puppet classes.
|
|
4
|
+
class PuppetStrings::Yard::CodeObjects::Classes < PuppetStrings::Yard::CodeObjects::Group
|
|
5
|
+
# Gets the singleton instance of the group.
|
|
6
|
+
# @return Returns the singleton instance of the group.
|
|
7
|
+
def self.instance
|
|
8
|
+
super(:puppet_classes)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Gets the display name of the group.
|
|
12
|
+
# @param [Boolean] prefix whether to show a prefix. Ignored for Puppet group namespaces.
|
|
13
|
+
# @return [String] Returns the display name of the group.
|
|
14
|
+
def name(prefix = false)
|
|
15
|
+
'Puppet Classes'
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Implements the Puppet class code object.
|
|
20
|
+
class PuppetStrings::Yard::CodeObjects::Class < PuppetStrings::Yard::CodeObjects::Base
|
|
21
|
+
attr_reader :statement
|
|
22
|
+
attr_reader :parameters
|
|
23
|
+
|
|
24
|
+
# Initializes a Puppet class code object.
|
|
25
|
+
# @param [PuppetStrings::Parsers::ClassStatement] statement The class statement that was parsed.
|
|
26
|
+
# @return [void]
|
|
27
|
+
def initialize(statement)
|
|
28
|
+
@statement = statement
|
|
29
|
+
@parameters = statement.parameters.map { |p| [p.name, p.value] }
|
|
30
|
+
super(PuppetStrings::Yard::CodeObjects::Classes.instance, statement.name)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Gets the type of the code object.
|
|
34
|
+
# @return Returns the type of the code object.
|
|
35
|
+
def type
|
|
36
|
+
:puppet_class
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Gets the source of the code object.
|
|
40
|
+
# @return Returns the source of the code object.
|
|
41
|
+
def source
|
|
42
|
+
@statement.source
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Converts the code object to a hash representation.
|
|
46
|
+
# @return [Hash] Returns a hash representation of the code object.
|
|
47
|
+
def to_hash
|
|
48
|
+
hash = {}
|
|
49
|
+
hash[:name] = name
|
|
50
|
+
hash[:file] = file
|
|
51
|
+
hash[:line] = line
|
|
52
|
+
hash[:inherits] = statement.parent_class if statement.parent_class
|
|
53
|
+
hash[:docstring] = PuppetStrings::Json.docstring_to_hash(docstring)
|
|
54
|
+
defaults = Hash[*parameters.select{ |p| !p[1].nil? }.flatten]
|
|
55
|
+
hash[:defaults] = defaults unless defaults.empty?
|
|
56
|
+
hash[:source] = source unless source && source.empty?
|
|
57
|
+
hash
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
require 'puppet-strings/yard/code_objects/group'
|
|
2
|
+
|
|
3
|
+
# Implements the group for Puppet defined types.
|
|
4
|
+
class PuppetStrings::Yard::CodeObjects::DefinedTypes < PuppetStrings::Yard::CodeObjects::Group
|
|
5
|
+
# Gets the singleton instance of the group.
|
|
6
|
+
# @return Returns the singleton instance of the group.
|
|
7
|
+
def self.instance
|
|
8
|
+
super(:puppet_defined_types)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Gets the display name of the group.
|
|
12
|
+
# @param [Boolean] prefix whether to show a prefix. Ignored for Puppet group namespaces.
|
|
13
|
+
# @return [String] Returns the display name of the group.
|
|
14
|
+
def name(prefix = false)
|
|
15
|
+
'Defined Types'
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Implements the Puppet defined type code object.
|
|
20
|
+
class PuppetStrings::Yard::CodeObjects::DefinedType < PuppetStrings::Yard::CodeObjects::Base
|
|
21
|
+
attr_reader :statement
|
|
22
|
+
attr_reader :parameters
|
|
23
|
+
|
|
24
|
+
# Initializes a Puppet defined type code object.
|
|
25
|
+
# @param [PuppetStrings::Parsers::DefinedTypeStatement] statement The defined type statement that was parsed.
|
|
26
|
+
# @return [void]
|
|
27
|
+
def initialize(statement)
|
|
28
|
+
@statement = statement
|
|
29
|
+
@parameters = statement.parameters.map { |p| [p.name, p.value] }
|
|
30
|
+
super(PuppetStrings::Yard::CodeObjects::DefinedTypes.instance, statement.name)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Gets the type of the code object.
|
|
34
|
+
# @return Returns the type of the code object.
|
|
35
|
+
def type
|
|
36
|
+
:puppet_defined_type
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Gets the source of the code object.
|
|
40
|
+
# @return Returns the source of the code object.
|
|
41
|
+
def source
|
|
42
|
+
@statement.source
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Converts the code object to a hash representation.
|
|
46
|
+
# @return [Hash] Returns a hash representation of the code object.
|
|
47
|
+
def to_hash
|
|
48
|
+
hash = {}
|
|
49
|
+
hash[:name] = name
|
|
50
|
+
hash[:file] = file
|
|
51
|
+
hash[:line] = line
|
|
52
|
+
hash[:docstring] = PuppetStrings::Json.docstring_to_hash(docstring)
|
|
53
|
+
defaults = Hash[*parameters.select{ |p| !p[1].nil? }.flatten]
|
|
54
|
+
hash[:defaults] = defaults unless defaults.empty?
|
|
55
|
+
hash[:source] = source unless source && source.empty?
|
|
56
|
+
hash
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
require 'puppet-strings/yard/code_objects/group'
|
|
2
|
+
|
|
3
|
+
# Implements the group for Puppet functions.
|
|
4
|
+
class PuppetStrings::Yard::CodeObjects::Functions < PuppetStrings::Yard::CodeObjects::Group
|
|
5
|
+
# Gets the singleton instance of the group.
|
|
6
|
+
# @param [Symbol] type The function type to get the group for.
|
|
7
|
+
# @return Returns the singleton instance of the group.
|
|
8
|
+
def self.instance(type)
|
|
9
|
+
super("puppet_functions_#{type}".intern)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Gets the display name of the group.
|
|
13
|
+
# @param [Boolean] prefix whether to show a prefix. Ignored for Puppet group namespaces.
|
|
14
|
+
# @return [String] Returns the display name of the group.
|
|
15
|
+
def name(prefix = false)
|
|
16
|
+
'Puppet Functions'
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Implements the Puppet function code object.
|
|
21
|
+
class PuppetStrings::Yard::CodeObjects::Function < PuppetStrings::Yard::CodeObjects::Base
|
|
22
|
+
# Identifier for 3.x Ruby API functions
|
|
23
|
+
RUBY_3X = :ruby3x
|
|
24
|
+
# Identifier for 4.x Ruby API functions
|
|
25
|
+
RUBY_4X = :ruby4x
|
|
26
|
+
# Identifier for Puppet language functions
|
|
27
|
+
PUPPET = :puppet
|
|
28
|
+
|
|
29
|
+
attr_accessor :parameters
|
|
30
|
+
|
|
31
|
+
# Initializes a Puppet function code object.
|
|
32
|
+
# @param [String] name The name of the function.
|
|
33
|
+
# @param [Symbol] function_type The type of function (e.g. :ruby3x, :ruby4x, :puppet)
|
|
34
|
+
# @return [void]
|
|
35
|
+
def initialize(name, function_type)
|
|
36
|
+
super(PuppetStrings::Yard::CodeObjects::Functions.instance(function_type), name)
|
|
37
|
+
@parameters = []
|
|
38
|
+
@function_type = function_type
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Gets the type of the code object.
|
|
42
|
+
# @return Returns the type of the code object.
|
|
43
|
+
def type
|
|
44
|
+
:puppet_function
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Gets the function type display string.
|
|
48
|
+
# @return Returns the function type display string.
|
|
49
|
+
def function_type
|
|
50
|
+
case @function_type
|
|
51
|
+
when RUBY_3X
|
|
52
|
+
'Ruby 3.x API'
|
|
53
|
+
when RUBY_4X
|
|
54
|
+
'Ruby 4.x API'
|
|
55
|
+
else
|
|
56
|
+
'Puppet Language'
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Gets the Puppet signature of the function (single overload only).
|
|
61
|
+
# @return [String] Returns the Puppet signature of the function.
|
|
62
|
+
def signature
|
|
63
|
+
return '' if self.has_tag? :overload
|
|
64
|
+
tags = self.tags(:param)
|
|
65
|
+
args = @parameters.map do |parameter|
|
|
66
|
+
name, default = parameter
|
|
67
|
+
tag = tags.find { |tag| tag.name == name } if tags
|
|
68
|
+
type = tag && tag.types ? "#{tag.type} " : 'Any '
|
|
69
|
+
prefix = "#{name[0]}" if name.start_with?('*', '&')
|
|
70
|
+
name = name[1..-1] if prefix
|
|
71
|
+
default = " = #{default}" if default
|
|
72
|
+
"#{type}#{prefix}$#{name}#{default}"
|
|
73
|
+
end.join(', ')
|
|
74
|
+
@name.to_s + '(' + args + ')'
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Converts the code object to a hash representation.
|
|
78
|
+
# @return [Hash] Returns a hash representation of the code object.
|
|
79
|
+
def to_hash
|
|
80
|
+
hash = {}
|
|
81
|
+
hash[:name] = name
|
|
82
|
+
hash[:file] = file
|
|
83
|
+
hash[:line] = line
|
|
84
|
+
hash[:type] = @function_type.to_s
|
|
85
|
+
signature = self.signature
|
|
86
|
+
hash[:signature] = signature unless signature.empty?
|
|
87
|
+
hash[:docstring] = PuppetStrings::Json.docstring_to_hash(docstring)
|
|
88
|
+
defaults = Hash[*parameters.select{ |p| !p[1].nil? }.flatten]
|
|
89
|
+
hash[:defaults] = defaults unless defaults.empty?
|
|
90
|
+
hash[:source] = source unless source && source.empty?
|
|
91
|
+
hash
|
|
92
|
+
end
|
|
93
|
+
end
|