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,30 @@
|
|
|
1
|
+
require 'puppet-strings/yard/code_objects/base'
|
|
2
|
+
|
|
3
|
+
# Implements the base class for "groups".
|
|
4
|
+
#
|
|
5
|
+
# A group behaves like a YARD namespace object, but displays differently in the HTML output.
|
|
6
|
+
class PuppetStrings::Yard::CodeObjects::Group < PuppetStrings::Yard::CodeObjects::Base
|
|
7
|
+
# Gets the singleton instance of the group.
|
|
8
|
+
# @param [Symbol] key The key to lookup the group for.
|
|
9
|
+
# @return Returns the singleton instance of the group.
|
|
10
|
+
def self.instance(key)
|
|
11
|
+
instance = P(:root, key)
|
|
12
|
+
return instance unless instance.is_a?(YARD::CodeObjects::Proxy)
|
|
13
|
+
instance = self.new(:root, key)
|
|
14
|
+
instance.visibility = :hidden
|
|
15
|
+
P(:root).children << instance
|
|
16
|
+
instance
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Gets the path to the group.
|
|
20
|
+
# @return [String] Returns the path to the group.
|
|
21
|
+
def path
|
|
22
|
+
@name.to_s
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Gets the type of the group.
|
|
26
|
+
# @return [Symbol] Returns the type of the group.
|
|
27
|
+
def type
|
|
28
|
+
@name
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
require 'puppet-strings/yard/code_objects/group'
|
|
2
|
+
|
|
3
|
+
# Implements the group for Puppet providers.
|
|
4
|
+
class PuppetStrings::Yard::CodeObjects::Providers < PuppetStrings::Yard::CodeObjects::Group
|
|
5
|
+
# Gets the singleton instance of the group.
|
|
6
|
+
# @param [String] type The resource type name for the provider.
|
|
7
|
+
# @return Returns the singleton instance of the group.
|
|
8
|
+
def self.instance(type)
|
|
9
|
+
super("puppet_providers_#{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
|
+
'Providers'
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Implements the Puppet provider code object.
|
|
21
|
+
class PuppetStrings::Yard::CodeObjects::Provider < PuppetStrings::Yard::CodeObjects::Base
|
|
22
|
+
attr_reader :type_name, :confines, :features, :defaults, :commands
|
|
23
|
+
|
|
24
|
+
# Initializes a Puppet provider code object.
|
|
25
|
+
# @param [String] type_name The resource type name for the provider.
|
|
26
|
+
# @param [String] name The name of the provider.s
|
|
27
|
+
# @return [void]
|
|
28
|
+
def initialize(type_name, name)
|
|
29
|
+
@type_name = type_name
|
|
30
|
+
super(PuppetStrings::Yard::CodeObjects::Providers.instance(type_name), 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_provider
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Adds a confine to the provider.
|
|
40
|
+
# @param [String] key The confine's key.
|
|
41
|
+
# @param [String] value The confine's value.
|
|
42
|
+
# @return [void]
|
|
43
|
+
def add_confine(key, value)
|
|
44
|
+
return unless key && value
|
|
45
|
+
@confines ||= {}
|
|
46
|
+
@confines[key] = value
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Adds a feature to the provider.
|
|
50
|
+
# @param [String] feature The feature to add to the provider.
|
|
51
|
+
# @return [void]
|
|
52
|
+
def add_feature(feature)
|
|
53
|
+
return unless feature
|
|
54
|
+
@features ||= []
|
|
55
|
+
@features << feature
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Adds a default to the provider.
|
|
59
|
+
# @param [String] key The default's key.
|
|
60
|
+
# @param [String] value The default's value.
|
|
61
|
+
# @return [void]
|
|
62
|
+
def add_default(key, value)
|
|
63
|
+
return unless key && value
|
|
64
|
+
@defaults ||= {}
|
|
65
|
+
@defaults[key] = value
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Adds a command to the provider.
|
|
69
|
+
# @param [String] key The command's key.
|
|
70
|
+
# @param [String] value The command's value.
|
|
71
|
+
# @return [void]
|
|
72
|
+
def add_command(key, value)
|
|
73
|
+
return unless key && value
|
|
74
|
+
@commands ||= {}
|
|
75
|
+
@commands[key] = value
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Converts the code object to a hash representation.
|
|
79
|
+
# @return [Hash] Returns a hash representation of the code object.
|
|
80
|
+
def to_hash
|
|
81
|
+
hash = {}
|
|
82
|
+
hash[:name] = name
|
|
83
|
+
hash[:type_name] = type_name
|
|
84
|
+
hash[:file] = file
|
|
85
|
+
hash[:line] = line
|
|
86
|
+
hash[:docstring] = PuppetStrings::Json.docstring_to_hash(docstring)
|
|
87
|
+
hash[:confines] = confines if confines && !confines.empty?
|
|
88
|
+
hash[:features] = features if features && !features.empty?
|
|
89
|
+
hash[:defaults] = defaults if defaults && !defaults.empty?
|
|
90
|
+
hash[:commands] = commands if commands && !commands.empty?
|
|
91
|
+
hash
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
require 'puppet-strings/yard/code_objects/group'
|
|
2
|
+
|
|
3
|
+
# Implements the group for Puppet resource types.
|
|
4
|
+
class PuppetStrings::Yard::CodeObjects::Types < 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_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
|
+
'Resource Types'
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Implements the Puppet resource type code object.
|
|
20
|
+
class PuppetStrings::Yard::CodeObjects::Type < PuppetStrings::Yard::CodeObjects::Base
|
|
21
|
+
# Represents a resource type parameter.
|
|
22
|
+
class Parameter
|
|
23
|
+
attr_reader :name, :values, :aliases
|
|
24
|
+
attr_accessor :docstring, :isnamevar, :default
|
|
25
|
+
|
|
26
|
+
# Initializes a resource type parameter or property.
|
|
27
|
+
# @param [String] name The name of the parameter or property.
|
|
28
|
+
# @param [String] docstring The docstring for the parameter or property.s
|
|
29
|
+
def initialize(name, docstring = nil)
|
|
30
|
+
@name = name
|
|
31
|
+
@docstring = docstring || ''
|
|
32
|
+
@values = []
|
|
33
|
+
@aliases = {}
|
|
34
|
+
@isnamevar = false
|
|
35
|
+
@default = nil
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Adds a value to the parameter or property.
|
|
39
|
+
# @param [String] value The value to add.
|
|
40
|
+
# @return [void]
|
|
41
|
+
def add(value)
|
|
42
|
+
@values << value
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Aliases a value to another value.
|
|
46
|
+
# @param [String] new The new (alias) value.
|
|
47
|
+
# @param [String] old The old (existing) value.
|
|
48
|
+
# @return [void]
|
|
49
|
+
def alias(new, old)
|
|
50
|
+
@values << new unless @values.include? new
|
|
51
|
+
@aliases[new] = old
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Converts the parameter to a hash representation.
|
|
55
|
+
# @return [Hash] Returns a hash representation of the parameter.
|
|
56
|
+
def to_hash
|
|
57
|
+
hash = {}
|
|
58
|
+
hash[:name] = name
|
|
59
|
+
hash[:description] = docstring unless docstring.empty?
|
|
60
|
+
hash[:values] = values unless values.empty?
|
|
61
|
+
hash[:aliases] = aliases unless aliases.empty?
|
|
62
|
+
hash[:isnamevar] = true if isnamevar
|
|
63
|
+
hash[:default] = default if default
|
|
64
|
+
hash
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Represents a resource type property (same attributes as a parameter).
|
|
69
|
+
class Property < Parameter
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Represents a resource type feature.
|
|
73
|
+
class Feature
|
|
74
|
+
attr_reader :name, :docstring
|
|
75
|
+
|
|
76
|
+
# Initializes a new feature.
|
|
77
|
+
# @param [String] name The name of the feature.
|
|
78
|
+
# @param [String] docstring The docstring of the feature.
|
|
79
|
+
def initialize(name, docstring)
|
|
80
|
+
@name = name
|
|
81
|
+
@docstring = docstring
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Converts the feature to a hash representation.
|
|
85
|
+
# @return [Hash] Returns a hash representation of the feature.
|
|
86
|
+
def to_hash
|
|
87
|
+
hash = {}
|
|
88
|
+
hash[:name] = name
|
|
89
|
+
hash[:description] = docstring unless docstring.empty?
|
|
90
|
+
hash
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
attr_reader :properties, :parameters, :features
|
|
95
|
+
|
|
96
|
+
# Initializes a new resource type.
|
|
97
|
+
# @param [String] name The resource type name.
|
|
98
|
+
# @return [void]
|
|
99
|
+
def initialize(name)
|
|
100
|
+
super(PuppetStrings::Yard::CodeObjects::Types.instance, name)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# Gets the type of the code object.
|
|
104
|
+
# @return Returns the type of the code object.
|
|
105
|
+
def type
|
|
106
|
+
:puppet_type
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Adds a parameter to the resource type
|
|
110
|
+
# @param [PuppetStrings::Yard::CodeObjects::Type::Parameter] parameter The parameter to add.
|
|
111
|
+
# @return [void]
|
|
112
|
+
def add_parameter(parameter)
|
|
113
|
+
@parameters ||= []
|
|
114
|
+
@parameters << parameter
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# Adds a property to the resource type
|
|
118
|
+
# @param [PuppetStrings::Yard::CodeObjects::Type::Property] property The property to add.
|
|
119
|
+
# @return [void]
|
|
120
|
+
def add_property(property)
|
|
121
|
+
@properties ||= []
|
|
122
|
+
@properties << property
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Adds a feature to the resource type.
|
|
126
|
+
# @param [PuppetStrings::Yard::CodeObjects::Type::Feature] feature The feature to add.
|
|
127
|
+
# @return [void]
|
|
128
|
+
def add_feature(feature)
|
|
129
|
+
@features ||= []
|
|
130
|
+
@features << feature
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Converts the code object to a hash representation.
|
|
134
|
+
# @return [Hash] Returns a hash representation of the code object.
|
|
135
|
+
def to_hash
|
|
136
|
+
hash = {}
|
|
137
|
+
hash[:name] = name
|
|
138
|
+
hash[:file] = file
|
|
139
|
+
hash[:line] = line
|
|
140
|
+
hash[:docstring] = PuppetStrings::Json.docstring_to_hash(docstring)
|
|
141
|
+
hash[:properties] = properties.map(&:to_hash) if properties && !properties.empty?
|
|
142
|
+
hash[:parameters] = parameters.map(&:to_hash) if parameters && !parameters.empty?
|
|
143
|
+
hash[:features] = features.map(&:to_hash) if features && !features.empty?
|
|
144
|
+
hash
|
|
145
|
+
end
|
|
146
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# The module for custom YARD handlers.
|
|
2
|
+
module PuppetStrings::Yard::Handlers
|
|
3
|
+
# The module for custom Ruby YARD handlers.
|
|
4
|
+
module Ruby
|
|
5
|
+
require 'puppet-strings/yard/handlers/ruby/type_handler'
|
|
6
|
+
require 'puppet-strings/yard/handlers/ruby/provider_handler'
|
|
7
|
+
require 'puppet-strings/yard/handlers/ruby/function_handler'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# The module for custom Puppet YARD handlers.
|
|
11
|
+
module Puppet
|
|
12
|
+
require 'puppet-strings/yard/handlers/puppet/class_handler'
|
|
13
|
+
require 'puppet-strings/yard/handlers/puppet/defined_type_handler'
|
|
14
|
+
require 'puppet-strings/yard/handlers/puppet/function_handler'
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Implements the base handler for Puppet language handlers.
|
|
2
|
+
class PuppetStrings::Yard::Handlers::Puppet::Base < YARD::Handlers::Base
|
|
3
|
+
# Determine sif the handler handles the given statement.
|
|
4
|
+
# @param statement The statement that was parsed.
|
|
5
|
+
# @return [Boolean] Returns true if the statement is handled by this handler or false if not.
|
|
6
|
+
def self.handles?(statement)
|
|
7
|
+
handlers.any? {|handler| statement.is_a?(handler)}
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
protected
|
|
11
|
+
# Sets the parameter tag types for the given code object.
|
|
12
|
+
# This also performs some validation on the parameter tags.
|
|
13
|
+
# @param object The code object to set the parameter tag types for.
|
|
14
|
+
# @return [void]
|
|
15
|
+
def set_parameter_types(object)
|
|
16
|
+
# Ensure there is an actual parameter for each parameter tag
|
|
17
|
+
tags = object.tags(:param)
|
|
18
|
+
tags.each do |tag|
|
|
19
|
+
next if statement.parameters.find { |p| tag.name == p.name }
|
|
20
|
+
log.warn "The @param tag for parameter '#{tag.name}' has no matching parameter at #{statement.file}:#{statement.line}."
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Assign the types for the parameter
|
|
24
|
+
statement.parameters.each do |parameter|
|
|
25
|
+
tag = tags.find { |t| t.name == parameter.name }
|
|
26
|
+
unless tag
|
|
27
|
+
log.warn "Missing @param tag for parameter '#{parameter.name}' near #{statement.file}:#{statement.line}." unless object.docstring.empty?
|
|
28
|
+
|
|
29
|
+
# Add a tag with an empty docstring
|
|
30
|
+
object.add_tag YARD::Tags::Tag.new(:param, '', [parameter.type || 'Any'], parameter.name)
|
|
31
|
+
next
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Warn if the parameter is typed and the tag also has a type
|
|
35
|
+
log.warn "The @param tag for parameter '#{parameter.name}' should not contain a type specification near #{statement.file}:#{statement.line}: ignoring in favor of parameter type information." if parameter.type && tag.types && !tag.types.empty?
|
|
36
|
+
|
|
37
|
+
if parameter.type
|
|
38
|
+
tag.types = [parameter.type]
|
|
39
|
+
elsif !tag.types
|
|
40
|
+
tag.types = ['Any']
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'puppet-strings/yard/handlers/puppet/base'
|
|
2
|
+
require 'puppet-strings/yard/parsers'
|
|
3
|
+
require 'puppet-strings/yard/code_objects'
|
|
4
|
+
|
|
5
|
+
# Implements the handler for Puppet classes.
|
|
6
|
+
class PuppetStrings::Yard::Handlers::Puppet::ClassHandler < PuppetStrings::Yard::Handlers::Puppet::Base
|
|
7
|
+
handles PuppetStrings::Yard::Parsers::Puppet::ClassStatement
|
|
8
|
+
|
|
9
|
+
process do
|
|
10
|
+
# Register the object
|
|
11
|
+
object = PuppetStrings::Yard::CodeObjects::Class.new(statement)
|
|
12
|
+
register object
|
|
13
|
+
|
|
14
|
+
# Log a warning if missing documentation
|
|
15
|
+
log.warn "Missing documentation for Puppet class '#{object.name}' at #{statement.file}:#{statement.line}." if object.docstring.empty?
|
|
16
|
+
|
|
17
|
+
# Set the parameter types
|
|
18
|
+
set_parameter_types(object)
|
|
19
|
+
|
|
20
|
+
# Mark the class as public if it doesn't already have an api tag
|
|
21
|
+
object.add_tag YARD::Tags::Tag.new(:api, 'public') unless object.has_tag? :api
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'puppet-strings/yard/handlers/puppet/base'
|
|
2
|
+
require 'puppet-strings/yard/parsers'
|
|
3
|
+
require 'puppet-strings/yard/code_objects'
|
|
4
|
+
|
|
5
|
+
# Implements the handler for Puppet defined types.
|
|
6
|
+
class PuppetStrings::Yard::Handlers::Puppet::DefinedTypeHandler < PuppetStrings::Yard::Handlers::Puppet::Base
|
|
7
|
+
handles PuppetStrings::Yard::Parsers::Puppet::DefinedTypeStatement
|
|
8
|
+
|
|
9
|
+
process do
|
|
10
|
+
# Register the object
|
|
11
|
+
object = PuppetStrings::Yard::CodeObjects::DefinedType.new(statement)
|
|
12
|
+
register object
|
|
13
|
+
|
|
14
|
+
# Log a warning if missing documentation
|
|
15
|
+
log.warn "Missing documentation for Puppet defined type '#{object.name}' at #{statement.file}:#{statement.line}." if object.docstring.empty?
|
|
16
|
+
|
|
17
|
+
# Set the parameter types
|
|
18
|
+
set_parameter_types(object)
|
|
19
|
+
|
|
20
|
+
# Mark the defined type as public if it doesn't already have an api tag
|
|
21
|
+
object.add_tag YARD::Tags::Tag.new(:api, 'public') unless object.has_tag? :api
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require 'puppet-strings/yard/handlers/puppet/base'
|
|
2
|
+
require 'puppet-strings/yard/parsers'
|
|
3
|
+
require 'puppet-strings/yard/code_objects'
|
|
4
|
+
|
|
5
|
+
# Implements the handler for Puppet classes.
|
|
6
|
+
class PuppetStrings::Yard::Handlers::Puppet::FunctionHandler < PuppetStrings::Yard::Handlers::Puppet::Base
|
|
7
|
+
handles PuppetStrings::Yard::Parsers::Puppet::FunctionStatement
|
|
8
|
+
|
|
9
|
+
process do
|
|
10
|
+
# Register the object
|
|
11
|
+
object = PuppetStrings::Yard::CodeObjects::Function.new(statement.name, PuppetStrings::Yard::CodeObjects::Function::PUPPET)
|
|
12
|
+
object.source = statement.source
|
|
13
|
+
object.source_type = parser.parser_type
|
|
14
|
+
register object
|
|
15
|
+
|
|
16
|
+
# Log a warning if missing documentation
|
|
17
|
+
log.warn "Missing documentation for Puppet function '#{object.name}' at #{statement.file}:#{statement.line}." if object.docstring.empty?
|
|
18
|
+
|
|
19
|
+
# Set the parameter tag types
|
|
20
|
+
set_parameter_types(object)
|
|
21
|
+
|
|
22
|
+
# Add a return tag
|
|
23
|
+
add_return_tag(object)
|
|
24
|
+
|
|
25
|
+
# Set the parameters on the object
|
|
26
|
+
object.parameters = statement.parameters.map { |p| [p.name, p.value] }
|
|
27
|
+
|
|
28
|
+
# Mark the class as public if it doesn't already have an api tag
|
|
29
|
+
object.add_tag YARD::Tags::Tag.new(:api, 'public') unless object.has_tag? :api
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
def add_return_tag(object)
|
|
34
|
+
tag = object.tag(:return)
|
|
35
|
+
if tag
|
|
36
|
+
tag.types = ['Any'] unless tag.types
|
|
37
|
+
return
|
|
38
|
+
end
|
|
39
|
+
log.warn "Missing @return tag near #{statement.file}:#{statement.line}."
|
|
40
|
+
object.add_tag YARD::Tags::Tag.new(:return, '', 'Any')
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'ripper'
|
|
2
|
+
|
|
3
|
+
# Implements the base handler for Ruby language handlers.
|
|
4
|
+
class PuppetStrings::Yard::Handlers::Ruby::Base < YARD::Handlers::Ruby::Base
|
|
5
|
+
# A regular expression for detecting the start of a Ruby heredoc.
|
|
6
|
+
# Note: the first character of the heredoc start may have been cut off by YARD.
|
|
7
|
+
HEREDOC_START = /^<?<[\-~]?['"]?(\w+)['"]?[^\n]*[\n]?/
|
|
8
|
+
|
|
9
|
+
protected
|
|
10
|
+
# Converts the given Ruby AST node to a string representation.
|
|
11
|
+
# @param node The Ruby AST node to convert.
|
|
12
|
+
# @return [String] Returns a string representation of the node or nil if a string representation was not possible.
|
|
13
|
+
def node_as_string(node)
|
|
14
|
+
return nil unless node
|
|
15
|
+
case node.type
|
|
16
|
+
when :symbol, :symbol_literal
|
|
17
|
+
node.source[1..-1]
|
|
18
|
+
when :label
|
|
19
|
+
node.source[0..-2]
|
|
20
|
+
when :dyna_symbol
|
|
21
|
+
node.source
|
|
22
|
+
when :string_literal
|
|
23
|
+
content = node.jump(:tstring_content)
|
|
24
|
+
return content.source if content != node
|
|
25
|
+
|
|
26
|
+
# This attempts to work around a bug in YARD (https://github.com/lsegal/yard/issues/779)
|
|
27
|
+
# Check to see if the string source appears to have a heredoc open tag (or "most" of one)
|
|
28
|
+
# If so, remove the first line and the last line (if the latter contains the heredoc tag)
|
|
29
|
+
source = node.source
|
|
30
|
+
if source =~ HEREDOC_START
|
|
31
|
+
lines = source.split("\n")
|
|
32
|
+
source = lines[1..(lines.last.include?($1) ? -2 : -1)].join("\n") if lines.size > 1
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
source
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|