puppet-strings 2.4.0 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +30 -2
  3. data/lib/puppet-strings.rb +2 -2
  4. data/lib/puppet-strings/markdown.rb +1 -1
  5. data/lib/puppet-strings/markdown/base.rb +6 -0
  6. data/lib/puppet-strings/markdown/data_type.rb +16 -0
  7. data/lib/puppet-strings/markdown/resource_type.rb +19 -2
  8. data/lib/puppet-strings/markdown/templates/classes_and_defines.erb +4 -4
  9. data/lib/puppet-strings/markdown/templates/data_type.erb +11 -4
  10. data/lib/puppet-strings/markdown/templates/data_type_function.erb +67 -0
  11. data/lib/puppet-strings/markdown/templates/function.erb +2 -1
  12. data/lib/puppet-strings/markdown/templates/puppet_task.erb +1 -1
  13. data/lib/puppet-strings/markdown/templates/resource_type.erb +12 -12
  14. data/lib/puppet-strings/markdown/templates/table_of_contents.erb +6 -6
  15. data/lib/puppet-strings/version.rb +1 -1
  16. data/lib/puppet-strings/yard/code_objects/data_type.rb +26 -6
  17. data/lib/puppet-strings/yard/code_objects/type.rb +46 -5
  18. data/lib/puppet-strings/yard/handlers/ruby/data_type_handler.rb +190 -43
  19. data/lib/puppet-strings/yard/handlers/ruby/type_base.rb +6 -0
  20. data/lib/puppet-strings/yard/handlers/ruby/type_extras_handler.rb +1 -1
  21. data/lib/puppet-strings/yard/handlers/ruby/type_handler.rb +6 -0
  22. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/method_details_list.erb +6 -0
  23. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/setup.rb +9 -1
  24. data/lib/puppet-strings/yard/templates/default/puppet_type/html/setup.rb +3 -1
  25. metadata +4 -46
  26. data/CODEOWNERS +0 -1
  27. data/Gemfile +0 -53
  28. data/HISTORY.md +0 -218
  29. data/JSON.md +0 -832
  30. data/Rakefile +0 -160
  31. data/codecov.yml +0 -3
  32. data/misc/ANNOUNCEMENT_TEMPLATE.md +0 -40
  33. data/spec/acceptance/emit_json_options_spec.rb +0 -69
  34. data/spec/acceptance/generate_markdown_spec.rb +0 -47
  35. data/spec/acceptance/running_strings_generate_spec.rb +0 -88
  36. data/spec/fixtures/acceptance/modules/test/functions/add.pp +0 -9
  37. data/spec/fixtures/acceptance/modules/test/lib/puppet/functions/4x_function.rb +0 -5
  38. data/spec/fixtures/acceptance/modules/test/lib/puppet/parser/functions/function3x.rb +0 -2
  39. data/spec/fixtures/acceptance/modules/test/lib/puppet/provider/server/linux.rb +0 -9
  40. data/spec/fixtures/acceptance/modules/test/lib/puppet/type/database.rb +0 -15
  41. data/spec/fixtures/acceptance/modules/test/manifests/init.pp +0 -31
  42. data/spec/fixtures/acceptance/modules/test/manifests/triple_nested_classes.pp +0 -27
  43. data/spec/fixtures/acceptance/modules/test/metadata.json +0 -10
  44. data/spec/fixtures/acceptance/modules/test/types/elephant.pp +0 -2
  45. data/spec/fixtures/unit/markdown/output.md +0 -561
  46. data/spec/fixtures/unit/markdown/output_with_data_types.md +0 -606
  47. data/spec/fixtures/unit/markdown/output_with_plan.md +0 -595
  48. data/spec/spec_helper.rb +0 -49
  49. data/spec/spec_helper_acceptance.rb +0 -58
  50. data/spec/spec_helper_acceptance_local.rb +0 -10
  51. data/spec/unit/puppet-strings/describe_spec.rb +0 -141
  52. data/spec/unit/puppet-strings/json_spec.rb +0 -302
  53. data/spec/unit/puppet-strings/markdown/base_spec.rb +0 -146
  54. data/spec/unit/puppet-strings/markdown_spec.rb +0 -374
  55. data/spec/unit/puppet-strings/yard/code_objects/task_spec.rb +0 -92
  56. data/spec/unit/puppet-strings/yard/handlers/json/task_handler_spec.rb +0 -116
  57. data/spec/unit/puppet-strings/yard/handlers/puppet/class_handler_spec.rb +0 -217
  58. data/spec/unit/puppet-strings/yard/handlers/puppet/data_type_alias_handler_spec.rb +0 -65
  59. data/spec/unit/puppet-strings/yard/handlers/puppet/defined_type_handler_spec.rb +0 -231
  60. data/spec/unit/puppet-strings/yard/handlers/puppet/function_handler_spec.rb +0 -315
  61. data/spec/unit/puppet-strings/yard/handlers/ruby/data_type_handler_spec.rb +0 -309
  62. data/spec/unit/puppet-strings/yard/handlers/ruby/function_handler_spec.rb +0 -746
  63. data/spec/unit/puppet-strings/yard/handlers/ruby/provider_handler_spec.rb +0 -158
  64. data/spec/unit/puppet-strings/yard/handlers/ruby/rsapi_handler_spec.rb +0 -235
  65. data/spec/unit/puppet-strings/yard/handlers/ruby/type_handler_spec.rb +0 -311
  66. data/spec/unit/puppet-strings/yard/parsers/json/parser_spec.rb +0 -72
  67. data/spec/unit/puppet-strings/yard/parsers/json/task_statement_spec.rb +0 -56
  68. data/spec/unit/puppet-strings/yard/parsers/puppet/parser_spec.rb +0 -251
  69. data/spec/unit/puppet-strings/yard/util_spec.rb +0 -48
@@ -1,72 +0,0 @@
1
- require 'spec_helper'
2
- require 'puppet-strings/yard'
3
-
4
- describe PuppetStrings::Yard::Parsers::JSON::Parser do
5
- subject { PuppetStrings::Yard::Parsers::JSON::Parser.new(source, file) }
6
- let(:file) { 'test.json' }
7
-
8
- describe 'initialization of the parser' do
9
- let(:source) { '{}' }
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
-
22
- expect(subject.enumerator.empty?).to be_truthy
23
- end
24
- end
25
-
26
- describe 'parsing invalid JSON' do
27
- let(:source) { <<SOURCE
28
- class foo {
29
- SOURCE
30
- }
31
-
32
- it 'should raise an exception' do
33
- expect{ subject.parse }.to output(/\[error\]: Failed to parse test.json/).to_stdout_from_any_process
34
- end
35
- end
36
-
37
-
38
- describe 'parsing valid task metadata JSON' do
39
- let(:source) { <<SOURCE
40
- {
41
- "description": "Allows you to backup your database to local file.",
42
- "input_method": "stdin",
43
- "parameters": {
44
- "database": {
45
- "description": "Database to connect to",
46
- "type": "Optional[String[1]]"
47
- },
48
- "user": {
49
- "description": "The user",
50
- "type": "Optional[String[1]]"
51
- },
52
- "password": {
53
- "description": "The password",
54
- "type": "Optional[String[1]]"
55
- },
56
- "sql": {
57
- "description": "Path to file you want backup to",
58
- "type": "String[1]"
59
- }
60
- }
61
- }
62
- SOURCE
63
- }
64
- it 'should parse the JSON and extract a TaskStatement' do
65
- subject.parse
66
-
67
- expect(subject.enumerator.size).to eq(1)
68
- statement = subject.enumerator.first
69
- expect(statement).to be_instance_of(PuppetStrings::Yard::Parsers::JSON::TaskStatement)
70
- end
71
- end
72
- end
@@ -1,56 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe PuppetStrings::Yard::Parsers::JSON::TaskStatement do
4
- let(:source) { <<-SOURCE
5
- {
6
- "description": "Allows you to backup your database to local file.",
7
- "input_method": "stdin",
8
- "parameters": {
9
- "database": {
10
- "description": "Database to connect to",
11
- "type": "Optional[String[1]]"
12
- },
13
- "user": {
14
- "description": "The user",
15
- "type": "Optional[String[1]]"
16
- },
17
- "password": {
18
- "description": "The password",
19
- "type": "Optional[String[1]]"
20
- },
21
- "sql": {
22
- "description": "Path to file you want backup to",
23
- "type": "String[1]"
24
- }
25
- }
26
- }
27
- SOURCE
28
- }
29
- let(:json) { JSON.parse(source) }
30
- subject { PuppetStrings::Yard::Parsers::JSON::TaskStatement.new(json, source, "test.json") }
31
- describe '#comments' do
32
- it 'returns docstring' do
33
- expect(subject.comments).to eq "Allows you to backup your database to local file."
34
- end
35
- end
36
- describe '#parameters' do
37
- context 'with params' do
38
- it 'returns params' do
39
- expect(subject.parameters.size > 0).to be true
40
- end
41
- end
42
- context 'no params' do
43
- let(:source) { <<-SOURCE
44
- {
45
- "description": "Allows you to backup your database to local file.",
46
- "input_method": "stdin"
47
- }
48
- SOURCE
49
- }
50
- it 'returns an empty hash' do
51
- expect(subject.parameters).to eq({})
52
- end
53
- end
54
- end
55
-
56
- end
@@ -1,251 +0,0 @@
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|input)/).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
-
172
- describe 'parsing puppet functions with return type in defintion', if: TEST_FUNCTION_RETURN_TYPE do
173
- let(:source) { <<SOURCE
174
- # A simple foo function.
175
- # @return Returns a string
176
- function foo() >> String {
177
- notice world
178
- }
179
- SOURCE
180
- }
181
-
182
- it 'should parse the puppet function statement' do
183
- subject.parse
184
- expect(subject.enumerator.size).to eq(1)
185
- statement = subject.enumerator.first
186
- expect(statement).to be_a(PuppetStrings::Yard::Parsers::Puppet::FunctionStatement)
187
- expect(statement.type).to eq('String')
188
- end
189
- end
190
-
191
- describe 'parsing puppet functions with complex return types in defintion', if: TEST_FUNCTION_RETURN_TYPE do
192
- let(:source) { <<SOURCE
193
- # A simple foo function.
194
- # @return Returns a struct with a hash including one key which must be an integer between 1 and 10.
195
- function foo() >> Struct[{'a' => Integer[1, 10]}] {
196
- notice world
197
- }
198
- SOURCE
199
- }
200
-
201
- it 'should parse the puppet function statement' do
202
- subject.parse
203
- expect(subject.enumerator.size).to eq(1)
204
- statement = subject.enumerator.first
205
- expect(statement).to be_a(PuppetStrings::Yard::Parsers::Puppet::FunctionStatement)
206
- expect(statement.type).to eq("Struct\[{'a' => Integer[1, 10]}\]")
207
- end
208
- end
209
-
210
- describe 'parsing type alias definitions', if: TEST_PUPPET_DATATYPES do
211
- context 'given a type alias on a single line' do
212
- let(:source) { <<-SOURCE
213
- # A simple foo type.
214
- type Module::Typename = Variant[Stdlib::Windowspath, Stdlib::Unixpath]
215
- SOURCE
216
- }
217
-
218
- it 'should parse the puppet type statement' do
219
- subject.parse
220
- expect(subject.enumerator.size).to eq(1)
221
- statement = subject.enumerator.first
222
- expect(statement).to be_a(PuppetStrings::Yard::Parsers::Puppet::DataTypeAliasStatement)
223
- expect(statement.docstring).to eq('A simple foo type.')
224
- expect(statement.name).to eq('Module::Typename')
225
- expect(statement.alias_of).to eq('Variant[Stdlib::Windowspath, Stdlib::Unixpath]')
226
- end
227
- end
228
-
229
- context 'given a type alias over multiple lines' do
230
- let(:source) { <<-SOURCE
231
- # A multiline foo type
232
- # with long docs
233
- type OptionsWithoutName = Struct[{
234
- value_type => Optional[ValueType],
235
- merge => Optional[MergeType]
236
- }]
237
- SOURCE
238
- }
239
-
240
- it 'should parse the puppet type statement' do
241
- subject.parse
242
- expect(subject.enumerator.size).to eq(1)
243
- statement = subject.enumerator.first
244
- expect(statement).to be_a(PuppetStrings::Yard::Parsers::Puppet::DataTypeAliasStatement)
245
- expect(statement.docstring).to eq("A multiline foo type\nwith long docs")
246
- expect(statement.name).to eq('OptionsWithoutName')
247
- expect(statement.alias_of).to eq("Struct[{\n value_type => Optional[ValueType],\n merge => Optional[MergeType]\n}]")
248
- end
249
- end
250
- end
251
- end
@@ -1,48 +0,0 @@
1
- require 'spec_helper'
2
- require 'puppet-strings/yard'
3
-
4
- describe PuppetStrings::Yard::Util do
5
- subject {PuppetStrings::Yard::Util}
6
-
7
- describe 'scrub_string' do
8
- it 'should remove `%Q` and its brackets from a string ' do
9
- str = "%Q{this is a test string}"
10
- expect(subject.scrub_string(str)).to eq('this is a test string')
11
- end
12
-
13
- it 'should remove `%q` and its brackets from a string' do
14
- str = "%q{this is a test string}"
15
- expect(subject.scrub_string(str)).to eq('this is a test string')
16
- end
17
-
18
- it 'should not affect newlines when %Q notation is used' do
19
- str = <<-STR
20
- %Q{this is
21
- a test string}
22
- STR
23
- expect(subject.scrub_string(str)).to eq("this is\na test string")
24
- end
25
-
26
- it 'should not affect a string which does not use %Q notation' do
27
- str = "this is a test string"
28
- expect(subject.scrub_string(str)).to eq('this is a test string')
29
- end
30
- end
31
-
32
- describe 'github_to_yard_links' do
33
- it 'converts a link correctly' do
34
- str = '<a href="#module-description">'
35
- expect(subject.github_to_yard_links(str)).to eq('<a href="#label-Module+description">')
36
- end
37
-
38
- it 'leaves other links with hashes alone' do
39
- str = '<a href="www.github.com/blah/document.html#module-description">'
40
- expect(subject.github_to_yard_links(str)).to eq(str)
41
- end
42
-
43
- it 'leaves plain text alone' do
44
- str = '<a href="#module-description"> module-description'
45
- expect(subject.github_to_yard_links(str)).to eq('<a href="#label-Module+description"> module-description')
46
- end
47
- end
48
- end