puppet-strings 2.1.0 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +78 -4
  3. data/CONTRIBUTING.md +32 -2
  4. data/README.md +81 -17
  5. data/lib/puppet-strings.rb +13 -4
  6. data/lib/puppet-strings/describe.rb +68 -0
  7. data/lib/puppet-strings/json.rb +2 -38
  8. data/lib/puppet-strings/markdown.rb +3 -1
  9. data/lib/puppet-strings/markdown/base.rb +37 -16
  10. data/lib/puppet-strings/markdown/data_type.rb +34 -0
  11. data/lib/puppet-strings/markdown/data_types.rb +41 -0
  12. data/lib/puppet-strings/markdown/function.rb +2 -2
  13. data/lib/puppet-strings/markdown/resource_type.rb +19 -2
  14. data/lib/puppet-strings/markdown/table_of_contents.rb +1 -0
  15. data/lib/puppet-strings/markdown/templates/classes_and_defines.erb +12 -4
  16. data/lib/puppet-strings/markdown/templates/data_type.erb +93 -0
  17. data/lib/puppet-strings/markdown/templates/data_type_function.erb +67 -0
  18. data/lib/puppet-strings/markdown/templates/function.erb +36 -1
  19. data/lib/puppet-strings/markdown/templates/puppet_task.erb +1 -1
  20. data/lib/puppet-strings/markdown/templates/resource_type.erb +32 -12
  21. data/lib/puppet-strings/markdown/templates/table_of_contents.erb +6 -6
  22. data/lib/puppet-strings/tasks/generate.rb +10 -3
  23. data/lib/puppet-strings/version.rb +1 -1
  24. data/lib/puppet-strings/yard.rb +16 -0
  25. data/lib/puppet-strings/yard/code_objects.rb +2 -0
  26. data/lib/puppet-strings/yard/code_objects/class.rb +2 -2
  27. data/lib/puppet-strings/yard/code_objects/data_type.rb +100 -0
  28. data/lib/puppet-strings/yard/code_objects/data_type_alias.rb +58 -0
  29. data/lib/puppet-strings/yard/code_objects/defined_type.rb +2 -2
  30. data/lib/puppet-strings/yard/code_objects/function.rb +4 -4
  31. data/lib/puppet-strings/yard/code_objects/plan.rb +2 -2
  32. data/lib/puppet-strings/yard/code_objects/provider.rb +1 -1
  33. data/lib/puppet-strings/yard/code_objects/task.rb +1 -1
  34. data/lib/puppet-strings/yard/code_objects/type.rb +48 -6
  35. data/lib/puppet-strings/yard/handlers.rb +3 -0
  36. data/lib/puppet-strings/yard/handlers/puppet/data_type_alias_handler.rb +24 -0
  37. data/lib/puppet-strings/yard/handlers/ruby/base.rb +12 -1
  38. data/lib/puppet-strings/yard/handlers/ruby/data_type_handler.rb +393 -0
  39. data/lib/puppet-strings/yard/handlers/ruby/function_handler.rb +2 -12
  40. data/lib/puppet-strings/yard/handlers/ruby/provider_handler.rb +1 -9
  41. data/lib/puppet-strings/yard/handlers/ruby/rsapi_handler.rb +3 -3
  42. data/lib/puppet-strings/yard/handlers/ruby/type_base.rb +135 -0
  43. data/lib/puppet-strings/yard/handlers/ruby/type_extras_handler.rb +56 -0
  44. data/lib/puppet-strings/yard/handlers/ruby/type_handler.rb +9 -115
  45. data/lib/puppet-strings/yard/parsers/json/parser.rb +4 -2
  46. data/lib/puppet-strings/yard/parsers/puppet/parser.rb +14 -7
  47. data/lib/puppet-strings/yard/parsers/puppet/statement.rb +25 -0
  48. data/lib/puppet-strings/yard/tags.rb +2 -0
  49. data/lib/puppet-strings/yard/tags/enum_tag.rb +12 -0
  50. data/lib/puppet-strings/yard/tags/factory.rb +16 -0
  51. data/lib/puppet-strings/yard/tags/overload_tag.rb +2 -2
  52. data/lib/puppet-strings/yard/templates/default/fulldoc/html/full_list_puppet_data_type.erb +10 -0
  53. data/lib/puppet-strings/yard/templates/default/fulldoc/html/setup.rb +9 -0
  54. data/lib/puppet-strings/yard/templates/default/layout/html/objects.erb +2 -0
  55. data/lib/puppet-strings/yard/templates/default/layout/html/setup.rb +18 -1
  56. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/box_info.erb +10 -0
  57. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/header.erb +1 -0
  58. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/method_details_list.erb +6 -0
  59. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/note.erb +6 -0
  60. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/overview.erb +6 -0
  61. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/setup.rb +13 -0
  62. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/source.erb +12 -0
  63. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/summary.erb +4 -0
  64. data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/todo.erb +6 -0
  65. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/alias_of.erb +10 -0
  66. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/box_info.erb +10 -0
  67. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/header.erb +1 -0
  68. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/note.erb +6 -0
  69. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/overview.erb +6 -0
  70. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/setup.rb +17 -0
  71. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/source.erb +12 -0
  72. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/summary.erb +4 -0
  73. data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/todo.erb +6 -0
  74. data/lib/puppet-strings/yard/templates/default/puppet_type/html/setup.rb +3 -1
  75. data/lib/puppet-strings/yard/templates/default/tags/html/enum.erb +17 -0
  76. data/lib/puppet-strings/yard/templates/default/tags/setup.rb +7 -0
  77. data/lib/puppet-strings/yard/util.rb +48 -0
  78. data/lib/puppet/face/strings.rb +68 -3
  79. metadata +36 -45
  80. data/Gemfile +0 -37
  81. data/HISTORY.md +0 -218
  82. data/JSON.md +0 -802
  83. data/Rakefile +0 -93
  84. data/codecov.yml +0 -3
  85. data/misc/ANNOUNCEMENT_TEMPLATE.md +0 -40
  86. data/spec/acceptance/emit_json_options.rb +0 -71
  87. data/spec/acceptance/generate_markdown_spec.rb +0 -49
  88. data/spec/acceptance/lib/util.rb +0 -163
  89. data/spec/acceptance/running_strings_generate.rb +0 -54
  90. data/spec/fixtures/acceptance/modules/test/functions/add.pp +0 -9
  91. data/spec/fixtures/acceptance/modules/test/lib/puppet/functions/4x_function.rb +0 -5
  92. data/spec/fixtures/acceptance/modules/test/lib/puppet/parser/functions/function3x.rb +0 -2
  93. data/spec/fixtures/acceptance/modules/test/lib/puppet/provider/server/linux.rb +0 -9
  94. data/spec/fixtures/acceptance/modules/test/lib/puppet/type/database.rb +0 -15
  95. data/spec/fixtures/acceptance/modules/test/manifests/init.pp +0 -27
  96. data/spec/fixtures/acceptance/modules/test/manifests/triple_nested_classes.pp +0 -27
  97. data/spec/fixtures/acceptance/modules/test/metadata.json +0 -6
  98. data/spec/fixtures/unit/json/output.json +0 -660
  99. data/spec/fixtures/unit/json/output_with_plan.json +0 -697
  100. data/spec/fixtures/unit/json/output_without_puppet_function.json +0 -480
  101. data/spec/fixtures/unit/markdown/output.md +0 -444
  102. data/spec/fixtures/unit/markdown/output_with_plan.md +0 -478
  103. data/spec/spec_helper.rb +0 -45
  104. data/spec/spec_helper_acceptance.rb +0 -28
  105. data/spec/unit/puppet-strings/json_spec.rb +0 -229
  106. data/spec/unit/puppet-strings/markdown/base_spec.rb +0 -146
  107. data/spec/unit/puppet-strings/markdown_spec.rb +0 -283
  108. data/spec/unit/puppet-strings/yard/code_objects/task_spec.rb +0 -92
  109. data/spec/unit/puppet-strings/yard/handlers/json/task_handler_spec.rb +0 -124
  110. data/spec/unit/puppet-strings/yard/handlers/puppet/class_handler_spec.rb +0 -217
  111. data/spec/unit/puppet-strings/yard/handlers/puppet/defined_type_handler_spec.rb +0 -231
  112. data/spec/unit/puppet-strings/yard/handlers/puppet/function_handler_spec.rb +0 -315
  113. data/spec/unit/puppet-strings/yard/handlers/ruby/function_handler_spec.rb +0 -729
  114. data/spec/unit/puppet-strings/yard/handlers/ruby/provider_handler_spec.rb +0 -139
  115. data/spec/unit/puppet-strings/yard/handlers/ruby/rsapi_handler_spec.rb +0 -214
  116. data/spec/unit/puppet-strings/yard/handlers/ruby/type_handler_spec.rb +0 -269
  117. data/spec/unit/puppet-strings/yard/parsers/json/parser_spec.rb +0 -70
  118. data/spec/unit/puppet-strings/yard/parsers/json/task_statement_spec.rb +0 -56
  119. data/spec/unit/puppet-strings/yard/parsers/puppet/parser_spec.rb +0 -209
  120. data/spec/unit/puppet-strings/yard/util_spec.rb +0 -48
@@ -1,70 +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) { '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 JSON' 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.json/).to_stdout_from_any_process
33
- end
34
- end
35
-
36
-
37
- describe 'parsing puppet functions with return type in defintion', if: TEST_FUNCTION_RETURN_TYPE do
38
- let(:source) { <<SOURCE
39
- {
40
- "description": "Allows you to backup your database to local file.",
41
- "input_method": "stdin",
42
- "parameters": {
43
- "database": {
44
- "description": "Database to connect to",
45
- "type": "Optional[String[1]]"
46
- },
47
- "user": {
48
- "description": "The user",
49
- "type": "Optional[String[1]]"
50
- },
51
- "password": {
52
- "description": "The password",
53
- "type": "Optional[String[1]]"
54
- },
55
- "sql": {
56
- "description": "Path to file you want backup to",
57
- "type": "String[1]"
58
- }
59
- }
60
- }
61
- SOURCE
62
- }
63
- it 'should parse the puppet function statement' do
64
- subject.parse
65
- expect(subject.enumerator.size).to eq(1)
66
- statement = subject.enumerator.first
67
- expect(statement).to be_instance_of(PuppetStrings::Yard::Parsers::JSON::TaskStatement)
68
- end
69
- end
70
- 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,209 +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
- 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