govuk_tech_docs 1.5.0 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/CHANGELOG.md +90 -0
- data/docs/configuration.md +15 -0
- data/docs/frontmatter.md +2 -14
- data/docs/page-expiry.md +69 -0
- data/example/Gemfile +1 -0
- data/example/config/tech-docs.yml +6 -0
- data/example/source/api-path.html.md +7 -0
- data/example/source/api-reference.html.md +5 -0
- data/example/source/pets.yml +106 -0
- data/govuk_tech_docs.gemspec +2 -0
- data/lib/assets/javascripts/_analytics.js +12 -0
- data/lib/assets/javascripts/_modules/collapsible-navigation.js +5 -3
- data/lib/assets/javascripts/_modules/search.js +175 -6
- data/lib/assets/stylesheets/modules/_collapsible.scss +12 -5
- data/lib/assets/stylesheets/modules/_technical-documentation.scss +16 -11
- data/lib/assets/stylesheets/modules/_toc.scss +1 -1
- data/lib/govuk_tech_docs.rb +13 -2
- data/lib/govuk_tech_docs/api_reference/api_reference_extension.rb +100 -0
- data/lib/govuk_tech_docs/api_reference/api_reference_renderer.rb +279 -0
- data/lib/govuk_tech_docs/api_reference/templates/api_reference_full.html.erb +9 -0
- data/lib/govuk_tech_docs/api_reference/templates/operation.html.erb +11 -0
- data/lib/govuk_tech_docs/api_reference/templates/parameters.html.erb +28 -0
- data/lib/govuk_tech_docs/api_reference/templates/path.html.erb +4 -0
- data/lib/govuk_tech_docs/api_reference/templates/responses.html.erb +33 -0
- data/lib/govuk_tech_docs/api_reference/templates/schema.html.erb +29 -0
- data/lib/govuk_tech_docs/page_review.rb +15 -3
- data/lib/govuk_tech_docs/pages.rb +3 -2
- data/lib/govuk_tech_docs/tech_docs_html_renderer.rb +10 -0
- data/lib/govuk_tech_docs/version.rb +1 -1
- data/lib/source/layouts/_header.erb +2 -4
- metadata +42 -4
- data/lib/source/images/arrow-down.svg +0 -9
- data/lib/source/images/arrow-up.svg +0 -9
@@ -0,0 +1,9 @@
|
|
1
|
+
<h1 id="<%= info.title.parameterize %>"><%= info.title %> v<%= info.version %></h1>
|
2
|
+
<%= markdown(info.description) %>
|
3
|
+
<% if server %>
|
4
|
+
<h2 id="base-url">Base URL</h2>
|
5
|
+
<p><strong><%= server.url %></strong></p>
|
6
|
+
<% end %>
|
7
|
+
<%= paths %>
|
8
|
+
<h2 id="schemas">Schemas</h2>
|
9
|
+
<%= schemas %>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<% if parameters.any? %>
|
2
|
+
<h4 id="<%= id %>">Parameters</h4>
|
3
|
+
<table>
|
4
|
+
<thead>
|
5
|
+
<tr><th>Parameter</th><th>In</th><th>Type</th><th>Required</th><th>Description</th></tr>
|
6
|
+
</thead>
|
7
|
+
<tbody>
|
8
|
+
<% parameters.each do |parameter| %>
|
9
|
+
<tr>
|
10
|
+
<td><%= parameter.name %></td>
|
11
|
+
<td><%= parameter.in %></td>
|
12
|
+
<td><%= parameter.schema.type %></td>
|
13
|
+
<td><%= parameter.required? %></td>
|
14
|
+
<td><%= markdown(parameter.description) %>
|
15
|
+
<% if parameter.schema.enum %>
|
16
|
+
<p>Available items:</p>
|
17
|
+
<ul>
|
18
|
+
<% parameter.schema.enum.each do |item| %>
|
19
|
+
<li><%= item %></li>
|
20
|
+
<% end %>
|
21
|
+
</ul>
|
22
|
+
<% end %>
|
23
|
+
</td>
|
24
|
+
</tr>
|
25
|
+
<% end %>
|
26
|
+
</tbody>
|
27
|
+
</table>
|
28
|
+
<% end %>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<% if responses.any? %>
|
2
|
+
<h4 id="<%= id %>">Responses</h4>
|
3
|
+
<table>
|
4
|
+
<thead>
|
5
|
+
<tr><th>Status</th><th>Description</th><th>Schema</th></tr>
|
6
|
+
</thead>
|
7
|
+
<tbody>
|
8
|
+
<% responses.each do |key,response| %>
|
9
|
+
<tr>
|
10
|
+
<td><%= key %></td>
|
11
|
+
<td>
|
12
|
+
<%= markdown(response.description) %>
|
13
|
+
<% if response.content['application/json']
|
14
|
+
if response.content['application/json']["example"]
|
15
|
+
request_body = json_prettyprint(response.content['application/json']["example"])
|
16
|
+
else
|
17
|
+
request_body = json_output(response.content['application/json'].schema)
|
18
|
+
end
|
19
|
+
end %>
|
20
|
+
<% if !request_body.blank? %>
|
21
|
+
<pre><code><%= request_body %></code></pre>
|
22
|
+
<% end %>
|
23
|
+
</td>
|
24
|
+
<td>
|
25
|
+
<%= if response.content['application/json']
|
26
|
+
get_schema_link(response.content['application/json'].schema)
|
27
|
+
end %>
|
28
|
+
</td>
|
29
|
+
</tr>
|
30
|
+
<% end %>
|
31
|
+
</tbody>
|
32
|
+
</table>
|
33
|
+
<% end %>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<h3 id="<%= id = 'schema-' + title; id.parameterize %>"><%= title %></h3>
|
2
|
+
<%= markdown(schema.description) %>
|
3
|
+
<% if properties.any? %>
|
4
|
+
<table>
|
5
|
+
<thead>
|
6
|
+
<tr><th>Name</th><th>Type</th><th>Required</th><th>Description</th><th>Schema</th></tr>
|
7
|
+
</thead>
|
8
|
+
<tbody>
|
9
|
+
<% properties.each do |property| %>
|
10
|
+
<tr>
|
11
|
+
<td><%= property[0] %></td>
|
12
|
+
<td><%= property[1].type %></td>
|
13
|
+
<td><%= property[1].required.present? %></td>
|
14
|
+
<td><%= markdown(property[1].description) %></td>
|
15
|
+
<td>
|
16
|
+
<%=
|
17
|
+
schema = property[1]
|
18
|
+
# If property is an array, check the items property for a reference.
|
19
|
+
if property[1].type == 'array'
|
20
|
+
schema = property[1]['items']
|
21
|
+
end
|
22
|
+
# Only print a link if it's a referenced object.
|
23
|
+
get_schema_link(schema) if schema.node_context.referenced_by.to_s.include? '#/components/schemas' and !schema.node_context.source_location.to_s.include? '/properties/' %>
|
24
|
+
</td>
|
25
|
+
</tr>
|
26
|
+
<% end %>
|
27
|
+
</tbody>
|
28
|
+
</table>
|
29
|
+
<% end %>
|
@@ -2,8 +2,9 @@ module GovukTechDocs
|
|
2
2
|
class PageReview
|
3
3
|
attr_reader :page
|
4
4
|
|
5
|
-
def initialize(page)
|
5
|
+
def initialize(page, config = {})
|
6
6
|
@page = page
|
7
|
+
@config = config
|
7
8
|
end
|
8
9
|
|
9
10
|
def review_by
|
@@ -24,13 +25,24 @@ module GovukTechDocs
|
|
24
25
|
end
|
25
26
|
|
26
27
|
def owner_slack
|
27
|
-
page.data.owner_slack
|
28
|
+
page.data.owner_slack || default_owner_slack
|
28
29
|
end
|
29
30
|
|
30
31
|
def owner_slack_url
|
32
|
+
return "" unless owner_slack_workspace
|
31
33
|
# Slack URLs don't have the # (channels) or @ (usernames)
|
32
34
|
slack_identifier = owner_slack.to_s.delete('#').delete('@')
|
33
|
-
"https
|
35
|
+
"https://#{owner_slack_workspace}.slack.com/messages/#{slack_identifier}"
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def default_owner_slack
|
41
|
+
@config[:tech_docs][:default_owner_slack]
|
42
|
+
end
|
43
|
+
|
44
|
+
def owner_slack_workspace
|
45
|
+
@config[:tech_docs][:owner_slack_workspace]
|
34
46
|
end
|
35
47
|
end
|
36
48
|
end
|
@@ -15,11 +15,12 @@ module GovukTechDocs
|
|
15
15
|
|
16
16
|
def as_json
|
17
17
|
pages.map do |page|
|
18
|
+
review = PageReview.new(page, @config)
|
18
19
|
{
|
19
20
|
title: page.data.title,
|
20
21
|
url: "#{@config[:tech_docs][:host]}#{page.url}",
|
21
|
-
review_by:
|
22
|
-
owner_slack:
|
22
|
+
review_by: review.review_by,
|
23
|
+
owner_slack: review.owner_slack,
|
23
24
|
}
|
24
25
|
end
|
25
26
|
end
|
@@ -4,6 +4,16 @@ module GovukTechDocs
|
|
4
4
|
class TechDocsHTMLRenderer < Middleman::Renderers::MiddlemanRedcarpetHTML
|
5
5
|
include Redcarpet::Render::SmartyPants
|
6
6
|
|
7
|
+
def initialize(options = {})
|
8
|
+
@local_options = options.dup
|
9
|
+
@app = @local_options[:context].app
|
10
|
+
super
|
11
|
+
end
|
12
|
+
|
13
|
+
def paragraph(text)
|
14
|
+
@app.api("<p>#{text.strip}</p>\n")
|
15
|
+
end
|
16
|
+
|
7
17
|
def header(text, level)
|
8
18
|
anchor = UniqueIdentifierGenerator.instance.create(text, level)
|
9
19
|
%(<h#{level} id="#{anchor}">#{text}</h#{level}>)
|
@@ -8,7 +8,7 @@
|
|
8
8
|
<% end %>
|
9
9
|
<% if config[:tech_docs][:show_govuk_logo] %>
|
10
10
|
<span class="govuk-logo">
|
11
|
-
<img class="govuk-logo__printable-crown" src="/images/gov.uk_logotype_crown_invert_trans.png" height="32" width="36">
|
11
|
+
<img class="govuk-logo__printable-crown" src="/images/gov.uk_logotype_crown_invert_trans.png" height="32" width="36" alt="">
|
12
12
|
GOV.UK
|
13
13
|
</span>
|
14
14
|
<% end %>
|
@@ -33,9 +33,7 @@
|
|
33
33
|
<ul>
|
34
34
|
<% config[:tech_docs][:header_links].each do |title, path| %>
|
35
35
|
<li<% if active_page(path) %> class="active"<% end %>>
|
36
|
-
<a href="<%= path %>">
|
37
|
-
<%= title %>
|
38
|
-
</a>
|
36
|
+
<a href="<%= path %>"><%= title %></a>
|
39
37
|
</li>
|
40
38
|
<% end %>
|
41
39
|
</ul>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: govuk_tech_docs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Government Digital Service
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-09-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -164,6 +164,34 @@ dependencies:
|
|
164
164
|
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: 3.3.2
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: openapi3_parser
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: pry
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :runtime
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
167
195
|
- !ruby/object:Gem::Dependency
|
168
196
|
name: bundler
|
169
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -274,10 +302,13 @@ files:
|
|
274
302
|
- docs/frontmatter.md
|
275
303
|
- docs/layout-layout.png
|
276
304
|
- docs/not-expired-page.png
|
305
|
+
- docs/page-expiry.md
|
277
306
|
- example/.ruby-version
|
278
307
|
- example/Gemfile
|
279
308
|
- example/config.rb
|
280
309
|
- example/config/tech-docs.yml
|
310
|
+
- example/source/api-path.html.md
|
311
|
+
- example/source/api-reference.html.md
|
281
312
|
- example/source/child-of-expired-page.html.md
|
282
313
|
- example/source/core-layout.html.md.erb
|
283
314
|
- example/source/expired-page-with-owner.html.md
|
@@ -286,6 +317,7 @@ files:
|
|
286
317
|
- example/source/index.html.md.erb
|
287
318
|
- example/source/javascripts/application.js
|
288
319
|
- example/source/not-expired-page.html.md
|
320
|
+
- example/source/pets.yml
|
289
321
|
- example/source/stylesheets/print.css.scss
|
290
322
|
- example/source/stylesheets/screen-old-ie.css.scss
|
291
323
|
- example/source/stylesheets/screen.css.scss
|
@@ -347,6 +379,14 @@ files:
|
|
347
379
|
- lib/assets/stylesheets/utilities/_printable.scss
|
348
380
|
- lib/assets/stylesheets/vendor/_fixedsticky.scss
|
349
381
|
- lib/govuk_tech_docs.rb
|
382
|
+
- lib/govuk_tech_docs/api_reference/api_reference_extension.rb
|
383
|
+
- lib/govuk_tech_docs/api_reference/api_reference_renderer.rb
|
384
|
+
- lib/govuk_tech_docs/api_reference/templates/api_reference_full.html.erb
|
385
|
+
- lib/govuk_tech_docs/api_reference/templates/operation.html.erb
|
386
|
+
- lib/govuk_tech_docs/api_reference/templates/parameters.html.erb
|
387
|
+
- lib/govuk_tech_docs/api_reference/templates/path.html.erb
|
388
|
+
- lib/govuk_tech_docs/api_reference/templates/responses.html.erb
|
389
|
+
- lib/govuk_tech_docs/api_reference/templates/schema.html.erb
|
350
390
|
- lib/govuk_tech_docs/contribution_banner.rb
|
351
391
|
- lib/govuk_tech_docs/meta_tags.rb
|
352
392
|
- lib/govuk_tech_docs/page_review.rb
|
@@ -366,8 +406,6 @@ files:
|
|
366
406
|
- lib/source/favicon.ico
|
367
407
|
- lib/source/images/anchored-heading-icon-2x.png
|
368
408
|
- lib/source/images/anchored-heading-icon.png
|
369
|
-
- lib/source/images/arrow-down.svg
|
370
|
-
- lib/source/images/arrow-up.svg
|
371
409
|
- lib/source/images/gov.uk_logotype_crown-2x.png
|
372
410
|
- lib/source/images/gov.uk_logotype_crown.png
|
373
411
|
- lib/source/images/gov.uk_logotype_crown_invert_trans.png
|
@@ -1,9 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="utf-8"?>
|
2
|
-
<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
3
|
-
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
4
|
-
viewBox="0 0 34 34" style="enable-background:new 0 0 34 34;" xml:space="preserve">
|
5
|
-
<style type="text/css">
|
6
|
-
.st0{fill:#0B0C0C;}
|
7
|
-
</style>
|
8
|
-
<polygon class="st0" points="17,25.7 1.6,11.5 4.4,8.5 17,20.3 29.6,8.5 32.4,11.5 "/>
|
9
|
-
</svg>
|
@@ -1,9 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="utf-8"?>
|
2
|
-
<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
3
|
-
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
4
|
-
viewBox="0 0 34 34" style="enable-background:new 0 0 34 34;" xml:space="preserve">
|
5
|
-
<style type="text/css">
|
6
|
-
.st0{fill:#0B0C0C;}
|
7
|
-
</style>
|
8
|
-
<polygon class="st0" points="29.6,25.5 17,13.7 4.4,25.5 1.6,22.5 17,8.3 32.4,22.5 "/>
|
9
|
-
</svg>
|