puppet-strings 2.1.0 → 2.2.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 +18 -3
- data/Gemfile +3 -2
- data/Rakefile +5 -0
- data/lib/puppet-strings.rb +10 -1
- data/lib/puppet-strings/describe.rb +68 -0
- data/lib/puppet-strings/json.rb +0 -38
- data/lib/puppet-strings/markdown/base.rb +18 -16
- data/lib/puppet-strings/markdown/templates/function.erb +26 -0
- data/lib/puppet-strings/markdown/templates/resource_type.erb +4 -0
- data/lib/puppet-strings/tasks/generate.rb +7 -1
- data/lib/puppet-strings/version.rb +1 -1
- data/lib/puppet-strings/yard/code_objects/class.rb +1 -1
- 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/code_objects/provider.rb +1 -1
- data/lib/puppet-strings/yard/code_objects/type.rb +3 -2
- data/lib/puppet-strings/yard/handlers.rb +1 -0
- data/lib/puppet-strings/yard/handlers/ruby/base.rb +11 -0
- data/lib/puppet-strings/yard/handlers/ruby/function_handler.rb +1 -9
- data/lib/puppet-strings/yard/handlers/ruby/provider_handler.rb +1 -9
- data/lib/puppet-strings/yard/handlers/ruby/rsapi_handler.rb +1 -1
- data/lib/puppet-strings/yard/handlers/ruby/type_base.rb +130 -0
- data/lib/puppet-strings/yard/handlers/ruby/type_extras_handler.rb +56 -0
- data/lib/puppet-strings/yard/handlers/ruby/type_handler.rb +3 -115
- data/lib/puppet-strings/yard/parsers/json/parser.rb +3 -1
- data/lib/puppet-strings/yard/tags/overload_tag.rb +1 -1
- data/lib/puppet-strings/yard/util.rb +48 -0
- data/lib/puppet/face/strings.rb +66 -1
- data/spec/fixtures/unit/markdown/output.md +64 -0
- data/spec/fixtures/unit/markdown/output_with_plan.md +64 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/unit/puppet-strings/describe_spec.rb +141 -0
- data/spec/unit/puppet-strings/json_spec.rb +65 -11
- data/spec/unit/puppet-strings/markdown_spec.rb +13 -0
- data/spec/unit/puppet-strings/yard/handlers/json/task_handler_spec.rb +4 -12
- data/spec/unit/puppet-strings/yard/handlers/ruby/function_handler_spec.rb +1 -1
- data/spec/unit/puppet-strings/yard/handlers/ruby/rsapi_handler_spec.rb +21 -0
- data/spec/unit/puppet-strings/yard/handlers/ruby/type_handler_spec.rb +26 -0
- data/spec/unit/puppet-strings/yard/parsers/json/parser_spec.rb +5 -3
- metadata +7 -6
- data/spec/fixtures/unit/json/output.json +0 -660
- data/spec/fixtures/unit/json/output_with_plan.json +0 -697
- data/spec/fixtures/unit/json/output_without_puppet_function.json +0 -480
@@ -99,7 +99,7 @@ class PuppetStrings::Yard::Tags::OverloadTag < YARD::Tags::Tag
|
|
99
99
|
hash[:tag_name] = tag_name
|
100
100
|
hash[:text] = text if text
|
101
101
|
hash[:signature] = signature
|
102
|
-
hash[:docstring] = PuppetStrings::
|
102
|
+
hash[:docstring] = PuppetStrings::Yard::Util.docstring_to_hash(docstring) if !docstring.blank?
|
103
103
|
defaults = Hash[*parameters.select{ |p| !p[1].nil? }.flatten]
|
104
104
|
hash[:defaults] = defaults unless defaults.empty?
|
105
105
|
hash[:types] = types if types
|
@@ -28,4 +28,52 @@ module PuppetStrings::Yard::Util
|
|
28
28
|
end
|
29
29
|
data
|
30
30
|
end
|
31
|
+
|
32
|
+
# Converts a list of tags into an array of hashes.
|
33
|
+
# @param [Array] tags List of tags to be converted into an array of hashes.
|
34
|
+
# @return [Array] Returns an array of tag hashes.
|
35
|
+
def self.tags_to_hashes(tags)
|
36
|
+
# Skip over the API tags that are public
|
37
|
+
tags.select { |t| (t.tag_name != 'api' || t.text != 'public') }.map do |t|
|
38
|
+
next t.to_hash if t.respond_to?(:to_hash)
|
39
|
+
|
40
|
+
tag = { tag_name: t.tag_name }
|
41
|
+
# grab nested information for @option tags
|
42
|
+
if tag[:tag_name] == 'option'
|
43
|
+
tag[:opt_name] = t.pair.name
|
44
|
+
tag[:opt_text] = t.pair.text
|
45
|
+
tag[:opt_types] = t.pair.types
|
46
|
+
tag[:parent] = t.name
|
47
|
+
end
|
48
|
+
tag[:text] = t.text if t.text
|
49
|
+
tag[:types] = t.types if t.types
|
50
|
+
tag[:name] = t.name if t.name
|
51
|
+
tag
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Converts a YARD::Docstring (or String) to a docstring hash for JSON output.
|
56
|
+
# @param [YARD::Docstring, String] docstring The docstring to convert to a hash.
|
57
|
+
# @param [Array] select_tags List of tags to select. Other tags will be filtered out.
|
58
|
+
# @return [Hash] Returns a hash representation of the given docstring.
|
59
|
+
def self.docstring_to_hash(docstring, select_tags=nil)
|
60
|
+
hash = {}
|
61
|
+
hash[:text] = docstring
|
62
|
+
|
63
|
+
if docstring.is_a? YARD::Docstring
|
64
|
+
tags = tags_to_hashes(docstring.tags.select { |t| select_tags.nil? || select_tags.include?(t.tag_name.to_sym) })
|
65
|
+
|
66
|
+
unless tags.empty?
|
67
|
+
hash[:tags] = tags
|
68
|
+
# .sort_by do |tag|
|
69
|
+
# sort_key = tag[:tag_name].dup
|
70
|
+
# sort_key << "-#{tag[:name]}" if tag[:name]
|
71
|
+
# sort_key << "-#{tag[:opt_name]}" if tag[:opt_name]
|
72
|
+
# sort_key
|
73
|
+
# end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
hash
|
78
|
+
end
|
31
79
|
end
|
data/lib/puppet/face/strings.rb
CHANGED
@@ -81,6 +81,65 @@ Puppet::Face.define(:strings, '0.0.1') do
|
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
84
|
+
action(:describe) do #This is Kris' experiment with string based describe
|
85
|
+
option "--list" do
|
86
|
+
summary "list types"
|
87
|
+
end
|
88
|
+
option "--providers" do
|
89
|
+
summary "provide details on providers"
|
90
|
+
end
|
91
|
+
|
92
|
+
#TODO: Implement the rest of describe behavior
|
93
|
+
# * --help:
|
94
|
+
# Print this help text
|
95
|
+
|
96
|
+
# * --providers:
|
97
|
+
# Describe providers in detail for each type
|
98
|
+
|
99
|
+
# * --list:
|
100
|
+
# List all types
|
101
|
+
|
102
|
+
# * --meta:
|
103
|
+
# List all metaparameters
|
104
|
+
|
105
|
+
# * --short:
|
106
|
+
# List only parameters without detail
|
107
|
+
|
108
|
+
|
109
|
+
when_invoked do |*args|
|
110
|
+
check_required_features
|
111
|
+
require 'puppet-strings'
|
112
|
+
|
113
|
+
options = args.last
|
114
|
+
options[:describe] = true
|
115
|
+
options[:stdout] = true
|
116
|
+
options[:format] = 'json'
|
117
|
+
|
118
|
+
if args.length > 1
|
119
|
+
if options[:list]
|
120
|
+
$stderr.puts "WARNING: ignoring types when listing all types."
|
121
|
+
else
|
122
|
+
options[:describe_types] = args[0..-2]
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
#TODO: Set up search_patterns and whatever else needed to collect data for describe - currently missing some
|
127
|
+
# manifests/**/*.pp
|
128
|
+
# functions/**/*.pp
|
129
|
+
# tasks/*.json
|
130
|
+
# plans/*.pp
|
131
|
+
search_patterns = %w(
|
132
|
+
types/**/*.pp
|
133
|
+
lib/**/*.rb
|
134
|
+
)
|
135
|
+
PuppetStrings::generate(
|
136
|
+
search_patterns,
|
137
|
+
build_generate_options(options)
|
138
|
+
)
|
139
|
+
nil
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
84
143
|
# Checks that the required features are installed.
|
85
144
|
# @return [void]
|
86
145
|
def check_required_features
|
@@ -98,7 +157,6 @@ Puppet::Face.define(:strings, '0.0.1') do
|
|
98
157
|
generate_options[:debug] = Puppet[:debug]
|
99
158
|
generate_options[:backtrace] = Puppet[:trace]
|
100
159
|
generate_options[:yard_args] = yard_args unless yard_args.empty?
|
101
|
-
|
102
160
|
if options
|
103
161
|
if options[:emit_json]
|
104
162
|
$stderr.puts "WARNING: '--emit-json PATH' is deprecated. Use '--format json --out PATH' instead."
|
@@ -110,6 +168,13 @@ Puppet::Face.define(:strings, '0.0.1') do
|
|
110
168
|
generate_options[:markup] = markup if markup
|
111
169
|
generate_options[:path] = options[:out] if options[:out]
|
112
170
|
generate_options[:stdout] = options[:stdout]
|
171
|
+
|
172
|
+
if options[:describe]
|
173
|
+
generate_options[:describe] = true
|
174
|
+
generate_options[:describe_types] = options[:describe_types]
|
175
|
+
generate_options[:describe_list] = options[:list]
|
176
|
+
end
|
177
|
+
|
113
178
|
format = options[:format]
|
114
179
|
if format
|
115
180
|
if format.casecmp('markdown').zero?
|
@@ -266,6 +266,8 @@ The database server name.
|
|
266
266
|
|
267
267
|
The encryption key to use.
|
268
268
|
|
269
|
+
Required features: encryption.
|
270
|
+
|
269
271
|
##### `encrypt`
|
270
272
|
|
271
273
|
Valid values: `true`, `false`, yes, no
|
@@ -282,6 +284,14 @@ Type: Puppet Language
|
|
282
284
|
|
283
285
|
A simple Puppet function.
|
284
286
|
|
287
|
+
#### Examples
|
288
|
+
|
289
|
+
##### Test
|
290
|
+
|
291
|
+
```puppet
|
292
|
+
$result = func(1, 2)
|
293
|
+
```
|
294
|
+
|
285
295
|
#### `func(Integer $param1, Any $param2, String $param3 = hi)`
|
286
296
|
|
287
297
|
A simple Puppet function.
|
@@ -291,6 +301,14 @@ Returns: `Undef` Returns nothing.
|
|
291
301
|
Raises:
|
292
302
|
* `SomeError` this is some error
|
293
303
|
|
304
|
+
##### Examples
|
305
|
+
|
306
|
+
###### Test
|
307
|
+
|
308
|
+
```puppet
|
309
|
+
$result = func(1, 2)
|
310
|
+
```
|
311
|
+
|
294
312
|
##### `param1`
|
295
313
|
|
296
314
|
Data type: `Integer`
|
@@ -319,12 +337,28 @@ Type: Ruby 3.x API
|
|
319
337
|
|
320
338
|
Documentation for an example 3.x function.
|
321
339
|
|
340
|
+
#### Examples
|
341
|
+
|
342
|
+
##### Calling the function.
|
343
|
+
|
344
|
+
```puppet
|
345
|
+
func3x('hi', 10)
|
346
|
+
```
|
347
|
+
|
322
348
|
#### `func3x(String $param1, Integer $param2)`
|
323
349
|
|
324
350
|
Documentation for an example 3.x function.
|
325
351
|
|
326
352
|
Returns: `Undef`
|
327
353
|
|
354
|
+
##### Examples
|
355
|
+
|
356
|
+
###### Calling the function.
|
357
|
+
|
358
|
+
```puppet
|
359
|
+
func3x('hi', 10)
|
360
|
+
```
|
361
|
+
|
328
362
|
##### `param1`
|
329
363
|
|
330
364
|
Data type: `String`
|
@@ -343,12 +377,34 @@ Type: Ruby 4.x API
|
|
343
377
|
|
344
378
|
An example 4.x function.
|
345
379
|
|
380
|
+
#### Examples
|
381
|
+
|
382
|
+
##### Calling the function
|
383
|
+
|
384
|
+
```puppet
|
385
|
+
$result = func4x(1, 'foo')
|
386
|
+
```
|
387
|
+
|
388
|
+
##### Calling the function with all args
|
389
|
+
|
390
|
+
```puppet
|
391
|
+
$result = func4x(1, 'foo', ['bar'])
|
392
|
+
```
|
393
|
+
|
346
394
|
#### `func4x(Integer $param1, Any $param2, Optional[Array[String]] $param3)`
|
347
395
|
|
348
396
|
An overview for the first overload.
|
349
397
|
|
350
398
|
Returns: `Undef` Returns nothing.
|
351
399
|
|
400
|
+
##### Examples
|
401
|
+
|
402
|
+
###### Calling the function foo
|
403
|
+
|
404
|
+
```puppet
|
405
|
+
$result = func4x(1, 'foooo')
|
406
|
+
```
|
407
|
+
|
352
408
|
##### `param1`
|
353
409
|
|
354
410
|
Data type: `Integer`
|
@@ -378,6 +434,14 @@ An overview for the second overload.
|
|
378
434
|
|
379
435
|
Returns: `String` Returns a string.
|
380
436
|
|
437
|
+
##### Examples
|
438
|
+
|
439
|
+
###### Calling the function bar
|
440
|
+
|
441
|
+
```puppet
|
442
|
+
$result = func4x(1, 'bar', ['foo'])
|
443
|
+
```
|
444
|
+
|
381
445
|
##### `param`
|
382
446
|
|
383
447
|
Data type: `Boolean`
|
@@ -270,6 +270,8 @@ The database server name.
|
|
270
270
|
|
271
271
|
The encryption key to use.
|
272
272
|
|
273
|
+
Required features: encryption.
|
274
|
+
|
273
275
|
##### `encrypt`
|
274
276
|
|
275
277
|
Valid values: `true`, `false`, yes, no
|
@@ -286,6 +288,14 @@ Type: Puppet Language
|
|
286
288
|
|
287
289
|
A simple Puppet function.
|
288
290
|
|
291
|
+
#### Examples
|
292
|
+
|
293
|
+
##### Test
|
294
|
+
|
295
|
+
```puppet
|
296
|
+
$result = func(1, 2)
|
297
|
+
```
|
298
|
+
|
289
299
|
#### `func(Integer $param1, Any $param2, String $param3 = hi)`
|
290
300
|
|
291
301
|
A simple Puppet function.
|
@@ -295,6 +305,14 @@ Returns: `Undef` Returns nothing.
|
|
295
305
|
Raises:
|
296
306
|
* `SomeError` this is some error
|
297
307
|
|
308
|
+
##### Examples
|
309
|
+
|
310
|
+
###### Test
|
311
|
+
|
312
|
+
```puppet
|
313
|
+
$result = func(1, 2)
|
314
|
+
```
|
315
|
+
|
298
316
|
##### `param1`
|
299
317
|
|
300
318
|
Data type: `Integer`
|
@@ -323,12 +341,28 @@ Type: Ruby 3.x API
|
|
323
341
|
|
324
342
|
Documentation for an example 3.x function.
|
325
343
|
|
344
|
+
#### Examples
|
345
|
+
|
346
|
+
##### Calling the function.
|
347
|
+
|
348
|
+
```puppet
|
349
|
+
func3x('hi', 10)
|
350
|
+
```
|
351
|
+
|
326
352
|
#### `func3x(String $param1, Integer $param2)`
|
327
353
|
|
328
354
|
Documentation for an example 3.x function.
|
329
355
|
|
330
356
|
Returns: `Undef`
|
331
357
|
|
358
|
+
##### Examples
|
359
|
+
|
360
|
+
###### Calling the function.
|
361
|
+
|
362
|
+
```puppet
|
363
|
+
func3x('hi', 10)
|
364
|
+
```
|
365
|
+
|
332
366
|
##### `param1`
|
333
367
|
|
334
368
|
Data type: `String`
|
@@ -347,12 +381,34 @@ Type: Ruby 4.x API
|
|
347
381
|
|
348
382
|
An example 4.x function.
|
349
383
|
|
384
|
+
#### Examples
|
385
|
+
|
386
|
+
##### Calling the function
|
387
|
+
|
388
|
+
```puppet
|
389
|
+
$result = func4x(1, 'foo')
|
390
|
+
```
|
391
|
+
|
392
|
+
##### Calling the function with all args
|
393
|
+
|
394
|
+
```puppet
|
395
|
+
$result = func4x(1, 'foo', ['bar'])
|
396
|
+
```
|
397
|
+
|
350
398
|
#### `func4x(Integer $param1, Any $param2, Optional[Array[String]] $param3)`
|
351
399
|
|
352
400
|
An overview for the first overload.
|
353
401
|
|
354
402
|
Returns: `Undef` Returns nothing.
|
355
403
|
|
404
|
+
##### Examples
|
405
|
+
|
406
|
+
###### Calling the function foo
|
407
|
+
|
408
|
+
```puppet
|
409
|
+
$result = func4x(1, 'foooo')
|
410
|
+
```
|
411
|
+
|
356
412
|
##### `param1`
|
357
413
|
|
358
414
|
Data type: `Integer`
|
@@ -382,6 +438,14 @@ An overview for the second overload.
|
|
382
438
|
|
383
439
|
Returns: `String` Returns a string.
|
384
440
|
|
441
|
+
##### Examples
|
442
|
+
|
443
|
+
###### Calling the function bar
|
444
|
+
|
445
|
+
```puppet
|
446
|
+
$result = func4x(1, 'bar', ['foo'])
|
447
|
+
```
|
448
|
+
|
385
449
|
##### `param`
|
386
450
|
|
387
451
|
Data type: `Boolean`
|
data/spec/spec_helper.rb
CHANGED
@@ -0,0 +1,141 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'puppet-strings/describe'
|
3
|
+
require 'tempfile'
|
4
|
+
|
5
|
+
#TODO:
|
6
|
+
#basic describe
|
7
|
+
#params from other files (e.g. file content)
|
8
|
+
#--providers - list providers in detail
|
9
|
+
#X--list - list all providers summary
|
10
|
+
#--meta - List all metaparameters
|
11
|
+
#--short - only list params
|
12
|
+
|
13
|
+
describe PuppetStrings::Describe do
|
14
|
+
before :each do
|
15
|
+
# Populate the YARD registry with both Puppet and Ruby source
|
16
|
+
|
17
|
+
|
18
|
+
YARD::Parser::SourceParser.parse_string(<<-SOURCE, :ruby)
|
19
|
+
Puppet::Type.newtype(:database) do
|
20
|
+
desc 'An example database server resource type.'
|
21
|
+
end
|
22
|
+
SOURCE
|
23
|
+
|
24
|
+
YARD::Parser::SourceParser.parse_string(<<-SOURCE, :ruby)
|
25
|
+
Puppet::ResourceApi.register_type(
|
26
|
+
name: 'apt_key',
|
27
|
+
docs: <<-EOS,
|
28
|
+
@summary Example resource type using the new API.
|
29
|
+
@raise SomeError
|
30
|
+
This type provides Puppet with the capabilities to manage GPG keys needed
|
31
|
+
by apt to perform package validation. Apt has it's own GPG keyring that can
|
32
|
+
be manipulated through the `apt-key` command.
|
33
|
+
@example here's an example
|
34
|
+
apt_key { '6F6B15509CF8E59E6E469F327F438280EF8D349F':
|
35
|
+
source => 'http://apt.puppetlabs.com/pubkey.gpg'
|
36
|
+
}
|
37
|
+
|
38
|
+
**Autorequires**:
|
39
|
+
If Puppet is given the location of a key file which looks like an absolute
|
40
|
+
path this type will autorequire that file.
|
41
|
+
EOS
|
42
|
+
)
|
43
|
+
SOURCE
|
44
|
+
|
45
|
+
YARD::Parser::SourceParser.parse_string(<<-SOURCE, :ruby)
|
46
|
+
Puppet::Type.type(:file).newproperty(:content) do
|
47
|
+
include Puppet::Util::Checksums
|
48
|
+
include Puppet::DataSync
|
49
|
+
|
50
|
+
attr_reader :actual_content
|
51
|
+
|
52
|
+
desc <<-'EOT'
|
53
|
+
The desired contents of a file, as a string. This attribute is mutually
|
54
|
+
exclusive with `source` and `target`.
|
55
|
+
EOT
|
56
|
+
end
|
57
|
+
SOURCE
|
58
|
+
|
59
|
+
YARD::Parser::SourceParser.parse_string(<<-SOURCE, :ruby)
|
60
|
+
Puppet::Type.newtype(:file) do
|
61
|
+
include Puppet::Util::Checksums
|
62
|
+
include Puppet::Util::Backups
|
63
|
+
include Puppet::Util::SymbolicFileMode
|
64
|
+
|
65
|
+
@doc = "Manages files, including their content, ownership, and permissions.
|
66
|
+
|
67
|
+
The `file` type can manage normal files, directories, and symlinks; the
|
68
|
+
type should be specified in the `ensure` attribute."
|
69
|
+
|
70
|
+
newparam(:path) do
|
71
|
+
desc <<-'EOT'
|
72
|
+
The path to the file to manage. Must be fully qualified.
|
73
|
+
|
74
|
+
On Windows, the path should include the drive letter and should use `/` as
|
75
|
+
the separator character (rather than `\\`).
|
76
|
+
EOT
|
77
|
+
isnamevar
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
SOURCE
|
82
|
+
|
83
|
+
YARD::Parser::SourceParser.parse_string(<<-SOURCE, :ruby)
|
84
|
+
Puppet::Type.type(:file).newproperty(:source) do
|
85
|
+
include Puppet::Util::Checksums
|
86
|
+
include Puppet::DataSync
|
87
|
+
|
88
|
+
attr_reader :actual_content
|
89
|
+
|
90
|
+
desc <<-'EOT'
|
91
|
+
The desired contents of a file, as a string. This attribute is mutually
|
92
|
+
exclusive with `source` and `target`.
|
93
|
+
EOT
|
94
|
+
end
|
95
|
+
SOURCE
|
96
|
+
end
|
97
|
+
|
98
|
+
describe 'rendering DESCRIBE to stdout' do
|
99
|
+
it 'should output the expected describe content for the list of types' do
|
100
|
+
output = <<-DATA
|
101
|
+
These are the types known to puppet:
|
102
|
+
apt_key - This type provides Puppet with the capabiliti ...
|
103
|
+
database - An example database server resource type.
|
104
|
+
file - Manages files, including their content, owner ...
|
105
|
+
DATA
|
106
|
+
expect{ PuppetStrings::Describe.render(nil, true) }.to output(output).to_stdout
|
107
|
+
end
|
108
|
+
it 'should output the expected describe content for a type' do
|
109
|
+
output = <<-DATA
|
110
|
+
|
111
|
+
file
|
112
|
+
====
|
113
|
+
Manages files, including their content, ownership, and permissions.
|
114
|
+
|
115
|
+
The `file` type can manage normal files, directories, and symlinks; the
|
116
|
+
type should be specified in the `ensure` attribute.
|
117
|
+
|
118
|
+
Parameters
|
119
|
+
----------
|
120
|
+
|
121
|
+
- **content**
|
122
|
+
The desired contents of a file, as a string. This attribute is mutually
|
123
|
+
exclusive with `source` and `target`.
|
124
|
+
|
125
|
+
- **path**
|
126
|
+
The path to the file to manage. Must be fully qualified.
|
127
|
+
|
128
|
+
On Windows, the path should include the drive letter and should use `/` as
|
129
|
+
the separator character (rather than `\\`).
|
130
|
+
|
131
|
+
- **source**
|
132
|
+
The desired contents of a file, as a string. This attribute is mutually
|
133
|
+
exclusive with `source` and `target`.
|
134
|
+
|
135
|
+
Providers
|
136
|
+
---------
|
137
|
+
DATA
|
138
|
+
expect{ PuppetStrings::Describe.render(['file']) }.to output(output).to_stdout
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|