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.
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>