puppet-strings 2.2.0 → 2.6.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.
Files changed (150) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +87 -1
  3. data/CONTRIBUTING.md +32 -2
  4. data/README.md +81 -17
  5. data/lib/puppet-strings.rb +5 -3
  6. data/lib/puppet-strings/describe.rb +2 -0
  7. data/lib/puppet-strings/json.rb +4 -0
  8. data/lib/puppet-strings/markdown.rb +13 -9
  9. data/lib/puppet-strings/markdown/base.rb +30 -3
  10. data/lib/puppet-strings/markdown/data_type.rb +36 -0
  11. data/lib/puppet-strings/markdown/data_types.rb +43 -0
  12. data/lib/puppet-strings/markdown/defined_type.rb +2 -0
  13. data/lib/puppet-strings/markdown/defined_types.rb +3 -1
  14. data/lib/puppet-strings/markdown/function.rb +9 -7
  15. data/lib/puppet-strings/markdown/functions.rb +3 -1
  16. data/lib/puppet-strings/markdown/puppet_class.rb +2 -0
  17. data/lib/puppet-strings/markdown/puppet_classes.rb +3 -1
  18. data/lib/puppet-strings/markdown/puppet_plan.rb +2 -0
  19. data/lib/puppet-strings/markdown/puppet_plans.rb +3 -1
  20. data/lib/puppet-strings/markdown/puppet_task.rb +2 -0
  21. data/lib/puppet-strings/markdown/puppet_tasks.rb +3 -1
  22. data/lib/puppet-strings/markdown/resource_type.rb +21 -2
  23. data/lib/puppet-strings/markdown/resource_types.rb +3 -1
  24. data/lib/puppet-strings/markdown/table_of_contents.rb +4 -1
  25. data/lib/puppet-strings/markdown/templates/classes_and_defines.erb +18 -6
  26. data/lib/puppet-strings/markdown/templates/data_type.erb +101 -0
  27. data/lib/puppet-strings/markdown/templates/data_type_function.erb +67 -0
  28. data/lib/puppet-strings/markdown/templates/function.erb +10 -1
  29. data/lib/puppet-strings/markdown/templates/puppet_task.erb +1 -1
  30. data/lib/puppet-strings/markdown/templates/resource_type.erb +35 -13
  31. data/lib/puppet-strings/markdown/templates/table_of_contents.erb +6 -6
  32. data/lib/puppet-strings/monkey_patches/display_object_command.rb +2 -0
  33. data/lib/puppet-strings/tasks.rb +2 -0
  34. data/lib/puppet-strings/tasks/generate.rb +5 -2
  35. data/lib/puppet-strings/tasks/gh_pages.rb +3 -0
  36. data/lib/puppet-strings/version.rb +3 -1
  37. data/lib/puppet-strings/yard.rb +19 -0
  38. data/lib/puppet-strings/yard/code_objects.rb +4 -0
  39. data/lib/puppet-strings/yard/code_objects/base.rb +2 -0
  40. data/lib/puppet-strings/yard/code_objects/class.rb +5 -3
  41. data/lib/puppet-strings/yard/code_objects/data_type.rb +102 -0
  42. data/lib/puppet-strings/yard/code_objects/data_type_alias.rb +60 -0
  43. data/lib/puppet-strings/yard/code_objects/defined_type.rb +5 -3
  44. data/lib/puppet-strings/yard/code_objects/function.rb +9 -6
  45. data/lib/puppet-strings/yard/code_objects/group.rb +3 -0
  46. data/lib/puppet-strings/yard/code_objects/plan.rb +5 -3
  47. data/lib/puppet-strings/yard/code_objects/provider.rb +6 -0
  48. data/lib/puppet-strings/yard/code_objects/task.rb +3 -1
  49. data/lib/puppet-strings/yard/code_objects/type.rb +49 -5
  50. data/lib/puppet-strings/yard/handlers.rb +4 -0
  51. data/lib/puppet-strings/yard/handlers/helpers.rb +2 -0
  52. data/lib/puppet-strings/yard/handlers/json/base.rb +2 -0
  53. data/lib/puppet-strings/yard/handlers/json/task_handler.rb +2 -0
  54. data/lib/puppet-strings/yard/handlers/puppet/base.rb +3 -0
  55. data/lib/puppet-strings/yard/handlers/puppet/class_handler.rb +2 -0
  56. data/lib/puppet-strings/yard/handlers/puppet/data_type_alias_handler.rb +26 -0
  57. data/lib/puppet-strings/yard/handlers/puppet/defined_type_handler.rb +2 -0
  58. data/lib/puppet-strings/yard/handlers/puppet/function_handler.rb +3 -1
  59. data/lib/puppet-strings/yard/handlers/puppet/plan_handler.rb +2 -0
  60. data/lib/puppet-strings/yard/handlers/ruby/base.rb +7 -2
  61. data/lib/puppet-strings/yard/handlers/ruby/data_type_handler.rb +409 -0
  62. data/lib/puppet-strings/yard/handlers/ruby/function_handler.rb +9 -9
  63. data/lib/puppet-strings/yard/handlers/ruby/provider_handler.rb +13 -0
  64. data/lib/puppet-strings/yard/handlers/ruby/rsapi_handler.rb +6 -3
  65. data/lib/puppet-strings/yard/handlers/ruby/type_base.rb +25 -12
  66. data/lib/puppet-strings/yard/handlers/ruby/type_extras_handler.rb +6 -3
  67. data/lib/puppet-strings/yard/handlers/ruby/type_handler.rb +18 -1
  68. data/lib/puppet-strings/yard/parsers.rb +2 -0
  69. data/lib/puppet-strings/yard/parsers/json/parser.rb +3 -1
  70. data/lib/puppet-strings/yard/parsers/json/task_statement.rb +2 -0
  71. data/lib/puppet-strings/yard/parsers/puppet/parser.rb +11 -2
  72. data/lib/puppet-strings/yard/parsers/puppet/statement.rb +29 -0
  73. data/lib/puppet-strings/yard/tags.rb +4 -0
  74. data/lib/puppet-strings/yard/tags/enum_tag.rb +14 -0
  75. data/lib/puppet-strings/yard/tags/factory.rb +18 -0
  76. data/lib/puppet-strings/yard/tags/overload_tag.rb +5 -2
  77. data/lib/puppet-strings/yard/tags/parameter_directive.rb +5 -4
  78. data/lib/puppet-strings/yard/tags/property_directive.rb +5 -4
  79. data/lib/puppet-strings/yard/tags/summary_tag.rb +2 -0
  80. data/lib/puppet-strings/yard/templates/default/fulldoc/html/full_list_puppet_data_type.erb +10 -0
  81. data/lib/puppet-strings/yard/templates/default/fulldoc/html/setup.rb +9 -0
  82. data/lib/puppet-strings/yard/templates/default/layout/html/objects.erb +2 -0
  83. data/lib/puppet-strings/yard/templates/default/layout/html/setup.rb +18 -1
  84. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/box_info.erb +10 -0
  85. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/header.erb +1 -0
  86. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/method_details_list.erb +6 -0
  87. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/note.erb +6 -0
  88. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/overview.erb +6 -0
  89. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/setup.rb +13 -0
  90. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/source.erb +12 -0
  91. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/summary.erb +4 -0
  92. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/todo.erb +6 -0
  93. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/alias_of.erb +10 -0
  94. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/box_info.erb +10 -0
  95. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/header.erb +1 -0
  96. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/note.erb +6 -0
  97. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/overview.erb +6 -0
  98. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/setup.rb +17 -0
  99. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/source.erb +12 -0
  100. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/summary.erb +4 -0
  101. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/todo.erb +6 -0
  102. data/lib/puppet-strings/yard/templates/default/puppet_function/html/setup.rb +1 -1
  103. data/lib/puppet-strings/yard/templates/default/puppet_type/html/setup.rb +3 -1
  104. data/lib/puppet-strings/yard/templates/default/tags/html/enum.erb +17 -0
  105. data/lib/puppet-strings/yard/templates/default/tags/setup.rb +7 -0
  106. data/lib/puppet-strings/yard/util.rb +7 -4
  107. data/lib/puppet/application/strings.rb +2 -0
  108. data/lib/puppet/face/strings.rb +7 -4
  109. data/lib/puppet/feature/rgen.rb +2 -0
  110. data/lib/puppet/feature/yard.rb +2 -0
  111. metadata +35 -45
  112. data/Gemfile +0 -38
  113. data/HISTORY.md +0 -218
  114. data/JSON.md +0 -802
  115. data/Rakefile +0 -98
  116. data/codecov.yml +0 -3
  117. data/misc/ANNOUNCEMENT_TEMPLATE.md +0 -40
  118. data/spec/acceptance/emit_json_options.rb +0 -71
  119. data/spec/acceptance/generate_markdown_spec.rb +0 -49
  120. data/spec/acceptance/lib/util.rb +0 -163
  121. data/spec/acceptance/running_strings_generate.rb +0 -54
  122. data/spec/fixtures/acceptance/modules/test/functions/add.pp +0 -9
  123. data/spec/fixtures/acceptance/modules/test/lib/puppet/functions/4x_function.rb +0 -5
  124. data/spec/fixtures/acceptance/modules/test/lib/puppet/parser/functions/function3x.rb +0 -2
  125. data/spec/fixtures/acceptance/modules/test/lib/puppet/provider/server/linux.rb +0 -9
  126. data/spec/fixtures/acceptance/modules/test/lib/puppet/type/database.rb +0 -15
  127. data/spec/fixtures/acceptance/modules/test/manifests/init.pp +0 -27
  128. data/spec/fixtures/acceptance/modules/test/manifests/triple_nested_classes.pp +0 -27
  129. data/spec/fixtures/acceptance/modules/test/metadata.json +0 -6
  130. data/spec/fixtures/unit/markdown/output.md +0 -508
  131. data/spec/fixtures/unit/markdown/output_with_plan.md +0 -542
  132. data/spec/spec_helper.rb +0 -46
  133. data/spec/spec_helper_acceptance.rb +0 -28
  134. data/spec/unit/puppet-strings/describe_spec.rb +0 -141
  135. data/spec/unit/puppet-strings/json_spec.rb +0 -283
  136. data/spec/unit/puppet-strings/markdown/base_spec.rb +0 -146
  137. data/spec/unit/puppet-strings/markdown_spec.rb +0 -296
  138. data/spec/unit/puppet-strings/yard/code_objects/task_spec.rb +0 -92
  139. data/spec/unit/puppet-strings/yard/handlers/json/task_handler_spec.rb +0 -116
  140. data/spec/unit/puppet-strings/yard/handlers/puppet/class_handler_spec.rb +0 -217
  141. data/spec/unit/puppet-strings/yard/handlers/puppet/defined_type_handler_spec.rb +0 -231
  142. data/spec/unit/puppet-strings/yard/handlers/puppet/function_handler_spec.rb +0 -315
  143. data/spec/unit/puppet-strings/yard/handlers/ruby/function_handler_spec.rb +0 -729
  144. data/spec/unit/puppet-strings/yard/handlers/ruby/provider_handler_spec.rb +0 -139
  145. data/spec/unit/puppet-strings/yard/handlers/ruby/rsapi_handler_spec.rb +0 -235
  146. data/spec/unit/puppet-strings/yard/handlers/ruby/type_handler_spec.rb +0 -295
  147. data/spec/unit/puppet-strings/yard/parsers/json/parser_spec.rb +0 -72
  148. data/spec/unit/puppet-strings/yard/parsers/json/task_statement_spec.rb +0 -56
  149. data/spec/unit/puppet-strings/yard/parsers/puppet/parser_spec.rb +0 -209
  150. data/spec/unit/puppet-strings/yard/util_spec.rb +0 -48
@@ -1,139 +0,0 @@
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 with a docstring which uses ruby `%Q` notation' do
59
- let(:source) { <<-'SOURCE'
60
- Puppet::Type.type(:custom).provide :linux do
61
- test = 'hello world!'
62
- desc %Q{This is a multi-line
63
- doc in %Q with #{test}}
64
- end
65
- SOURCE
66
- }
67
-
68
- it 'should strip the `%Q{}` and render the interpolation expression literally' do
69
- expect(subject.size).to eq(1)
70
- object = subject.first
71
- expect(object.docstring).to eq("This is a multi-line\ndoc in %Q with \#{test}")
72
- end
73
- end
74
-
75
- describe 'parsing a provider definition' do
76
- let(:source) { <<-SOURCE
77
- Puppet::Type.type(:custom).provide :linux do
78
- desc 'An example provider on Linux.'
79
- confine kernel: 'Linux'
80
- confine osfamily: 'RedHat'
81
- defaultfor :kernel => 'Linux'
82
- defaultfor :osfamily => 'RedHat', :operatingsystemmajrelease => '7'
83
- has_feature :implements_some_feature
84
- has_feature :some_other_feature
85
- commands foo: '/usr/bin/foo'
86
- end
87
- SOURCE
88
- }
89
-
90
- it 'should register a provider object' do
91
- expect(subject.size).to eq(1)
92
- object = subject.first
93
- expect(object).to be_a(PuppetStrings::Yard::CodeObjects::Provider)
94
- expect(object.namespace).to eq(PuppetStrings::Yard::CodeObjects::Providers.instance('custom'))
95
- expect(object.name).to eq(:linux)
96
- expect(object.type_name).to eq('custom')
97
- expect(object.docstring).to eq('An example provider on Linux.')
98
- expect(object.docstring.tags.size).to eq(1)
99
- tags = object.docstring.tags(:api)
100
- expect(tags.size).to eq(1)
101
- expect(tags[0].text).to eq('public')
102
- expect(object.confines).to eq({ 'kernel' => 'Linux', 'osfamily' => 'RedHat'})
103
- expect(object.defaults).to eq([[["kernel", "Linux"]], [["osfamily", "RedHat"], ["operatingsystemmajrelease", "7"]]])
104
- expect(object.features).to eq(['implements_some_feature', 'some_other_feature'])
105
- expect(object.commands).to eq({'foo' => '/usr/bin/foo'})
106
- end
107
- end
108
-
109
- describe 'parsing a provider with a summary' do
110
- context 'when the summary has fewer than 140 characters' do
111
- let(:source) { <<-SOURCE
112
- Puppet::Type.type(:custom).provide :linux do
113
- @doc = '@summary A short summary.'
114
- end
115
- SOURCE
116
- }
117
-
118
- it 'should parse the summary' do
119
- expect{ subject }.to output('').to_stdout_from_any_process
120
- expect(subject.size).to eq(1)
121
- summary = subject.first.tags(:summary)
122
- expect(summary.first.text).to eq('A short summary.')
123
- end
124
- end
125
-
126
- context 'when the summary has more than 140 characters' do
127
- let(:source) { <<-SOURCE
128
- Puppet::Type.type(:custom).provide :linux do
129
- @doc = '@summary A short summary that is WAY TOO LONG. AHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH this is not what a summary is for! It should be fewer than 140 characters!!'
130
- end
131
- SOURCE
132
- }
133
-
134
- it 'should log a warning' do
135
- expect{ subject }.to output(/\[warn\]: The length of the summary for puppet_provider 'linux' exceeds the recommended limit of 140 characters./).to_stdout_from_any_process
136
- end
137
- end
138
- end
139
- end
@@ -1,235 +0,0 @@
1
- require 'spec_helper'
2
- require 'puppet-strings/yard'
3
-
4
- describe PuppetStrings::Yard::Handlers::Ruby::RsapiHandler 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::ResourceApi.register_type(
21
- name: 'database'
22
- )
23
- SOURCE
24
- }
25
-
26
- it 'should log a warning' do
27
- expect{ subject }.to output(/\[warn\]: Missing a description for Puppet resource type 'database' at \(stdin\):1\./).to_stdout_from_any_process
28
- end
29
- end
30
-
31
- describe 'parsing a type with a valid docstring assignment' do
32
- let(:source) { <<-SOURCE
33
- Puppet::ResourceApi.register_type(
34
- name: 'database',
35
- docs: 'An example database server resource type.',
36
- )
37
- SOURCE
38
- }
39
-
40
- it 'should correctly detect the docstring' do
41
- expect(subject.size).to eq(1)
42
- object = subject.first
43
- expect(object.docstring).to eq('An example database server resource type.')
44
- end
45
- end
46
-
47
- describe 'parsing a type with a docstring which uses ruby `%Q` notation' do
48
- let(:source) { <<-'SOURCE'
49
- test = 'hello world!'
50
-
51
- Puppet::ResourceApi.register_type(
52
- name: 'database',
53
- docs: %Q{This is a multi-line
54
- doc in %Q with #{test}},
55
- )
56
- SOURCE
57
- }
58
-
59
- it 'should strip the `%Q{}` and render the interpolation expression literally' do
60
- expect(subject.size).to eq(1)
61
- object = subject.first
62
- expect(object.docstring).to eq("This is a multi-line\ndoc in %Q with \#{test}")
63
- end
64
- end
65
-
66
- describe 'parsing a type definition' do
67
- let(:source) { <<-SOURCE
68
- # @!puppet.type.param [value1, value2] dynamic_param Documentation for a dynamic parameter.
69
- # @!puppet.type.property [foo, bar] dynamic_prop Documentation for a dynamic property.
70
- Puppet::ResourceApi.register_type(
71
- name: 'database',
72
- docs: 'An example database server resource type.',
73
- features: ['remote-resource'],
74
- attributes: {
75
- ensure: {
76
- type: 'Enum[present, absent, up, down]',
77
- desc: 'What state the database should be in.',
78
- default: 'up',
79
- },
80
- address: {
81
- type: 'String',
82
- desc: 'The database server name.',
83
- behaviour: :namevar,
84
- },
85
- encrypt: {
86
- type: 'Boolean',
87
- desc: 'Whether or not to encrypt the database.',
88
- default: false,
89
- behaviour: :parameter,
90
- },
91
- encryption_key: {
92
- type: 'Optional[String]',
93
- desc: 'The encryption key to use.',
94
- behaviour: :parameter,
95
- },
96
- backup: {
97
- type: 'Enum[daily, monthly, never]',
98
- desc: 'How often to backup the database.',
99
- default: 'never',
100
- behaviour: :parameter,
101
- },
102
- file: {
103
- type: 'String',
104
- desc: 'The database file to use.',
105
- },
106
- log_level: {
107
- type: 'Enum[debug, warn, error]',
108
- desc: 'The log level to use.',
109
- default: 'warn',
110
- },
111
- },
112
- )
113
- SOURCE
114
- }
115
-
116
- it 'should register a type object' do
117
- expect(subject.size).to eq(1)
118
- object = subject.first
119
- expect(object).to be_a(PuppetStrings::Yard::CodeObjects::Type)
120
- expect(object.namespace).to eq(PuppetStrings::Yard::CodeObjects::Types.instance)
121
- expect(object.name).to eq(:database)
122
- expect(object.docstring).to eq('An example database server resource type.')
123
- expect(object.docstring.tags.size).to eq(1)
124
- tags = object.docstring.tags(:api)
125
- expect(tags.size).to eq(1)
126
- expect(tags[0].text).to eq('public')
127
- expect(object.properties.map(&:name)).to eq(['dynamic_prop', 'ensure', 'file', 'log_level'])
128
- expect(object.properties.size).to eq(4)
129
- expect(object.properties[0].name).to eq('dynamic_prop')
130
- expect(object.properties[0].docstring).to eq('Documentation for a dynamic property.')
131
- expect(object.properties[0].isnamevar).to eq(false)
132
- expect(object.properties[0].values).to eq(%w(foo bar))
133
- expect(object.properties[1].name).to eq('ensure')
134
- expect(object.properties[1].docstring).to eq('What state the database should be in.')
135
- expect(object.properties[1].isnamevar).to eq(false)
136
- expect(object.properties[1].default).to eq('up')
137
- expect(object.properties[1].data_type).to eq('Enum[present, absent, up, down]')
138
- expect(object.properties[1].aliases).to eq({})
139
- expect(object.properties[2].name).to eq('file')
140
- expect(object.properties[2].docstring).to eq('The database file to use.')
141
- expect(object.properties[2].isnamevar).to eq(false)
142
- expect(object.properties[2].default).to be_nil
143
- expect(object.properties[2].data_type).to eq('String')
144
- expect(object.properties[2].aliases).to eq({})
145
- expect(object.properties[3].name).to eq('log_level')
146
- expect(object.properties[3].docstring).to eq('The log level to use.')
147
- expect(object.properties[3].isnamevar).to eq(false)
148
- expect(object.properties[3].default).to eq('warn')
149
- expect(object.properties[3].data_type).to eq('Enum[debug, warn, error]')
150
- expect(object.properties[3].aliases).to eq({})
151
- expect(object.parameters.size).to eq(5)
152
- expect(object.parameters[0].name).to eq('dynamic_param')
153
- expect(object.parameters[0].docstring).to eq('Documentation for a dynamic parameter.')
154
- expect(object.parameters[0].isnamevar).to eq(false)
155
- expect(object.parameters[0].values).to eq(%w(value1 value2))
156
- expect(object.parameters[1].name).to eq('address')
157
- expect(object.parameters[1].docstring).to eq('The database server name.')
158
- expect(object.parameters[1].isnamevar).to eq(true)
159
- expect(object.parameters[1].default).to be_nil
160
- expect(object.parameters[1].data_type).to eq('String')
161
- expect(object.parameters[1].aliases).to eq({})
162
- expect(object.parameters[2].name).to eq('encrypt')
163
- expect(object.parameters[2].docstring).to eq('Whether or not to encrypt the database.')
164
- expect(object.parameters[2].isnamevar).to eq(false)
165
- expect(object.parameters[2].default).to eq(false)
166
- expect(object.parameters[2].data_type).to eq("Boolean")
167
- expect(object.parameters[2].aliases).to eq({})
168
- expect(object.parameters[3].name).to eq('encryption_key')
169
- expect(object.parameters[3].docstring).to eq('The encryption key to use.')
170
- expect(object.parameters[3].isnamevar).to eq(false)
171
- expect(object.parameters[3].default).to be_nil
172
- expect(object.parameters[3].data_type).to eq("Optional[String]")
173
- expect(object.parameters[3].aliases).to eq({})
174
- expect(object.parameters[4].name).to eq('backup')
175
- expect(object.parameters[4].docstring).to eq('How often to backup the database.')
176
- expect(object.parameters[4].isnamevar).to eq(false)
177
- expect(object.parameters[4].default).to eq('never')
178
- expect(object.parameters[4].data_type).to eq("Enum[daily, monthly, never]")
179
- end
180
- end
181
-
182
- describe 'parsing a type with a summary' do
183
- context 'when the summary has fewer than 140 characters' do
184
- let(:source) { <<-SOURCE
185
- Puppet::ResourceApi.register_type(
186
- name: 'database',
187
- docs: '@summary A short summary.',
188
- )
189
- SOURCE
190
- }
191
-
192
- it 'should parse the summary' do
193
- expect{ subject }.to output('').to_stdout_from_any_process
194
- expect(subject.size).to eq(1)
195
- summary = subject.first.tags(:summary)
196
- expect(summary.first.text).to eq('A short summary.')
197
- end
198
- end
199
-
200
- context 'when the summary has more than 140 characters' do
201
- let(:source) { <<-SOURCE
202
- Puppet::ResourceApi.register_type(
203
- name: 'database',
204
- docs: '@summary A short summary that is WAY TOO LONG. AHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH this is not what a summary is for! It should be fewer than 140 characters!!',
205
- )
206
- SOURCE
207
- }
208
-
209
- it 'should log a warning' do
210
- expect{ subject }.to output(/\[warn\]: The length of the summary for puppet_type 'database' exceeds the recommended limit of 140 characters./).to_stdout_from_any_process
211
- end
212
- end
213
- end
214
-
215
- describe 'parsing a type with title_patterns' do
216
- let(:source) { <<-SOURCE
217
- Puppet::ResourceApi.register_type(
218
- name: 'database',
219
- docs: 'An example database server resource type.',
220
- title_patterns: [
221
- {
222
- pattern: %r{(?<name>.*)},
223
- desc: 'Generic title match',
224
- }
225
- ]
226
- )
227
- SOURCE
228
- }
229
-
230
- it 'should not emit a warning' do
231
- expect{ subject }.not_to output(/\[warn\].*unexpected construct regexp_literal/).to_stdout_from_any_process
232
- end
233
- end
234
-
235
- end
@@ -1,295 +0,0 @@
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 with a docstring which uses ruby `%Q` notation' do
59
- let(:source) { <<-'SOURCE'
60
- Puppet::Type.newtype(:database) do
61
- test = 'hello world!'
62
- desc %Q{This is a multi-line
63
- doc in %Q with #{test}}
64
- end
65
- SOURCE
66
- }
67
-
68
- it 'should strip the `%Q{}` and render the interpolation expression literally' do
69
- expect(subject.size).to eq(1)
70
- object = subject.first
71
- expect(object.docstring).to eq("This is a multi-line\ndoc in %Q with \#{test}")
72
- end
73
- end
74
-
75
- describe 'parsing a type with a param with arguments' do
76
- let(:source) { <<-SOURCE
77
- Puppet::Type.newtype(:database) do
78
- feature :encryption, 'The provider supports encryption.', methods: [:encrypt]
79
-
80
- newparam(:encryption_key, :parent => Puppet::Parameter::Boolean, required_features: :encryption) do
81
- desc 'The encryption key to use.'
82
- defaultto false
83
- end
84
- end
85
- SOURCE
86
- }
87
-
88
- it 'should correctly detect the required_feature' do
89
- expect(subject.size).to eq(1)
90
- object = subject.first
91
- expect(object.parameters[0].required_features).to eq('encryption')
92
- end
93
-
94
- it 'should correctly detect a boolean parent' do
95
- expect(subject.size).to eq(1)
96
- object = subject.first
97
- expect(object.parameters[0].default).to eq('false')
98
- end
99
- end
100
-
101
- describe 'parsing a type definition' do
102
- let(:source) { <<-SOURCE
103
- # @!puppet.type.param [value1, value2] dynamic_param Documentation for a dynamic parameter.
104
- # @!puppet.type.property [foo, bar] dynamic_prop Documentation for a dynamic property.
105
- Puppet::Type.newtype(:database) do
106
- desc 'An example database server resource type.'
107
- feature :encryption, 'The provider supports encryption.', methods: [:encrypt]
108
-
109
- feature :magic,
110
- 'The feature docstring should have
111
- whitespace and newlines stripped out.'
112
-
113
- ensurable do
114
- desc 'What state the database should be in.'
115
- defaultvalues
116
- aliasvalue(:up, :present)
117
- aliasvalue(:down, :absent)
118
- defaultto :up
119
- end
120
-
121
- newparam(:address) do
122
- isnamevar
123
- desc 'The database server name.'
124
- end
125
-
126
- newparam(:encryption_key, required_features: :encryption) do
127
- desc 'The encryption key to use.'
128
- end
129
-
130
- newparam(:encrypt, :parent => Puppet::Parameter::Boolean) do
131
- desc 'Whether or not to encrypt the database.'
132
- defaultto false
133
- end
134
-
135
- newparam(:backup) do
136
- desc 'How often to backup the database.'
137
- defaultto :never
138
- newvalues(:daily, :monthly, :never)
139
- end
140
-
141
- newproperty(:file) do
142
- desc 'The database file to use.'
143
- end
144
-
145
- newproperty(:log_level) do
146
- desc 'The log level to use.'
147
- newvalue(:debug)
148
- newvalue(:warn)
149
- newvalue(:error)
150
- defaultto 'warn'
151
- end
152
- end
153
- SOURCE
154
- }
155
-
156
- it 'should register a type object' do
157
- expect(subject.size).to eq(1)
158
- object = subject.first
159
- expect(object).to be_a(PuppetStrings::Yard::CodeObjects::Type)
160
- expect(object.namespace).to eq(PuppetStrings::Yard::CodeObjects::Types.instance)
161
- expect(object.name).to eq(:database)
162
- expect(object.docstring).to eq('An example database server resource type.')
163
- expect(object.docstring.tags.size).to eq(1)
164
- tags = object.docstring.tags(:api)
165
- expect(tags.size).to eq(1)
166
- expect(tags[0].text).to eq('public')
167
- expect(object.properties.size).to eq(4)
168
- expect(object.properties[0].name).to eq('dynamic_prop')
169
- expect(object.properties[0].docstring).to eq('Documentation for a dynamic property.')
170
- expect(object.properties[0].isnamevar).to eq(false)
171
- expect(object.properties[0].values).to eq(%w(foo bar))
172
- expect(object.properties[1].name).to eq('ensure')
173
- expect(object.properties[1].docstring).to eq('What state the database should be in.')
174
- expect(object.properties[1].isnamevar).to eq(false)
175
- expect(object.properties[1].default).to eq('up')
176
- expect(object.properties[1].values).to eq(%w(present absent up down))
177
- expect(object.properties[1].aliases).to eq({ 'down' => 'absent', 'up' => 'present' })
178
- expect(object.properties[2].name).to eq('file')
179
- expect(object.properties[2].docstring).to eq('The database file to use.')
180
- expect(object.properties[2].isnamevar).to eq(false)
181
- expect(object.properties[2].default).to be_nil
182
- expect(object.properties[2].values).to eq([])
183
- expect(object.properties[2].aliases).to eq({})
184
- expect(object.properties[3].name).to eq('log_level')
185
- expect(object.properties[3].docstring).to eq('The log level to use.')
186
- expect(object.properties[3].isnamevar).to eq(false)
187
- expect(object.properties[3].default).to eq('warn')
188
- expect(object.properties[3].values).to eq(%w(debug warn error))
189
- expect(object.properties[3].aliases).to eq({})
190
- expect(object.parameters.size).to eq(5)
191
- expect(object.parameters[0].name).to eq('dynamic_param')
192
- expect(object.parameters[0].docstring).to eq('Documentation for a dynamic parameter.')
193
- expect(object.parameters[0].isnamevar).to eq(false)
194
- expect(object.parameters[0].values).to eq(%w(value1 value2))
195
- expect(object.parameters[1].name).to eq('address')
196
- expect(object.parameters[1].docstring).to eq('The database server name.')
197
- expect(object.parameters[1].isnamevar).to eq(true)
198
- expect(object.parameters[1].default).to be_nil
199
- expect(object.parameters[1].values).to eq([])
200
- expect(object.parameters[1].aliases).to eq({})
201
- expect(object.parameters[2].name).to eq('encryption_key')
202
- expect(object.parameters[2].docstring).to eq('The encryption key to use.')
203
- expect(object.parameters[2].isnamevar).to eq(false)
204
- expect(object.parameters[2].default).to be_nil
205
- expect(object.parameters[2].values).to eq([])
206
- expect(object.parameters[2].aliases).to eq({})
207
- expect(object.parameters[3].name).to eq('encrypt')
208
- expect(object.parameters[3].docstring).to eq('Whether or not to encrypt the database.')
209
- expect(object.parameters[3].isnamevar).to eq(false)
210
- expect(object.parameters[3].default).to eq('false')
211
- expect(object.parameters[3].values).to eq(%w(true false yes no))
212
- expect(object.parameters[3].aliases).to eq({})
213
- expect(object.parameters[4].name).to eq('backup')
214
- expect(object.parameters[4].docstring).to eq('How often to backup the database.')
215
- expect(object.parameters[4].isnamevar).to eq(false)
216
- expect(object.parameters[4].default).to eq('never')
217
- expect(object.parameters[4].values).to eq(%w(daily monthly never))
218
- expect(object.features.size).to eq(2)
219
- expect(object.features[0].name).to eq('encryption')
220
- expect(object.features[0].docstring).to eq('The provider supports encryption.')
221
- expect(object.features[1].name).to eq('magic')
222
- expect(object.features[1].docstring).to eq('The feature docstring should have whitespace and newlines stripped out.')
223
- end
224
- end
225
-
226
- describe 'parsing an ensurable type with default ensure values' do
227
- let(:source) { <<-SOURCE
228
- Puppet::Type.newtype(:database) do
229
- desc 'An example database server resource type.'
230
- ensurable
231
- end
232
- SOURCE
233
- }
234
-
235
- it 'should register a type object with default ensure values' do
236
- expect(subject.size).to eq(1)
237
- object = subject.first
238
- expect(object.properties[0].name).to eq('ensure')
239
- expect(object.properties[0].docstring).to eq('The basic property that the resource should be in.')
240
- expect(object.properties[0].default).to eq('present')
241
- expect(object.properties[0].values).to eq(%w(present absent))
242
- end
243
- end
244
-
245
- describe 'parsing a type with a parameter with the name of "name"' do
246
- let(:source) { <<-SOURCE
247
- Puppet::Type.newtype(:database) do
248
- desc 'An example database server resource type.'
249
- newparam(:name) do
250
- desc 'The database server name.'
251
- end
252
- end
253
- SOURCE
254
- }
255
-
256
- it 'should register a type object with the "name" parameter as the namevar' do
257
- expect(subject.size).to eq(1)
258
- object = subject.first
259
- expect(object.parameters.size).to eq(1)
260
- expect(object.parameters[0].name).to eq('name')
261
- expect(object.parameters[0].isnamevar).to eq(true)
262
- end
263
- end
264
-
265
- describe 'parsing a type with a summary' do
266
- context 'when the summary has fewer than 140 characters' do
267
- let(:source) { <<-SOURCE
268
- Puppet::Type.newtype(:database) do
269
- @doc = '@summary A short summary.'
270
- end
271
- SOURCE
272
- }
273
-
274
- it 'should parse the summary' do
275
- expect{ subject }.to output('').to_stdout_from_any_process
276
- expect(subject.size).to eq(1)
277
- summary = subject.first.tags(:summary)
278
- expect(summary.first.text).to eq('A short summary.')
279
- end
280
- end
281
-
282
- context 'when the summary has more than 140 characters' do
283
- let(:source) { <<-SOURCE
284
- Puppet::Type.newtype(:database) do
285
- @doc = '@summary A short summary that is WAY TOO LONG. AHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH this is not what a summary is for! It should be fewer than 140 characters!!'
286
- end
287
- SOURCE
288
- }
289
-
290
- it 'should log a warning' do
291
- expect{ subject }.to output(/\[warn\]: The length of the summary for puppet_type 'database' exceeds the recommended limit of 140 characters./).to_stdout_from_any_process
292
- end
293
- end
294
- end
295
- end