Skip to content

Commit 974728e

Browse files
committed
Add doc generation for inspec resources
1 parent fe8675f commit 974728e

File tree

4 files changed

+53
-1
lines changed

4 files changed

+53
-1
lines changed

provider/inspec.rb

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
module Provider
2222
# Code generator for Example Cookbooks that manage Google Cloud Platform
2323
# resources.
24+
# rubocop:disable Metrics/ClassLength
2425
class Inspec < Provider::Core
2526
include Google::RubyUtils
2627
# Settings for the provider
@@ -54,6 +55,17 @@ def generate_resource(data)
5455
out_file: \
5556
File.join(target_folder, "google_#{data[:product_name]}_#{name}".pluralize + '.rb')
5657
)
58+
generate_documentation(data)
59+
end
60+
61+
# Generates InSpec markdown documents for the resource
62+
def generate_documentation(data)
63+
name = data[:object].name.underscore
64+
docs_folder = File.join(data[:output_folder], 'docs', 'resources')
65+
generate_resource_file data.clone.merge(
66+
default_template: 'templates/inspec/doc-template.md.erb',
67+
out_file: File.join(docs_folder, "google_#{data[:product_name]}_#{name}.md")
68+
)
5769
end
5870

5971
# Format a url that may be include newlines into a single line
@@ -161,5 +173,22 @@ def nested_object_requires(nested_object_type)
161173
[nested_object_type.__resource.name, nested_object_type.name.underscore].join('_')
162174
).downcase
163175
end
176+
177+
def resource_name(object, product_ns)
178+
"google_#{product_ns.downcase}_#{object.name.underscore}"
179+
end
180+
181+
def sub_property_descriptions(property)
182+
if nested_object?(property)
183+
return property.properties.map \
184+
{ |prop| " * `#{prop.name}`: #{prop.description}" }.join("\n")
185+
end
186+
# rubocop:disable Style/GuardClause
187+
if typed_array?(property)
188+
return property.item_type.properties.map \
189+
{ |prop| " * `#{prop.name}`: #{prop.description}" }.join("\n")
190+
end
191+
end
192+
# rubocop:enable Style/GuardClause
164193
end
165194
end
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<% autogen_exception -%>
2+
3+
---
4+
title: About the <%= object.name -%> resource
5+
platform: gcp
6+
---
7+
8+
## Syntax
9+
A `<%= resource_name(object, product_ns) -%>` is used to test a Google <%= object.name -%> resource
10+
11+
TODO: Examples
12+
13+
## Properties
14+
Properties that can be accessed from the `<%= resource_name(object, product_ns) -%>` resource:
15+
<% object.properties.each do |prop| -%>
16+
* `<%= "#{prop.out_name}" -%>`: <%= "#{prop.description}" -%>
17+
18+
<%= sub_property_descriptions(prop) -%>
19+
<% end -%>

templates/inspec/nested_object.erb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616

1717
<%= lines(autogen_notice :ruby) -%>
1818

19+
<%
20+
requires = generate_requires(nested_properties)
21+
-%>
22+
<%= lines(emit_requires(requires)) -%>
1923
module Google
2024
module <%= product_ns %>
2125
module Property

templates/inspec/singular_resource.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
# A provider to manage <%= @api.name -%> resources.
3131
class <%= object.name -%> < Inspec.resource(1)
3232

33-
name 'google_<%= product_ns.downcase -%>_<%= object.name.underscore -%>'
33+
name '<%= resource_name(object, product_ns) -%>'
3434
desc '<%= object.name -%>'
3535
supports platform: 'gcp2'
3636

0 commit comments

Comments
 (0)