govuk_tech_docs 1.5.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/CHANGELOG.md +90 -0
  4. data/docs/configuration.md +15 -0
  5. data/docs/frontmatter.md +2 -14
  6. data/docs/page-expiry.md +69 -0
  7. data/example/Gemfile +1 -0
  8. data/example/config/tech-docs.yml +6 -0
  9. data/example/source/api-path.html.md +7 -0
  10. data/example/source/api-reference.html.md +5 -0
  11. data/example/source/pets.yml +106 -0
  12. data/govuk_tech_docs.gemspec +2 -0
  13. data/lib/assets/javascripts/_analytics.js +12 -0
  14. data/lib/assets/javascripts/_modules/collapsible-navigation.js +5 -3
  15. data/lib/assets/javascripts/_modules/search.js +175 -6
  16. data/lib/assets/stylesheets/modules/_collapsible.scss +12 -5
  17. data/lib/assets/stylesheets/modules/_technical-documentation.scss +16 -11
  18. data/lib/assets/stylesheets/modules/_toc.scss +1 -1
  19. data/lib/govuk_tech_docs.rb +13 -2
  20. data/lib/govuk_tech_docs/api_reference/api_reference_extension.rb +100 -0
  21. data/lib/govuk_tech_docs/api_reference/api_reference_renderer.rb +279 -0
  22. data/lib/govuk_tech_docs/api_reference/templates/api_reference_full.html.erb +9 -0
  23. data/lib/govuk_tech_docs/api_reference/templates/operation.html.erb +11 -0
  24. data/lib/govuk_tech_docs/api_reference/templates/parameters.html.erb +28 -0
  25. data/lib/govuk_tech_docs/api_reference/templates/path.html.erb +4 -0
  26. data/lib/govuk_tech_docs/api_reference/templates/responses.html.erb +33 -0
  27. data/lib/govuk_tech_docs/api_reference/templates/schema.html.erb +29 -0
  28. data/lib/govuk_tech_docs/page_review.rb +15 -3
  29. data/lib/govuk_tech_docs/pages.rb +3 -2
  30. data/lib/govuk_tech_docs/tech_docs_html_renderer.rb +10 -0
  31. data/lib/govuk_tech_docs/version.rb +1 -1
  32. data/lib/source/layouts/_header.erb +2 -4
  33. metadata +42 -4
  34. data/lib/source/images/arrow-down.svg +0 -9
  35. 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,11 @@
1
+ <h3 id="<%= id %>"><%= key %></h3>
2
+ <% if operation.summary %>
3
+ <p><em><%= operation.summary %></em></p>
4
+ <% end %>
5
+ <% if operation.description %>
6
+ <p><%= markdown(operation.description) %></p>
7
+ <% end %>
8
+
9
+ <%= parameters %>
10
+
11
+ <%= responses %>
@@ -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,4 @@
1
+ <% if text %>
2
+ <h2 id="<%= id %>"><%= text %></h2>
3
+ <% end %>
4
+ <%= operations %>
@@ -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://govuk.slack.com/messages/#{slack_identifier}"
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: PageReview.new(page).review_by,
22
- owner_slack: page.data.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}>)
@@ -1,3 +1,3 @@
1
1
  module GovukTechDocs
2
- VERSION = "1.5.0".freeze
2
+ VERSION = "1.6.0".freeze
3
3
  end
@@ -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.5.0
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-07-19 00:00:00.000000000 Z
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>