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,90 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'puppet-strings/yard'
|
|
3
|
+
|
|
4
|
+
describe PuppetStrings::Yard::Handlers::Ruby::ProviderHandler do
|
|
5
|
+
subject {
|
|
6
|
+
YARD::Parser::SourceParser.parse_string(source, :ruby)
|
|
7
|
+
YARD::Registry.all(:puppet_provider)
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
describe 'parsing source without a provider definition' do
|
|
11
|
+
let(:source) { 'puts "hi"' }
|
|
12
|
+
|
|
13
|
+
it 'no providers should be in the registry' do
|
|
14
|
+
expect(subject.empty?).to eq(true)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe 'parsing a provider with a missing description' do
|
|
19
|
+
let(:source) { <<-SOURCE
|
|
20
|
+
Puppet::Type.type(:custom).provide :linux do
|
|
21
|
+
end
|
|
22
|
+
SOURCE
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
it 'should log a warning' do
|
|
26
|
+
expect{ subject }.to output(/\[warn\]: Missing a description for Puppet provider 'linux' \(resource type 'custom'\) at \(stdin\):1\./).to_stdout_from_any_process
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe 'parsing a provider with an invalid docstring assignment' do
|
|
31
|
+
let(:source) { <<-SOURCE
|
|
32
|
+
Puppet::Type.type(:custom).provide :linux do
|
|
33
|
+
@doc = 123
|
|
34
|
+
end
|
|
35
|
+
SOURCE
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
it 'should log an error' do
|
|
39
|
+
expect { subject }.to output(/Failed to parse docstring/).to_stdout_from_any_process
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
describe 'parsing a provider with a valid docstring assignment' do
|
|
44
|
+
let(:source) { <<-SOURCE
|
|
45
|
+
Puppet::Type.type(:custom).provide :linux do
|
|
46
|
+
@doc = 'An example provider on Linux.'
|
|
47
|
+
end
|
|
48
|
+
SOURCE
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
it 'should correctly detect the docstring' do
|
|
52
|
+
expect(subject.size).to eq(1)
|
|
53
|
+
object = subject.first
|
|
54
|
+
expect(object.docstring).to eq('An example provider on Linux.')
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
describe 'parsing a provider definition' do
|
|
59
|
+
let(:source) { <<-SOURCE
|
|
60
|
+
Puppet::Type.type(:custom).provide :linux do
|
|
61
|
+
desc 'An example provider on Linux.'
|
|
62
|
+
confine kernel: 'Linux'
|
|
63
|
+
confine osfamily: 'RedHat'
|
|
64
|
+
defaultfor kernel: 'Linux'
|
|
65
|
+
has_feature :implements_some_feature
|
|
66
|
+
has_feature :some_other_feature
|
|
67
|
+
commands foo: /usr/bin/foo
|
|
68
|
+
end
|
|
69
|
+
SOURCE
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
it 'should register a provider object' do
|
|
73
|
+
expect(subject.size).to eq(1)
|
|
74
|
+
object = subject.first
|
|
75
|
+
expect(object).to be_a(PuppetStrings::Yard::CodeObjects::Provider)
|
|
76
|
+
expect(object.namespace).to eq(PuppetStrings::Yard::CodeObjects::Providers.instance('custom'))
|
|
77
|
+
expect(object.name).to eq(:linux)
|
|
78
|
+
expect(object.type_name).to eq('custom')
|
|
79
|
+
expect(object.docstring).to eq('An example provider on Linux.')
|
|
80
|
+
expect(object.docstring.tags.size).to eq(1)
|
|
81
|
+
tags = object.docstring.tags(:api)
|
|
82
|
+
expect(tags.size).to eq(1)
|
|
83
|
+
expect(tags[0].text).to eq('public')
|
|
84
|
+
expect(object.confines).to eq({ 'kernel' => 'Linux', 'osfamily' => 'RedHat'})
|
|
85
|
+
expect(object.defaults).to eq({ 'kernel' => 'Linux'})
|
|
86
|
+
expect(object.features).to eq(['implements_some_feature', 'some_other_feature'])
|
|
87
|
+
expect(object.commands).to eq({'foo' => '/usr/bin/foo'})
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'puppet-strings/yard'
|
|
3
|
+
|
|
4
|
+
describe PuppetStrings::Yard::Handlers::Ruby::TypeHandler do
|
|
5
|
+
subject {
|
|
6
|
+
YARD::Parser::SourceParser.parse_string(source, :ruby)
|
|
7
|
+
YARD::Registry.all(:puppet_type)
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
describe 'parsing source without a type definition' do
|
|
11
|
+
let(:source) { 'puts "hi"' }
|
|
12
|
+
|
|
13
|
+
it 'no types should be in the registry' do
|
|
14
|
+
expect(subject.empty?).to eq(true)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe 'parsing a type with a missing description' do
|
|
19
|
+
let(:source) { <<-SOURCE
|
|
20
|
+
Puppet::Type.newtype(:database) do
|
|
21
|
+
end
|
|
22
|
+
SOURCE
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
it 'should log a warning' do
|
|
26
|
+
expect{ subject }.to output(/\[warn\]: Missing a description for Puppet resource type 'database' at \(stdin\):1\./).to_stdout_from_any_process
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe 'parsing a type with an invalid docstring assignment' do
|
|
31
|
+
let(:source) { <<-SOURCE
|
|
32
|
+
Puppet::Type.newtype(:database) do
|
|
33
|
+
@doc = 123
|
|
34
|
+
end
|
|
35
|
+
SOURCE
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
it 'should log an error' do
|
|
39
|
+
expect { subject }.to output(/Failed to parse docstring/).to_stdout_from_any_process
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
describe 'parsing a type with a valid docstring assignment' do
|
|
44
|
+
let(:source) { <<-SOURCE
|
|
45
|
+
Puppet::Type.newtype(:database) do
|
|
46
|
+
@doc = 'An example database server resource type.'
|
|
47
|
+
end
|
|
48
|
+
SOURCE
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
it 'should correctly detect the docstring' do
|
|
52
|
+
expect(subject.size).to eq(1)
|
|
53
|
+
object = subject.first
|
|
54
|
+
expect(object.docstring).to eq('An example database server resource type.')
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
describe 'parsing a type definition' do
|
|
59
|
+
let(:source) { <<-SOURCE
|
|
60
|
+
# @!puppet.type.param [value1, value2] dynamic_param Documentation for a dynamic parameter.
|
|
61
|
+
# @!puppet.type.property [foo, bar] dynamic_prop Documentation for a dynamic property.
|
|
62
|
+
Puppet::Type.newtype(:database) do
|
|
63
|
+
desc 'An example database server resource type.'
|
|
64
|
+
feature :encryption, 'The provider supports encryption.', methods: [:encrypt]
|
|
65
|
+
ensurable do
|
|
66
|
+
desc 'What state the database should be in.'
|
|
67
|
+
defaultvalues
|
|
68
|
+
aliasvalue(:up, :present)
|
|
69
|
+
aliasvalue(:down, :absent)
|
|
70
|
+
defaultto :up
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
newparam(:address) do
|
|
74
|
+
isnamevar
|
|
75
|
+
desc 'The database server name.'
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
newparam(:encryption_key, required_features: :encryption) do
|
|
79
|
+
desc 'The encryption key to use.'
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
newparam(:encrypt, :parent => Puppet::Parameter::Boolean) do
|
|
83
|
+
desc 'Whether or not to encrypt the database.'
|
|
84
|
+
defaultto false
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
newparam(:backup) do
|
|
88
|
+
desc 'How often to backup the database.'
|
|
89
|
+
defaultto :never
|
|
90
|
+
newvalues(:daily, :monthly, :never)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
newproperty(:file) do
|
|
94
|
+
desc 'The database file to use.'
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
newproperty(:log_level) do
|
|
98
|
+
desc 'The log level to use.'
|
|
99
|
+
newvalue(:debug)
|
|
100
|
+
newvalue(:warn)
|
|
101
|
+
newvalue(:error)
|
|
102
|
+
defaultto 'warn'
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
SOURCE
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
it 'should register a type object' do
|
|
109
|
+
expect(subject.size).to eq(1)
|
|
110
|
+
object = subject.first
|
|
111
|
+
expect(object).to be_a(PuppetStrings::Yard::CodeObjects::Type)
|
|
112
|
+
expect(object.namespace).to eq(PuppetStrings::Yard::CodeObjects::Types.instance)
|
|
113
|
+
expect(object.name).to eq(:database)
|
|
114
|
+
expect(object.docstring).to eq('An example database server resource type.')
|
|
115
|
+
expect(object.docstring.tags.size).to eq(1)
|
|
116
|
+
tags = object.docstring.tags(:api)
|
|
117
|
+
expect(tags.size).to eq(1)
|
|
118
|
+
expect(tags[0].text).to eq('public')
|
|
119
|
+
expect(object.properties.size).to eq(4)
|
|
120
|
+
expect(object.properties[0].name).to eq('dynamic_prop')
|
|
121
|
+
expect(object.properties[0].docstring).to eq('Documentation for a dynamic property.')
|
|
122
|
+
expect(object.properties[0].isnamevar).to eq(false)
|
|
123
|
+
expect(object.properties[0].values).to eq(%w(foo bar))
|
|
124
|
+
expect(object.properties[1].name).to eq('ensure')
|
|
125
|
+
expect(object.properties[1].docstring).to eq('What state the database should be in.')
|
|
126
|
+
expect(object.properties[1].isnamevar).to eq(false)
|
|
127
|
+
expect(object.properties[1].default).to eq('up')
|
|
128
|
+
expect(object.properties[1].values).to eq(%w(present absent up down))
|
|
129
|
+
expect(object.properties[1].aliases).to eq({ 'down' => 'absent', 'up' => 'present' })
|
|
130
|
+
expect(object.properties[2].name).to eq('file')
|
|
131
|
+
expect(object.properties[2].docstring).to eq('The database file to use.')
|
|
132
|
+
expect(object.properties[2].isnamevar).to eq(false)
|
|
133
|
+
expect(object.properties[2].default).to be_nil
|
|
134
|
+
expect(object.properties[2].values).to eq([])
|
|
135
|
+
expect(object.properties[2].aliases).to eq({})
|
|
136
|
+
expect(object.properties[3].name).to eq('log_level')
|
|
137
|
+
expect(object.properties[3].docstring).to eq('The log level to use.')
|
|
138
|
+
expect(object.properties[3].isnamevar).to eq(false)
|
|
139
|
+
expect(object.properties[3].default).to eq('warn')
|
|
140
|
+
expect(object.properties[3].values).to eq(%w(debug warn error))
|
|
141
|
+
expect(object.properties[3].aliases).to eq({})
|
|
142
|
+
expect(object.parameters.size).to eq(5)
|
|
143
|
+
expect(object.parameters[0].name).to eq('dynamic_param')
|
|
144
|
+
expect(object.parameters[0].docstring).to eq('Documentation for a dynamic parameter.')
|
|
145
|
+
expect(object.parameters[0].isnamevar).to eq(false)
|
|
146
|
+
expect(object.parameters[0].values).to eq(%w(value1 value2))
|
|
147
|
+
expect(object.parameters[1].name).to eq('address')
|
|
148
|
+
expect(object.parameters[1].docstring).to eq('The database server name.')
|
|
149
|
+
expect(object.parameters[1].isnamevar).to eq(true)
|
|
150
|
+
expect(object.parameters[1].default).to be_nil
|
|
151
|
+
expect(object.parameters[1].values).to eq([])
|
|
152
|
+
expect(object.parameters[1].aliases).to eq({})
|
|
153
|
+
expect(object.parameters[2].name).to eq('encryption_key')
|
|
154
|
+
expect(object.parameters[2].docstring).to eq('The encryption key to use.')
|
|
155
|
+
expect(object.parameters[2].isnamevar).to eq(false)
|
|
156
|
+
expect(object.parameters[2].default).to be_nil
|
|
157
|
+
expect(object.parameters[2].values).to eq([])
|
|
158
|
+
expect(object.parameters[2].aliases).to eq({})
|
|
159
|
+
expect(object.parameters[3].name).to eq('encrypt')
|
|
160
|
+
expect(object.parameters[3].docstring).to eq('Whether or not to encrypt the database.')
|
|
161
|
+
expect(object.parameters[3].isnamevar).to eq(false)
|
|
162
|
+
expect(object.parameters[3].default).to eq('false')
|
|
163
|
+
expect(object.parameters[3].values).to eq(%w(true false yes no))
|
|
164
|
+
expect(object.parameters[3].aliases).to eq({})
|
|
165
|
+
expect(object.parameters[4].name).to eq('backup')
|
|
166
|
+
expect(object.parameters[4].docstring).to eq('How often to backup the database.')
|
|
167
|
+
expect(object.parameters[4].isnamevar).to eq(false)
|
|
168
|
+
expect(object.parameters[4].default).to eq('never')
|
|
169
|
+
expect(object.parameters[4].values).to eq(%w(daily monthly never))
|
|
170
|
+
expect(object.features.size).to eq(1)
|
|
171
|
+
expect(object.features[0].name).to eq('encryption')
|
|
172
|
+
expect(object.features[0].docstring).to eq('The provider supports encryption.')
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
describe 'parsing an ensurable type with default ensure values' do
|
|
177
|
+
let(:source) { <<-SOURCE
|
|
178
|
+
Puppet::Type.newtype(:database) do
|
|
179
|
+
desc 'An example database server resource type.'
|
|
180
|
+
ensurable
|
|
181
|
+
end
|
|
182
|
+
SOURCE
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
it 'should register a type object with default ensure values' do
|
|
186
|
+
expect(subject.size).to eq(1)
|
|
187
|
+
object = subject.first
|
|
188
|
+
expect(object.properties[0].name).to eq('ensure')
|
|
189
|
+
expect(object.properties[0].docstring).to eq('The basic property that the resource should be in.')
|
|
190
|
+
expect(object.properties[0].default).to eq('present')
|
|
191
|
+
expect(object.properties[0].values).to eq(%w(present absent))
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
describe 'parsing a type with a parameter with the name of "name"' do
|
|
196
|
+
let(:source) { <<-SOURCE
|
|
197
|
+
Puppet::Type.newtype(:database) do
|
|
198
|
+
desc 'An example database server resource type.'
|
|
199
|
+
newparam(:name) do
|
|
200
|
+
desc 'The database server name.'
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
SOURCE
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
it 'should register a type object with the "name" parameter as the namevar' do
|
|
207
|
+
expect(subject.size).to eq(1)
|
|
208
|
+
object = subject.first
|
|
209
|
+
expect(object.parameters.size).to eq(1)
|
|
210
|
+
expect(object.parameters[0].name).to eq('name')
|
|
211
|
+
expect(object.parameters[0].isnamevar).to eq(true)
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
end
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'puppet-strings/yard'
|
|
3
|
+
|
|
4
|
+
describe PuppetStrings::Yard::Parsers::Puppet::Parser do
|
|
5
|
+
subject { PuppetStrings::Yard::Parsers::Puppet::Parser.new(source, file) }
|
|
6
|
+
let(:file) { 'test.pp' }
|
|
7
|
+
|
|
8
|
+
describe 'initialization of the parser' do
|
|
9
|
+
let(:source) { 'notice hi' }
|
|
10
|
+
|
|
11
|
+
it 'should store the original source' do
|
|
12
|
+
expect(subject.source).to eq(source)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it 'should store the original file name' do
|
|
16
|
+
expect(subject.file).to eq(file)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it 'should have no relevant statements' do
|
|
20
|
+
subject.parse
|
|
21
|
+
expect(subject.enumerator.empty?).to be_truthy
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe 'parsing invalid Puppet source code' do
|
|
26
|
+
let(:source) { <<SOURCE
|
|
27
|
+
class foo {
|
|
28
|
+
SOURCE
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
it 'should raise an exception' do
|
|
32
|
+
expect{ subject.parse }.to output(/\[error\]: Failed to parse test.pp: Syntax error at end of file/).to_stdout_from_any_process
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe 'parsing class definitions' do
|
|
37
|
+
let(:source) { <<SOURCE
|
|
38
|
+
notice hello
|
|
39
|
+
# A simple foo class.
|
|
40
|
+
# @param param1 First param.
|
|
41
|
+
# @param param2 Second param.
|
|
42
|
+
# @param param3 Third param.
|
|
43
|
+
class foo(Integer $param1, $param2, String $param3 = hi) inherits foo::bar {
|
|
44
|
+
file { '/tmp/foo':
|
|
45
|
+
ensure => present
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
SOURCE
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
it 'should only return the class statement' do
|
|
52
|
+
subject.parse
|
|
53
|
+
expect(subject.enumerator.size).to eq(1)
|
|
54
|
+
statement = subject.enumerator.first
|
|
55
|
+
expect(statement).to be_a(PuppetStrings::Yard::Parsers::Puppet::ClassStatement)
|
|
56
|
+
expect(statement.source).to eq("class foo(Integer $param1, $param2, String $param3 = hi) inherits foo::bar {\n file { '/tmp/foo':\n ensure => present\n }\n}")
|
|
57
|
+
expect(statement.file).to eq(file)
|
|
58
|
+
expect(statement.line).to eq(6)
|
|
59
|
+
expect(statement.docstring).to eq('A simple foo class.')
|
|
60
|
+
expect(statement.name).to eq('foo')
|
|
61
|
+
expect(statement.parent_class).to eq('foo::bar')
|
|
62
|
+
expect(statement.parameters.size).to eq(3)
|
|
63
|
+
expect(statement.parameters[0].name).to eq('param1')
|
|
64
|
+
expect(statement.parameters[0].type).to eq('Integer')
|
|
65
|
+
expect(statement.parameters[0].value).to be_nil
|
|
66
|
+
expect(statement.parameters[1].name).to eq('param2')
|
|
67
|
+
expect(statement.parameters[1].type).to be_nil
|
|
68
|
+
expect(statement.parameters[1].value).to be_nil
|
|
69
|
+
expect(statement.parameters[2].name).to eq('param3')
|
|
70
|
+
expect(statement.parameters[2].type).to eq('String')
|
|
71
|
+
expect(statement.parameters[2].value).to eq('hi')
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
describe 'parsing nested class definitions' do
|
|
76
|
+
let(:source) { <<SOURCE
|
|
77
|
+
class foo {
|
|
78
|
+
class bar {
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
SOURCE
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
it 'should parse both class statements' do
|
|
85
|
+
subject.parse
|
|
86
|
+
expect(subject.enumerator.size).to eq(2)
|
|
87
|
+
statement = subject.enumerator[0]
|
|
88
|
+
expect(statement).to be_a(PuppetStrings::Yard::Parsers::Puppet::ClassStatement)
|
|
89
|
+
expect(statement.name).to eq('foo::bar')
|
|
90
|
+
expect(statement.parameters.size).to eq(0)
|
|
91
|
+
statement = subject.enumerator[1]
|
|
92
|
+
expect(statement).to be_a(PuppetStrings::Yard::Parsers::Puppet::ClassStatement)
|
|
93
|
+
expect(statement.name).to eq('foo')
|
|
94
|
+
expect(statement.parameters.size).to eq(0)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
describe 'parsing defined types' do
|
|
99
|
+
let(:source) { <<SOURCE
|
|
100
|
+
notice hello
|
|
101
|
+
# A simple foo defined type.
|
|
102
|
+
# @param param1 First param.
|
|
103
|
+
# @param param2 Second param.
|
|
104
|
+
# @param param3 Third param.
|
|
105
|
+
define foo(Integer $param1, $param2, String $param3 = hi) {
|
|
106
|
+
file { '/tmp/foo':
|
|
107
|
+
ensure => present
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
SOURCE
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
it 'should parse the defined type statement' do
|
|
114
|
+
subject.parse
|
|
115
|
+
expect(subject.enumerator.size).to eq(1)
|
|
116
|
+
statement = subject.enumerator.first
|
|
117
|
+
expect(statement).to be_a(PuppetStrings::Yard::Parsers::Puppet::DefinedTypeStatement)
|
|
118
|
+
expect(statement.name).to eq('foo')
|
|
119
|
+
expect(statement.source).to eq("define foo(Integer $param1, $param2, String $param3 = hi) {\n file { '/tmp/foo':\n ensure => present\n }\n}")
|
|
120
|
+
expect(statement.file).to eq(file)
|
|
121
|
+
expect(statement.line).to eq(6)
|
|
122
|
+
expect(statement.docstring).to eq('A simple foo defined type.')
|
|
123
|
+
expect(statement.parameters.size).to eq(3)
|
|
124
|
+
expect(statement.parameters[0].name).to eq('param1')
|
|
125
|
+
expect(statement.parameters[0].type).to eq('Integer')
|
|
126
|
+
expect(statement.parameters[0].value).to be_nil
|
|
127
|
+
expect(statement.parameters[1].name).to eq('param2')
|
|
128
|
+
expect(statement.parameters[1].type).to be_nil
|
|
129
|
+
expect(statement.parameters[1].value).to be_nil
|
|
130
|
+
expect(statement.parameters[2].name).to eq('param3')
|
|
131
|
+
expect(statement.parameters[2].type).to eq('String')
|
|
132
|
+
expect(statement.parameters[2].value).to eq('hi')
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
describe 'parsing puppet functions', if: TEST_PUPPET_FUNCTIONS do
|
|
137
|
+
let(:source) { <<SOURCE
|
|
138
|
+
notice hello
|
|
139
|
+
# A simple foo function.
|
|
140
|
+
# @param param1 First param.
|
|
141
|
+
# @param param2 Second param.
|
|
142
|
+
# @param param3 Third param.
|
|
143
|
+
function foo(Integer $param1, $param2, String $param3 = hi) {
|
|
144
|
+
notice world
|
|
145
|
+
}
|
|
146
|
+
SOURCE
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
it 'should parse the puppet function statement' do
|
|
150
|
+
subject.parse
|
|
151
|
+
expect(subject.enumerator.size).to eq(1)
|
|
152
|
+
statement = subject.enumerator.first
|
|
153
|
+
expect(statement).to be_a(PuppetStrings::Yard::Parsers::Puppet::FunctionStatement)
|
|
154
|
+
expect(statement.name).to eq('foo')
|
|
155
|
+
expect(statement.source).to eq("function foo(Integer $param1, $param2, String $param3 = hi) {\n notice world\n}")
|
|
156
|
+
expect(statement.file).to eq(file)
|
|
157
|
+
expect(statement.line).to eq(6)
|
|
158
|
+
expect(statement.docstring).to eq('A simple foo function.')
|
|
159
|
+
expect(statement.parameters.size).to eq(3)
|
|
160
|
+
expect(statement.parameters[0].name).to eq('param1')
|
|
161
|
+
expect(statement.parameters[0].type).to eq('Integer')
|
|
162
|
+
expect(statement.parameters[0].value).to be_nil
|
|
163
|
+
expect(statement.parameters[1].name).to eq('param2')
|
|
164
|
+
expect(statement.parameters[1].type).to be_nil
|
|
165
|
+
expect(statement.parameters[1].value).to be_nil
|
|
166
|
+
expect(statement.parameters[2].name).to eq('param3')
|
|
167
|
+
expect(statement.parameters[2].type).to eq('String')
|
|
168
|
+
expect(statement.parameters[2].value).to eq('hi')
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|