puppet-strings 2.2.0 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +12 -0
- data/Gemfile +14 -5
- data/JSON.md +41 -11
- data/README.md +66 -7
- data/Rakefile +99 -29
- data/lib/puppet-strings/json.rb +2 -0
- data/lib/puppet-strings/markdown.rb +2 -0
- data/lib/puppet-strings/markdown/data_type.rb +18 -0
- data/lib/puppet-strings/markdown/data_types.rb +41 -0
- data/lib/puppet-strings/markdown/function.rb +2 -2
- data/lib/puppet-strings/markdown/table_of_contents.rb +1 -0
- data/lib/puppet-strings/markdown/templates/data_type.erb +78 -0
- data/lib/puppet-strings/tasks/generate.rb +3 -2
- data/lib/puppet-strings/version.rb +1 -1
- data/lib/puppet-strings/yard.rb +10 -0
- data/lib/puppet-strings/yard/code_objects.rb +2 -0
- data/lib/puppet-strings/yard/code_objects/class.rb +1 -1
- data/lib/puppet-strings/yard/code_objects/data_type.rb +80 -0
- data/lib/puppet-strings/yard/code_objects/data_type_alias.rb +58 -0
- data/lib/puppet-strings/yard/code_objects/defined_type.rb +1 -1
- data/lib/puppet-strings/yard/code_objects/function.rb +3 -3
- data/lib/puppet-strings/yard/code_objects/plan.rb +1 -1
- data/lib/puppet-strings/yard/handlers.rb +2 -0
- data/lib/puppet-strings/yard/handlers/puppet/data_type_alias_handler.rb +24 -0
- data/lib/puppet-strings/yard/handlers/ruby/base.rb +2 -2
- data/lib/puppet-strings/yard/handlers/ruby/data_type_handler.rb +236 -0
- data/lib/puppet-strings/yard/handlers/ruby/function_handler.rb +1 -3
- data/lib/puppet-strings/yard/handlers/ruby/rsapi_handler.rb +2 -2
- data/lib/puppet-strings/yard/handlers/ruby/type_base.rb +5 -6
- data/lib/puppet-strings/yard/parsers/json/parser.rb +1 -1
- data/lib/puppet-strings/yard/parsers/puppet/parser.rb +14 -7
- data/lib/puppet-strings/yard/parsers/puppet/statement.rb +25 -0
- data/lib/puppet-strings/yard/tags/overload_tag.rb +1 -1
- data/lib/puppet-strings/yard/templates/default/fulldoc/html/full_list_puppet_data_type.erb +10 -0
- data/lib/puppet-strings/yard/templates/default/fulldoc/html/setup.rb +9 -0
- data/lib/puppet-strings/yard/templates/default/layout/html/objects.erb +2 -0
- data/lib/puppet-strings/yard/templates/default/layout/html/setup.rb +18 -1
- data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/box_info.erb +10 -0
- data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/header.erb +1 -0
- data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/note.erb +6 -0
- data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/overview.erb +6 -0
- data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/setup.rb +5 -0
- data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/source.erb +12 -0
- data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/summary.erb +4 -0
- data/lib/puppet-strings/yard/templates/default/puppet_data_type/html/todo.erb +6 -0
- data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/alias_of.erb +10 -0
- data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/box_info.erb +10 -0
- data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/header.erb +1 -0
- data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/note.erb +6 -0
- data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/overview.erb +6 -0
- data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/setup.rb +17 -0
- data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/source.erb +12 -0
- data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/summary.erb +4 -0
- data/lib/puppet-strings/yard/templates/default/puppet_data_type_alias/html/todo.erb +6 -0
- data/lib/puppet-strings/yard/templates/default/tags/setup.rb +1 -0
- data/lib/puppet/face/strings.rb +3 -3
- data/spec/acceptance/emit_json_options_spec.rb +69 -0
- data/spec/acceptance/generate_markdown_spec.rb +13 -15
- data/spec/acceptance/running_strings_generate_spec.rb +78 -0
- data/spec/fixtures/acceptance/modules/test/metadata.json +5 -1
- data/spec/fixtures/acceptance/modules/test/types/elephant.pp +2 -0
- data/spec/fixtures/unit/markdown/output_with_data_types.md +553 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/spec_helper_acceptance.rb +52 -22
- data/spec/spec_helper_acceptance_local.rb +10 -0
- data/spec/unit/puppet-strings/describe_spec.rb +7 -7
- data/spec/unit/puppet-strings/json_spec.rb +23 -4
- data/spec/unit/puppet-strings/markdown/base_spec.rb +3 -3
- data/spec/unit/puppet-strings/markdown_spec.rb +84 -23
- data/spec/unit/puppet-strings/yard/code_objects/task_spec.rb +1 -1
- data/spec/unit/puppet-strings/yard/handlers/json/task_handler_spec.rb +4 -4
- data/spec/unit/puppet-strings/yard/handlers/puppet/class_handler_spec.rb +8 -8
- data/spec/unit/puppet-strings/yard/handlers/puppet/data_type_alias_handler_spec.rb +65 -0
- data/spec/unit/puppet-strings/yard/handlers/puppet/defined_type_handler_spec.rb +8 -8
- data/spec/unit/puppet-strings/yard/handlers/puppet/function_handler_spec.rb +13 -13
- data/spec/unit/puppet-strings/yard/handlers/ruby/data_type_handler_spec.rb +232 -0
- data/spec/unit/puppet-strings/yard/handlers/ruby/function_handler_spec.rb +36 -19
- data/spec/unit/puppet-strings/yard/handlers/ruby/provider_handler_spec.rb +26 -7
- data/spec/unit/puppet-strings/yard/handlers/ruby/rsapi_handler_spec.rb +7 -7
- data/spec/unit/puppet-strings/yard/handlers/ruby/type_handler_spec.rb +26 -10
- data/spec/unit/puppet-strings/yard/parsers/json/task_statement_spec.rb +2 -2
- data/spec/unit/puppet-strings/yard/parsers/puppet/parser_spec.rb +42 -0
- data/spec/unit/puppet-strings/yard/util_spec.rb +1 -1
- metadata +35 -7
- data/spec/acceptance/emit_json_options.rb +0 -71
- data/spec/acceptance/lib/util.rb +0 -163
- data/spec/acceptance/running_strings_generate.rb +0 -54
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'puppet-strings/yard'
|
3
|
+
|
4
|
+
describe PuppetStrings::Yard::Handlers::Puppet::DataTypeAliasHandler, if: TEST_PUPPET_DATATYPES do
|
5
|
+
subject {
|
6
|
+
YARD::Parser::SourceParser.parse_string(source, :puppet)
|
7
|
+
YARD::Registry.all(:puppet_data_type_alias)
|
8
|
+
}
|
9
|
+
|
10
|
+
describe 'parsing source without a type alias definition' do
|
11
|
+
let(:source) { 'notice hi' }
|
12
|
+
|
13
|
+
it 'no aliases should be in the registry' do
|
14
|
+
expect(subject.empty?).to eq(true)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe 'parsing source with a syntax error' do
|
19
|
+
let(:source) { 'type Testype =' }
|
20
|
+
|
21
|
+
it 'should log an error' do
|
22
|
+
expect{ subject }.to output(/\[error\]: Failed to parse \(stdin\): Syntax error at end of (file|input)/).to_stdout_from_any_process
|
23
|
+
expect(subject.empty?).to eq(true)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe 'parsing a data type alias with a missing docstring' do
|
28
|
+
let(:source) { 'type Testype = String[1]' }
|
29
|
+
|
30
|
+
it 'should log a warning' do
|
31
|
+
expect{ subject }.to output(/\[warn\]: Missing documentation for Puppet type alias 'Testype' at \(stdin\):1\./).to_stdout_from_any_process
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe 'parsing a data type alias with a summary' do
|
36
|
+
context 'when the summary has fewer than 140 characters' do
|
37
|
+
let(:source) { <<-SOURCE
|
38
|
+
# A simple foo type.
|
39
|
+
# @summary A short summary.
|
40
|
+
type Testype = String[1]
|
41
|
+
SOURCE
|
42
|
+
}
|
43
|
+
|
44
|
+
it 'should parse the summary' do
|
45
|
+
expect{ subject }.to output('').to_stdout_from_any_process
|
46
|
+
expect(subject.size).to eq(1)
|
47
|
+
summary = subject.first.tags(:summary)
|
48
|
+
expect(summary.first.text).to eq('A short summary.')
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'when the summary has more than 140 characters' do
|
53
|
+
let(:source) { <<-SOURCE
|
54
|
+
# A simple foo type.
|
55
|
+
# @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!!
|
56
|
+
type Testype = String[1]
|
57
|
+
SOURCE
|
58
|
+
}
|
59
|
+
|
60
|
+
it 'should log a warning' do
|
61
|
+
expect{ subject }.to output(/\[warn\]: The length of the summary for puppet_data_type_alias 'Testype' exceeds the recommended limit of 140 characters./).to_stdout_from_any_process
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -44,7 +44,7 @@ define foo(Integer $param1, $param2, String $param3 = hi) {
|
|
44
44
|
ensure => present
|
45
45
|
}
|
46
46
|
}
|
47
|
-
SOURCE
|
47
|
+
SOURCE
|
48
48
|
}
|
49
49
|
it 'does not output a warning for title/name' do
|
50
50
|
expect{ subject }.not_to output(/\[warn\].*(name|title).*/).to_stdout_from_any_process
|
@@ -92,7 +92,7 @@ define foo(Integer $param1, $param2, String $param3 = hi) {
|
|
92
92
|
ensure => present
|
93
93
|
}
|
94
94
|
}
|
95
|
-
SOURCE
|
95
|
+
SOURCE
|
96
96
|
}
|
97
97
|
|
98
98
|
it 'should output a warning' do
|
@@ -110,7 +110,7 @@ define foo(Integer $param1, $param2, String $param3 = hi) {
|
|
110
110
|
ensure => present
|
111
111
|
}
|
112
112
|
}
|
113
|
-
SOURCE
|
113
|
+
SOURCE
|
114
114
|
}
|
115
115
|
|
116
116
|
it 'should output a warning' do
|
@@ -129,7 +129,7 @@ define foo(Integer $param1, $param2, String $param3 = hi) {
|
|
129
129
|
ensure => present
|
130
130
|
}
|
131
131
|
}
|
132
|
-
SOURCE
|
132
|
+
SOURCE
|
133
133
|
}
|
134
134
|
|
135
135
|
it 'should respect the type that was documented' do
|
@@ -152,7 +152,7 @@ define foo(Integer $param1, $param2, String $param3 = hi) {
|
|
152
152
|
ensure => present
|
153
153
|
}
|
154
154
|
}
|
155
|
-
SOURCE
|
155
|
+
SOURCE
|
156
156
|
}
|
157
157
|
|
158
158
|
it 'should output a warning' do
|
@@ -171,7 +171,7 @@ define foo(Integer $param1, $param2, String $param3 = hi) {
|
|
171
171
|
ensure => present
|
172
172
|
}
|
173
173
|
}
|
174
|
-
SOURCE
|
174
|
+
SOURCE
|
175
175
|
}
|
176
176
|
|
177
177
|
it 'should respect the type that was documented' do
|
@@ -197,7 +197,7 @@ define foo(Integer $param1, $param2, String $param3 = hi) {
|
|
197
197
|
ensure => present
|
198
198
|
}
|
199
199
|
}
|
200
|
-
SOURCE
|
200
|
+
SOURCE
|
201
201
|
}
|
202
202
|
|
203
203
|
it 'should parse the summary' do
|
@@ -220,7 +220,7 @@ define foo(Integer $param1, $param2, String $param3 = hi) {
|
|
220
220
|
ensure => present
|
221
221
|
}
|
222
222
|
}
|
223
|
-
SOURCE
|
223
|
+
SOURCE
|
224
224
|
}
|
225
225
|
|
226
226
|
it 'should log a warning' do
|
@@ -44,7 +44,7 @@ function foo(Integer $param1, $param2, String $param3 = hi) {
|
|
44
44
|
notice 'hello world'
|
45
45
|
undef
|
46
46
|
}
|
47
|
-
SOURCE
|
47
|
+
SOURCE
|
48
48
|
}
|
49
49
|
|
50
50
|
it 'should register a function object' do
|
@@ -90,7 +90,7 @@ SOURCE
|
|
90
90
|
function foo(Integer $param1, $param2, String $param3 = hi) {
|
91
91
|
notice 'hello world'
|
92
92
|
}
|
93
|
-
SOURCE
|
93
|
+
SOURCE
|
94
94
|
}
|
95
95
|
|
96
96
|
it 'should output a warning' do
|
@@ -107,7 +107,7 @@ SOURCE
|
|
107
107
|
function foo(Integer $param1, $param2, String $param3 = hi) {
|
108
108
|
notice 'hello world'
|
109
109
|
}
|
110
|
-
SOURCE
|
110
|
+
SOURCE
|
111
111
|
}
|
112
112
|
|
113
113
|
it 'should output a warning' do
|
@@ -125,7 +125,7 @@ SOURCE
|
|
125
125
|
function foo(Integer $param1, $param2, String $param3 = hi) {
|
126
126
|
notice 'hello world'
|
127
127
|
}
|
128
|
-
SOURCE
|
128
|
+
SOURCE
|
129
129
|
}
|
130
130
|
|
131
131
|
it 'should respect the type that was documented' do
|
@@ -147,7 +147,7 @@ SOURCE
|
|
147
147
|
function foo(Integer $param1, $param2, String $param3 = hi) {
|
148
148
|
notice 'hello world'
|
149
149
|
}
|
150
|
-
SOURCE
|
150
|
+
SOURCE
|
151
151
|
}
|
152
152
|
|
153
153
|
it 'should output a warning' do
|
@@ -165,7 +165,7 @@ SOURCE
|
|
165
165
|
function foo(Integer $param1, $param2, String $param3 = hi) {
|
166
166
|
notice 'hello world'
|
167
167
|
}
|
168
|
-
SOURCE
|
168
|
+
SOURCE
|
169
169
|
}
|
170
170
|
|
171
171
|
it 'should respect the type that was documented' do
|
@@ -186,7 +186,7 @@ SOURCE
|
|
186
186
|
function foo(Integer $param1, $param2, String $param3 = hi) {
|
187
187
|
notice 'hello world'
|
188
188
|
}
|
189
|
-
SOURCE
|
189
|
+
SOURCE
|
190
190
|
}
|
191
191
|
|
192
192
|
it 'should output a warning' do
|
@@ -200,7 +200,7 @@ SOURCE
|
|
200
200
|
function foo() >> String {
|
201
201
|
notice 'hello world'
|
202
202
|
}
|
203
|
-
SOURCE
|
203
|
+
SOURCE
|
204
204
|
}
|
205
205
|
|
206
206
|
it 'should register a function object with the correct return type' do
|
@@ -223,7 +223,7 @@ SOURCE
|
|
223
223
|
function foo() >> String {
|
224
224
|
notice 'hi there'
|
225
225
|
}
|
226
|
-
SOURCE
|
226
|
+
SOURCE
|
227
227
|
}
|
228
228
|
|
229
229
|
it 'should not output a warning if return types match' do
|
@@ -238,7 +238,7 @@ SOURCE
|
|
238
238
|
function foo() >> Struct[{'a' => Integer[1, 10]}] {
|
239
239
|
notice 'hello world'
|
240
240
|
}
|
241
|
-
SOURCE
|
241
|
+
SOURCE
|
242
242
|
}
|
243
243
|
|
244
244
|
it 'should prefer the return type from the function definition' do
|
@@ -260,7 +260,7 @@ SOURCE
|
|
260
260
|
function foo() {
|
261
261
|
notice 'hello world'
|
262
262
|
}
|
263
|
-
SOURCE
|
263
|
+
SOURCE
|
264
264
|
}
|
265
265
|
|
266
266
|
it 'should add a return tag with a default type value of Any' do
|
@@ -285,7 +285,7 @@ SOURCE
|
|
285
285
|
function foo() {
|
286
286
|
notice 'hello world'
|
287
287
|
}
|
288
|
-
SOURCE
|
288
|
+
SOURCE
|
289
289
|
}
|
290
290
|
|
291
291
|
it 'should parse the summary' do
|
@@ -304,7 +304,7 @@ function foo() {
|
|
304
304
|
notice 'hello world'
|
305
305
|
}
|
306
306
|
|
307
|
-
SOURCE
|
307
|
+
SOURCE
|
308
308
|
}
|
309
309
|
|
310
310
|
it 'should log a warning' do
|
@@ -0,0 +1,232 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'puppet-strings/yard'
|
3
|
+
|
4
|
+
describe PuppetStrings::Yard::Handlers::Ruby::DataTypeHandler, if: TEST_PUPPET_DATATYPES do
|
5
|
+
subject {
|
6
|
+
YARD::Parser::SourceParser.parse_string(source, :ruby)
|
7
|
+
YARD::Registry.all(:puppet_data_type)
|
8
|
+
}
|
9
|
+
|
10
|
+
before(:each) do
|
11
|
+
# Tests may suppress logging to make it easier to read results,
|
12
|
+
# so remember the logging object prior to running the test
|
13
|
+
@original_yard_logging_object = YARD::Logger.instance.io
|
14
|
+
end
|
15
|
+
|
16
|
+
after(:each) do
|
17
|
+
# Restore the original logging IO object
|
18
|
+
YARD::Logger.instance.io = @original_yard_logging_object
|
19
|
+
end
|
20
|
+
|
21
|
+
def suppress_yard_logging
|
22
|
+
YARD::Logger.instance.io = nil
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'parsing source without a data type definition' do
|
26
|
+
let(:source) { 'puts "hi"' }
|
27
|
+
|
28
|
+
it 'no data types should be in the registry' do
|
29
|
+
expect(subject.empty?).to eq(true)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe 'parsing an empty data type definition' do
|
34
|
+
let(:source) { <<-SOURCE
|
35
|
+
Puppet::DataTypes.create_type('RubyDataType') do
|
36
|
+
end
|
37
|
+
SOURCE
|
38
|
+
}
|
39
|
+
|
40
|
+
it 'should register a data type object with no param tags' do
|
41
|
+
expect(subject.size).to eq(1)
|
42
|
+
object = subject.first
|
43
|
+
expect(object).to be_a(PuppetStrings::Yard::CodeObjects::DataType)
|
44
|
+
expect(object.namespace).to eq(PuppetStrings::Yard::CodeObjects::DataTypes.instance)
|
45
|
+
expect(object.name).to eq(:RubyDataType)
|
46
|
+
expect(object.docstring).to eq('')
|
47
|
+
expect(object.docstring.tags.size).to eq(1)
|
48
|
+
tags = object.docstring.tags(:api)
|
49
|
+
expect(tags.size).to eq(1)
|
50
|
+
expect(tags[0].text).to eq('public')
|
51
|
+
|
52
|
+
expect(object.parameters.size).to eq(0)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe 'parsing a data type definition with missing param tags' do
|
57
|
+
let(:source) { <<-SOURCE
|
58
|
+
# An example Puppet Data Type in Ruby.
|
59
|
+
Puppet::DataTypes.create_type('RubyDataType') do
|
60
|
+
interface <<-PUPPET
|
61
|
+
attributes => {
|
62
|
+
msg => String[1],
|
63
|
+
}
|
64
|
+
PUPPET
|
65
|
+
end
|
66
|
+
SOURCE
|
67
|
+
}
|
68
|
+
|
69
|
+
it 'should output a warning' do
|
70
|
+
expect{ subject }.to output(/\[warn\]: Missing @param tag for attribute 'msg' near \(stdin\):2/).to_stdout_from_any_process
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'should register a data type object with all param tags' do
|
74
|
+
suppress_yard_logging
|
75
|
+
|
76
|
+
expect(subject.size).to eq(1)
|
77
|
+
object = subject.first
|
78
|
+
expect(object).to be_a(PuppetStrings::Yard::CodeObjects::DataType)
|
79
|
+
expect(object.namespace).to eq(PuppetStrings::Yard::CodeObjects::DataTypes.instance)
|
80
|
+
expect(object.name).to eq(:RubyDataType)
|
81
|
+
expect(object.docstring).to eq('An example Puppet Data Type in Ruby.')
|
82
|
+
expect(object.docstring.tags.size).to eq(2)
|
83
|
+
tags = object.docstring.tags(:api)
|
84
|
+
expect(tags.size).to eq(1)
|
85
|
+
expect(tags[0].text).to eq('public')
|
86
|
+
|
87
|
+
# Check that the param tags are created
|
88
|
+
tags = object.docstring.tags(:param)
|
89
|
+
expect(tags.size).to eq(1)
|
90
|
+
expect(tags[0].name).to eq('msg')
|
91
|
+
expect(tags[0].text).to eq('')
|
92
|
+
expect(tags[0].types).to eq(['String[1]'])
|
93
|
+
|
94
|
+
# Check for default values for parameters
|
95
|
+
expect(object.parameters.size).to eq(1)
|
96
|
+
expect(object.parameters[0]).to eq(['msg', nil])
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe 'parsing a data type definition with extra param tags' do
|
101
|
+
let(:source) { <<-SOURCE
|
102
|
+
# An example Puppet Data Type in Ruby.
|
103
|
+
# @param msg A message parameter.
|
104
|
+
# @param arg1 Optional String parameter. Defaults to 'param'.
|
105
|
+
Puppet::DataTypes.create_type('RubyDataType') do
|
106
|
+
interface <<-PUPPET
|
107
|
+
attributes => {
|
108
|
+
msg => Numeric,
|
109
|
+
}
|
110
|
+
PUPPET
|
111
|
+
end
|
112
|
+
SOURCE
|
113
|
+
}
|
114
|
+
|
115
|
+
it 'should output a warning' do
|
116
|
+
expect{ subject }.to output(/\[warn\]: The @param tag for 'arg1' has no matching attribute near \(stdin\):4/).to_stdout_from_any_process
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'should register a data type object with extra param tags removed' do
|
120
|
+
suppress_yard_logging
|
121
|
+
|
122
|
+
expect(subject.size).to eq(1)
|
123
|
+
object = subject.first
|
124
|
+
expect(object).to be_a(PuppetStrings::Yard::CodeObjects::DataType)
|
125
|
+
expect(object.namespace).to eq(PuppetStrings::Yard::CodeObjects::DataTypes.instance)
|
126
|
+
expect(object.name).to eq(:RubyDataType)
|
127
|
+
expect(object.docstring).to eq('An example Puppet Data Type in Ruby.')
|
128
|
+
expect(object.docstring.tags.size).to eq(2)
|
129
|
+
tags = object.docstring.tags(:api)
|
130
|
+
expect(tags.size).to eq(1)
|
131
|
+
expect(tags[0].text).to eq('public')
|
132
|
+
|
133
|
+
# Check that the param tags are removed
|
134
|
+
tags = object.docstring.tags(:param)
|
135
|
+
expect(tags.size).to eq(1)
|
136
|
+
expect(tags[0].name).to eq('msg')
|
137
|
+
expect(tags[0].text).to eq('A message parameter.')
|
138
|
+
expect(tags[0].types).to eq(['Numeric'])
|
139
|
+
|
140
|
+
# Check that only the actual attributes appear
|
141
|
+
expect(object.parameters.size).to eq(1)
|
142
|
+
expect(object.parameters[0]).to eq(['msg', nil])
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
describe 'parsing a valid data type definition' do
|
147
|
+
let(:source) { <<-SOURCE
|
148
|
+
# An example Puppet Data Type in Ruby.
|
149
|
+
#
|
150
|
+
# @param msg A message parameter5.
|
151
|
+
# @param arg1 Optional String parameter5. Defaults to 'param'.
|
152
|
+
Puppet::DataTypes.create_type('RubyDataType') do
|
153
|
+
interface <<-PUPPET
|
154
|
+
attributes => {
|
155
|
+
msg => Variant[Numeric, String[1,2]],
|
156
|
+
arg1 => { type => Optional[String[1]], value => "param" }
|
157
|
+
}
|
158
|
+
PUPPET
|
159
|
+
end
|
160
|
+
SOURCE
|
161
|
+
}
|
162
|
+
|
163
|
+
it 'should register a data type object' do
|
164
|
+
expect(subject.size).to eq(1)
|
165
|
+
object = subject.first
|
166
|
+
expect(object).to be_a(PuppetStrings::Yard::CodeObjects::DataType)
|
167
|
+
expect(object.namespace).to eq(PuppetStrings::Yard::CodeObjects::DataTypes.instance)
|
168
|
+
expect(object.name).to eq(:RubyDataType)
|
169
|
+
expect(object.docstring).to eq('An example Puppet Data Type in Ruby.')
|
170
|
+
expect(object.docstring.tags.size).to eq(3)
|
171
|
+
tags = object.docstring.tags(:api)
|
172
|
+
expect(tags.size).to eq(1)
|
173
|
+
expect(tags[0].text).to eq('public')
|
174
|
+
|
175
|
+
# Check that the param tags are removed
|
176
|
+
tags = object.docstring.tags(:param)
|
177
|
+
expect(tags.size).to eq(2)
|
178
|
+
expect(tags[0].name).to eq('msg')
|
179
|
+
expect(tags[0].text).to eq('A message parameter5.')
|
180
|
+
expect(tags[0].types).to eq(['Variant[Numeric, String[1,2]]'])
|
181
|
+
expect(tags[1].name).to eq('arg1')
|
182
|
+
expect(tags[1].text).to eq('Optional String parameter5. Defaults to \'param\'.')
|
183
|
+
expect(tags[1].types).to eq(['Optional[String[1]]'])
|
184
|
+
|
185
|
+
# Check for default values
|
186
|
+
expect(object.parameters.size).to eq(2)
|
187
|
+
expect(object.parameters[0]).to eq(['msg', nil])
|
188
|
+
expect(object.parameters[1]).to eq(['arg1', 'param'])
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
describe 'parsing a data type with a summary' do
|
193
|
+
context 'when the summary has fewer than 140 characters' do
|
194
|
+
let(:source) { <<-SOURCE
|
195
|
+
# An example Puppet Data Type in Ruby.
|
196
|
+
#
|
197
|
+
# @summary A short summary.
|
198
|
+
Puppet::DataTypes.create_type('RubyDataType') do
|
199
|
+
interface <<-PUPPET
|
200
|
+
attributes => { }
|
201
|
+
PUPPET
|
202
|
+
end
|
203
|
+
SOURCE
|
204
|
+
}
|
205
|
+
|
206
|
+
it 'should parse the summary' do
|
207
|
+
expect{ subject }.to output('').to_stdout_from_any_process
|
208
|
+
expect(subject.size).to eq(1)
|
209
|
+
summary = subject.first.tags(:summary)
|
210
|
+
expect(summary.first.text).to eq('A short summary.')
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
context 'when the summary has more than 140 characters' do
|
215
|
+
let(:source) { <<-SOURCE
|
216
|
+
# An example Puppet Data Type in Ruby.
|
217
|
+
#
|
218
|
+
# @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!!
|
219
|
+
Puppet::DataTypes.create_type('RubyDataType') do
|
220
|
+
interface <<-PUPPET
|
221
|
+
attributes => { }
|
222
|
+
PUPPET
|
223
|
+
end
|
224
|
+
SOURCE
|
225
|
+
}
|
226
|
+
|
227
|
+
it 'should log a warning' do
|
228
|
+
expect{ subject }.to output(/\[warn\]: The length of the summary for puppet_data_type 'RubyDataType' exceeds the recommended limit of 140 characters./).to_stdout_from_any_process
|
229
|
+
end
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|