Skip to content

Commit 15257fe

Browse files
committed
First pass at generating docs for resources
1 parent b19e003 commit 15257fe

4 files changed

Lines changed: 45 additions & 8 deletions

File tree

provider/inspec.rb

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ def generate_resource(data)
5252
default_template: 'templates/inspec/plural_resource.erb',
5353
out_file: File.join(target_folder, plural("google_#{data[:product_name]}_#{name}") + ".rb")
5454
)
55+
generate_resource_file data.clone.merge(
56+
default_template: 'templates/inspec/doc.md.erb',
57+
out_file: File.join(target_folder, "google_#{data[:product_name]}_#{name}.md")
58+
)
5559
end
5660

5761
# Returns the url that this object can be retrieved from
@@ -162,12 +166,6 @@ def nested_object_requires(nested_object_type)
162166
).downcase
163167
end
164168

165-
# InSpec doesn't need wrappers for primitives, so exclude them
166-
def emit_requires(requires)
167-
primitives = ['boolean', 'enum', 'string', 'time', 'integer', 'array', 'string_array', 'double']
168-
requires.flatten.sort.uniq.reject{|r| primitives.include?(r.split('/').last)}.map { |r| "require '#{r}'" }.join("\n")
169-
end
170-
171169
def plural(word)
172170
# TODO use a real ruby gem for this? Pluralization is hard
173171
if word[-1] == 's'
@@ -178,5 +176,18 @@ def plural(word)
178176
end
179177
return word + 's'
180178
end
179+
180+
def resource_name(object, product_ns)
181+
"google_#{product_ns.downcase}_#{object.name.underscore}"
182+
end
183+
184+
def sub_property_descriptions(property)
185+
if nested_object?(property)
186+
return property.properties.map { |prop| " * `#{prop.name}`: #{prop.description}" }.join("\n")
187+
end
188+
if typed_array?(property)
189+
return property.item_type.properties.map { |prop| " * `#{prop.name}`: #{prop.description}" }.join("\n")
190+
end
191+
end
181192
end
182193
end

templates/inspec/doc.md.erb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<%= lines(autogen_notice :markdown) -%>
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+
## Properties
12+
Properties that can be accessed from the `<%= resource_name(object, product_ns) -%>` resource:
13+
<% object.properties.each do |prop| -%>
14+
* `<%= "#{prop.out_name}" -%>`, <%= "#{prop.description}" -%>
15+
16+
<%= sub_property_descriptions(prop) -%>
17+
<% end -%>

templates/inspec/nested_object.erb

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,15 @@
1616

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

19+
<%
20+
require 'google/string_utils'
21+
22+
inside_indent = 8
23+
24+
requires = generate_requires(nested_properties)
25+
requires << 'google/hash_utils'
26+
-%>
27+
<%= lines(emit_requires(requires)) -%>
1928
module Google
2029
module <%= product_ns %>
2130
module Property
@@ -34,7 +43,7 @@ module Google
3443
<%
3544
if time?(prop)
3645
init = "Time.new(@fetched['#{prop.api_name}'])"
37-
elsif primitive?(prop) || resource_ref?(prop)
46+
elsif primitive?(prop)
3847
init = "args['#{prop.api_name}']"
3948
elsif typed_array?(prop)
4049
init = "#{prop.property_type}.parse(args['#{prop.api_name}'])"

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)