nexmo-oas-renderer 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. checksums.yaml +7 -0
  2. data/.env.example +1 -0
  3. data/.github/workflows/push-docker-publish.yml +19 -0
  4. data/.gitignore +6 -0
  5. data/.rspec +1 -0
  6. data/.rubocop.yml +135 -0
  7. data/.travis.yml +9 -0
  8. data/CHANGELOG.md +58 -0
  9. data/CONTRIBUTING.md +46 -0
  10. data/Dockerfile +6 -0
  11. data/Gemfile +6 -0
  12. data/Gemfile.lock +248 -0
  13. data/LICENSE.txt +21 -0
  14. data/README.md +103 -0
  15. data/Rakefile +2 -0
  16. data/bin/console +14 -0
  17. data/bin/setup +8 -0
  18. data/exe/nexmo-oas-renderer +5 -0
  19. data/lib/nexmo/oas/engine.rb +11 -0
  20. data/lib/nexmo/oas/renderer.rb +13 -0
  21. data/lib/nexmo/oas/renderer/app.rb +201 -0
  22. data/lib/nexmo/oas/renderer/config.ru +9 -0
  23. data/lib/nexmo/oas/renderer/config/code_languages.yml +138 -0
  24. data/lib/nexmo/oas/renderer/config/dynamic_content.yml +1 -0
  25. data/lib/nexmo/oas/renderer/decorators/response_parser_decorator.rb +55 -0
  26. data/lib/nexmo/oas/renderer/helpers/navigation.rb +66 -0
  27. data/lib/nexmo/oas/renderer/helpers/render.rb +25 -0
  28. data/lib/nexmo/oas/renderer/helpers/summary.rb +33 -0
  29. data/lib/nexmo/oas/renderer/helpers/url.rb +19 -0
  30. data/lib/nexmo/oas/renderer/presenters/api_specification.rb +54 -0
  31. data/lib/nexmo/oas/renderer/presenters/endpoint.rb +21 -0
  32. data/lib/nexmo/oas/renderer/presenters/groups.rb +39 -0
  33. data/lib/nexmo/oas/renderer/presenters/navigation.rb +26 -0
  34. data/lib/nexmo/oas/renderer/presenters/open_api_specification.rb +62 -0
  35. data/lib/nexmo/oas/renderer/presenters/request_body_raw.rb +141 -0
  36. data/lib/nexmo/oas/renderer/presenters/response_format.rb +29 -0
  37. data/lib/nexmo/oas/renderer/presenters/response_tab/link.rb +36 -0
  38. data/lib/nexmo/oas/renderer/presenters/response_tab/panel.rb +45 -0
  39. data/lib/nexmo/oas/renderer/presenters/response_tabs.rb +58 -0
  40. data/lib/nexmo/oas/renderer/presenters/versions.rb +51 -0
  41. data/lib/nexmo/oas/renderer/public/500.html +66 -0
  42. data/lib/nexmo/oas/renderer/public/assets/images/brands/android.svg +1 -0
  43. data/lib/nexmo/oas/renderer/public/assets/images/brands/curl.svg +1 -0
  44. data/lib/nexmo/oas/renderer/public/assets/images/brands/dotnet.svg +1 -0
  45. data/lib/nexmo/oas/renderer/public/assets/images/brands/ios.svg +1 -0
  46. data/lib/nexmo/oas/renderer/public/assets/images/brands/java.svg +1 -0
  47. data/lib/nexmo/oas/renderer/public/assets/images/brands/javascript.svg +1 -0
  48. data/lib/nexmo/oas/renderer/public/assets/images/brands/node.svg +1 -0
  49. data/lib/nexmo/oas/renderer/public/assets/images/brands/php.svg +1 -0
  50. data/lib/nexmo/oas/renderer/public/assets/images/brands/python.svg +11 -0
  51. data/lib/nexmo/oas/renderer/public/assets/images/brands/ruby.svg +1 -0
  52. data/lib/nexmo/oas/renderer/public/assets/images/lost.svg +37 -0
  53. data/lib/nexmo/oas/renderer/public/assets/javascripts/components/format.js +47 -0
  54. data/lib/nexmo/oas/renderer/public/assets/javascripts/nexmo-oas-renderer.js +65 -0
  55. data/lib/nexmo/oas/renderer/public/assets/javascripts/popper.min.js +5 -0
  56. data/lib/nexmo/oas/renderer/public/assets/javascripts/prism.js +22 -0
  57. data/lib/nexmo/oas/renderer/public/assets/javascripts/tooltip.min.js +5 -0
  58. data/lib/nexmo/oas/renderer/public/assets/javascripts/volta.accordion.js +307 -0
  59. data/lib/nexmo/oas/renderer/public/assets/javascripts/volta.core.js +230 -0
  60. data/lib/nexmo/oas/renderer/public/assets/javascripts/volta.modal.js +300 -0
  61. data/lib/nexmo/oas/renderer/public/assets/javascripts/volta.tabs.js +143 -0
  62. data/lib/nexmo/oas/renderer/public/assets/javascripts/volta.tooltip.js +76 -0
  63. data/lib/nexmo/oas/renderer/public/assets/stylesheets/nexmo-oas-renderer.css +287 -0
  64. data/lib/nexmo/oas/renderer/public/assets/stylesheets/nexmo-oas-renderer.css.map +7 -0
  65. data/lib/nexmo/oas/renderer/public/assets/stylesheets/sass/api.scss +341 -0
  66. data/lib/nexmo/oas/renderer/public/assets/stylesheets/sass/mediaqueries.scss +48 -0
  67. data/lib/nexmo/oas/renderer/public/assets/stylesheets/sass/style.scss +6 -0
  68. data/lib/nexmo/oas/renderer/public/assets/stylesheets/sass/themes/dark.scss +89 -0
  69. data/lib/nexmo/oas/renderer/public/assets/stylesheets/sass/themes/light.scss +68 -0
  70. data/lib/nexmo/oas/renderer/public/assets/stylesheets/sass/variables.scss +91 -0
  71. data/lib/nexmo/oas/renderer/public/assets/stylesheets/volta-prism.min.css +1 -0
  72. data/lib/nexmo/oas/renderer/public/assets/stylesheets/volta.min.css +1 -0
  73. data/lib/nexmo/oas/renderer/public/assets/symbol/volta-icons.svg +1 -0
  74. data/lib/nexmo/oas/renderer/public/favicon.ico +0 -0
  75. data/lib/nexmo/oas/renderer/public/fonts/Spezia-Regular.eot +0 -0
  76. data/lib/nexmo/oas/renderer/public/fonts/Spezia-Regular.ttf +0 -0
  77. data/lib/nexmo/oas/renderer/public/fonts/Spezia-Regular.woff +0 -0
  78. data/lib/nexmo/oas/renderer/public/fonts/Spezia-Regular.woff2 +0 -0
  79. data/lib/nexmo/oas/renderer/public/fonts/Spezia-SemiBold.eot +0 -0
  80. data/lib/nexmo/oas/renderer/public/fonts/Spezia-SemiBold.ttf +0 -0
  81. data/lib/nexmo/oas/renderer/public/fonts/Spezia-SemiBold.woff +0 -0
  82. data/lib/nexmo/oas/renderer/public/fonts/Spezia-SemiBold.woff2 +0 -0
  83. data/lib/nexmo/oas/renderer/public/fonts/Spezia-SemiMonoSemiBold.eot +0 -0
  84. data/lib/nexmo/oas/renderer/public/fonts/Spezia-SemiMonoSemiBold.ttf +0 -0
  85. data/lib/nexmo/oas/renderer/public/fonts/Spezia-SemiMonoSemiBold.woff +0 -0
  86. data/lib/nexmo/oas/renderer/public/fonts/Spezia-SemiMonoSemiBold.woff2 +0 -0
  87. data/lib/nexmo/oas/renderer/public/fonts/Spezia-WideMedium.eot +0 -0
  88. data/lib/nexmo/oas/renderer/public/fonts/Spezia-WideMedium.ttf +0 -0
  89. data/lib/nexmo/oas/renderer/public/fonts/Spezia-WideMedium.woff +0 -0
  90. data/lib/nexmo/oas/renderer/public/fonts/Spezia-WideMedium.woff2 +0 -0
  91. data/lib/nexmo/oas/renderer/services/oas_parser.rb +23 -0
  92. data/lib/nexmo/oas/renderer/services/open_api_definition_resolver.rb +35 -0
  93. data/lib/nexmo/oas/renderer/version.rb +9 -0
  94. data/lib/nexmo/oas/renderer/views/api/index.erb +19 -0
  95. data/lib/nexmo/oas/renderer/views/api/show.erb +1 -0
  96. data/lib/nexmo/oas/renderer/views/concepts/list/plain.html.erb +5 -0
  97. data/lib/nexmo/oas/renderer/views/layouts/_head.erb +6 -0
  98. data/lib/nexmo/oas/renderer/views/layouts/_javascripts.erb +14 -0
  99. data/lib/nexmo/oas/renderer/views/layouts/api.erb +23 -0
  100. data/lib/nexmo/oas/renderer/views/layouts/open_api.erb +12 -0
  101. data/lib/nexmo/oas/renderer/views/open_api/_auth.erb +74 -0
  102. data/lib/nexmo/oas/renderer/views/open_api/_available_endpoints.erb +25 -0
  103. data/lib/nexmo/oas/renderer/views/open_api/_callback.erb +5 -0
  104. data/lib/nexmo/oas/renderer/views/open_api/_callback_endpoint.erb +38 -0
  105. data/lib/nexmo/oas/renderer/views/open_api/_callbacks.erb +5 -0
  106. data/lib/nexmo/oas/renderer/views/open_api/_code_examples.erb +16 -0
  107. data/lib/nexmo/oas/renderer/views/open_api/_endpoint.erb +54 -0
  108. data/lib/nexmo/oas/renderer/views/open_api/_header.erb +71 -0
  109. data/lib/nexmo/oas/renderer/views/open_api/_model.erb +43 -0
  110. data/lib/nexmo/oas/renderer/views/open_api/_navigation.erb +68 -0
  111. data/lib/nexmo/oas/renderer/views/open_api/_parameter_groups.erb +56 -0
  112. data/lib/nexmo/oas/renderer/views/open_api/_parameters.erb +115 -0
  113. data/lib/nexmo/oas/renderer/views/open_api/_request_json.erb +4 -0
  114. data/lib/nexmo/oas/renderer/views/open_api/_request_one_of.erb +70 -0
  115. data/lib/nexmo/oas/renderer/views/open_api/_request_single.erb +53 -0
  116. data/lib/nexmo/oas/renderer/views/open_api/_requests.erb +22 -0
  117. data/lib/nexmo/oas/renderer/views/open_api/_response_description_parameters.erb +130 -0
  118. data/lib/nexmo/oas/renderer/views/open_api/_response_descriptions.erb +45 -0
  119. data/lib/nexmo/oas/renderer/views/open_api/_response_fields.erb +3 -0
  120. data/lib/nexmo/oas/renderer/views/open_api/_response_tabs.erb +18 -0
  121. data/lib/nexmo/oas/renderer/views/open_api/_responses.erb +51 -0
  122. data/lib/nexmo/oas/renderer/views/open_api/_tabbed_parameters.erb +64 -0
  123. data/lib/nexmo/oas/renderer/views/open_api/_tabbed_single_parameter.erb +56 -0
  124. data/lib/nexmo/oas/renderer/views/open_api/_webhooks.erb +30 -0
  125. data/lib/nexmo/oas/renderer/views/open_api/show.erb +26 -0
  126. data/lib/nexmo/oas/renderer/views/static/404.erb +6 -0
  127. data/nexmo-oas-renderer.gemspec +51 -0
  128. metadata +397 -0
@@ -0,0 +1,5 @@
1
+ <ul class="Vlt-list Vlt-list--simple">
2
+ <% @concepts.each do |concept| %>
3
+ <li><a href="<%= concept.url %>"><%= concept.title %></a><% if concept.description %>: <%= concept.description.render_markdown.gsub(%r{^<p>},'').gsub(%r{^</p>}, '').strip %><% end %></li>
4
+ <% end %>
5
+ </ul>
@@ -0,0 +1,6 @@
1
+ <head>
2
+ <meta name="viewport" content="width=device-width, initial-scale=1">
3
+ <link rel="stylesheet" href="/assets/stylesheets/volta.min.css"/>
4
+ <link rel="stylesheet" href="/assets/stylesheets/volta-prism.min.css"/>
5
+ <link rel="stylesheet" href="/assets/stylesheets/nexmo-oas-renderer.css"/>
6
+ </head>
@@ -0,0 +1,14 @@
1
+ <script src="/assets/javascripts/prism.js"></script>
2
+ <script src="/assets/javascripts/popper.min.js"></script>
3
+ <script src="/assets/javascripts/tooltip.min.js"></script>
4
+ <script src="/assets/javascripts/volta.core.js"></script>
5
+ <script src="/assets/javascripts/volta.accordion.js"></script>
6
+ <script src="/assets/javascripts/volta.tabs.js"></script>
7
+ <script src="/assets/javascripts/volta.modal.js"></script>
8
+ <script src="/assets/javascripts/volta.tooltip.js"></script>
9
+ <script src="/assets/javascripts/nexmo-oas-renderer.js?a=1"></script>
10
+ <script src="/assets/javascripts/components/format.js"></script>
11
+ <script type="text/javascript">
12
+ Volta.init(["accordion", "tab", "modal", "tooltip"]);
13
+ new Format
14
+ </script>
@@ -0,0 +1,23 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <%= erb :'layouts/_head' %>
4
+
5
+ <body class="Nxd-template">
6
+ <nav class="Vlt-sidenav" id="Vlt-sidenav">
7
+ <div class="Vlt-sidenav__scroll">
8
+ <% begin %>
9
+ <%= erb :"layouts/#{@specification.side_navigation}" %>
10
+ <% rescue Errno::ENOENT %>
11
+ <%= @navigation.navigation_from_content %>
12
+ <% end %>
13
+ </div>
14
+ </nav>
15
+ <main class="Vlt-main Vlt-main--light Nxd-main" tabindex="2">
16
+ <div class="Vlt-card" id="primary-content">
17
+ <%= yield %>
18
+ </div>
19
+ </main>
20
+
21
+ <%= erb :"layouts/_javascripts" %>
22
+ </body>
23
+ </html>
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <%= erb :"layouts/_head" %>
4
+
5
+ <body class="Nxd-template">
6
+
7
+ <main>
8
+ <%= yield %>
9
+ </main>
10
+ <%= erb :"layouts/_javascripts" %>
11
+ </body>
12
+ </html>
@@ -0,0 +1,74 @@
1
+ <% if endpoint.jwt? || endpoint.basic_auth? || endpoint.oauth? %>
2
+ <h4>Authentication</h4>
3
+
4
+ <% if endpoint.jwt? && endpoint.basic_auth? %>
5
+ <p>This API supports both JWT and Basic authentication. Basic authentication is easier to get started with, but does not support advanced features such as ACLs.</p>
6
+
7
+ <p>You can use <em>either</em> JWT or Basic authentication, but not both at the same time.</p>
8
+ <% end %>
9
+
10
+ <div class="Vlt-table Vlt-table--bordered">
11
+ <table>
12
+ <thead>
13
+ <tr>
14
+ <th>Key</th>
15
+ <th>Description</th>
16
+ <th>Example</th>
17
+ <th>Default</th>
18
+ </tr>
19
+ </thead>
20
+ <tbody>
21
+
22
+ <% if endpoint.oauth? %>
23
+ <tr>
24
+ <td>
25
+ <b>Authorization</b>
26
+ </td>
27
+ <td>
28
+ <b>Your OAuth token.</b><br>
29
+ <small><a href="/vonage-business-cloud/vbc-apis/getting-started/authentication">Read more about OAuth tokens</a></small>
30
+ </td>
31
+ <td><code>Bearer &lt;access_token&gt;</code></td>
32
+ <td>
33
+ <em>None</em>
34
+ </td>
35
+ </tr>
36
+ <% end %>
37
+
38
+ <% if endpoint.jwt? %>
39
+ <tr>
40
+ <td>
41
+ <b>Authorization</b>
42
+ </td>
43
+ <td>
44
+ <b>Your JSON web token.</b><br>
45
+ <small><a href="/concepts/guides/authentication#json-web-tokens-jwt">Read more about JWTs</a></small>
46
+ </td>
47
+ <td><code>Bearer &lt;JWT&gt;</code></td>
48
+ <td>
49
+ <em>None</em>
50
+ </td>
51
+ </tr>
52
+ <% end %>
53
+
54
+ <% if endpoint.basic_auth? %>
55
+ <tr>
56
+ <td>
57
+ <b>Authorization</b>
58
+ </td>
59
+ <td>
60
+ <b>Base64 encoded API key and secret joined by a colon.</b><br>
61
+ <small><a href="/concepts/guides/authentication#header-based-api-key-and-secret-authentication">Read more</a></small>
62
+ </td>
63
+ <td><code>Basic &lt;base64&gt;</code></td>
64
+ <td>
65
+ <i>None</i>
66
+ </td>
67
+ </tr>
68
+ <% end %>
69
+
70
+ </tbody>
71
+ </table>
72
+ </div>
73
+ <% end %>
74
+
@@ -0,0 +1,25 @@
1
+ <h5>Available Operations:</h5>
2
+ <ul>
3
+ <% endpoints.each do |endpoint| %>
4
+ <li>
5
+ <span style="width: 58px; text-align:center; margin-right:4px;" class="Vlt-badge Vlt-badge--margin-left Nxd-method-badge Nxd-method-badge--<%= endpoint.method %> Vlt-badge--small"><%= endpoint.method %></span>
6
+ <a href="#<%= endpoint.operationId %>"><%= normalize_summary_title(endpoint.summary, endpoint.operationId) %></a>
7
+ </li>
8
+
9
+ <% if endpoint.callbacks.any? %>
10
+ <% endpoint.callbacks.each do |callback| %>
11
+ <% callback.paths.each do |path| %>
12
+ <% path.endpoints.each do |endpoint| %>
13
+ <li style="margin-top: 8px;">
14
+ <span style="margin-left:24px; margin-right: 4px;">
15
+ <svg style="width: 12px; height:12px;" class="Vlt-black"><use xlink:href="/assets/symbol/volta-icons.svg#Vlt-icon-toggle" /></svg>
16
+ </span>
17
+ <a href="#<%= endpoint.operationId %>"><%= normalize_summary_title(endpoint.summary, endpoint.operationId) %></a>
18
+ </li>
19
+ <% end %>
20
+ <% end %>
21
+ <% end %>
22
+ <% end %>
23
+ <% end %>
24
+ </ul>
25
+ <br />
@@ -0,0 +1,5 @@
1
+ <% callback.paths.each do |path| %>
2
+ <% path.endpoints.each do |endpoint| %>
3
+ <%= erb :'open_api/_callback_endpoint', locals: { endpoint: endpoint, webhook: webhook } %>
4
+ <% end %>
5
+ <% end %>
@@ -0,0 +1,38 @@
1
+ <div class="Vlt-grid">
2
+ <div class="Vlt-col oas-left-panel" style="padding-bottom: 36px;">
3
+ <h3 id="<%= endpoint.operationId %>" class="Vlt-title--icon">
4
+ <%= endpoint.summary %>
5
+ <% if webhook %>
6
+ <span class="Vlt-badge Vlt-badge--orange">
7
+ <i class="icon icon-webhook"></i> Webhook
8
+ </span>
9
+ <% else %>
10
+ <span class="Vlt-badge Vlt-badge--green">
11
+ <i class="icon icon-callback"></i> Callback
12
+ </span>
13
+ <% end %>
14
+ </h3>
15
+ <% if endpoint.description %>
16
+ <p><%= endpoint.description.render_markdown %></p>
17
+ <% end %>
18
+
19
+ <div class="Vlt-badge-combined">
20
+ <code class="Vlt-badge Vlt-badge--large Nxd-method-badge Nxd-method-badge--<%= endpoint.method %>"><%= endpoint.method.upcase %></code>
21
+ <code class="Vlt-badge Vlt-badge--large Vlt-bg-grey-lighter Vlt-black">
22
+ <span class="api-path-host">https://example.com</span><%= (endpoint.raw['x-example-path'] || '/webhooks/event').gsub(/\{(.+?)\}/, '<span class="api-path-parameter">:\1</span>') %>
23
+ </code>
24
+ </div>
25
+
26
+ <%= erb :'open_api/_parameter_groups', locals: { endpoint: endpoint, callback: true } %>
27
+ </div>
28
+
29
+ <div class="Vlt-col oas-right-panel">
30
+
31
+ <% endpoint.request_body.formats.each_with_index do |format, index| %>
32
+ <div class="js-format" data-format="<%= format %>">
33
+ <%= erb :'open_api/_requests', locals: { endpoint: endpoint, title: "Example Payload" } %>
34
+ </div>
35
+ <% end %>
36
+ </div>
37
+ </div>
38
+
@@ -0,0 +1,5 @@
1
+ <% if endpoint.callbacks.size.positive? %>
2
+ <% endpoint.callbacks.each do |callback| %>
3
+ <%= erb :'open_api/_callback', locals: { callback: callback, webhook: false } %>
4
+ <% end %>
5
+ <% end %>
@@ -0,0 +1,16 @@
1
+ <%
2
+ # @todo Re-enable code examples once we decide how to handle them in OAS
3
+ false && if endpoint.raw['x-code-example-path']
4
+ %>
5
+ <h5>Example request</h5>
6
+ <%=
7
+ markdown = <<~HEREDOC
8
+ ```tabbed_examples
9
+ config: #{endpoint.raw['x-code-example-path']}
10
+ ```
11
+ HEREDOC
12
+
13
+ markdown.render_markdown
14
+ %>
15
+ <% end %>
16
+
@@ -0,0 +1,54 @@
1
+ <div class="Vlt-grid">
2
+ <div class="Vlt-col oas-left-panel" style="padding-bottom: 36px;">
3
+
4
+ <h3 id='<%= endpoint.operationId %>'><%= endpoint.summary %></h3>
5
+ <% if endpoint.description %>
6
+ <p><%= endpoint.description.render_markdown %></p>
7
+ <% end %>
8
+
9
+ <% servers = endpoint.path.servers ? endpoint.path.servers : endpoint.definition.servers %>
10
+ <% raise "`servers` parameter not provided at either the path level or document root" unless servers.size.positive? %>
11
+
12
+ <%
13
+ path = endpoint.path.path.gsub(/\{(.+?)\}/, ':\1').chomp("/")
14
+ uri = URI("#{servers[0]['url']}#{path}")
15
+ %>
16
+ <div class="oas-path-full Vlt-badge-combined">
17
+ <code class="Vlt-badge Vlt-badge--large Nxd-method-badge Nxd-method-badge--<%= endpoint.method %>"><%= endpoint.method.upcase %></code>
18
+ <code class="Vlt-badge Vlt-badge--large Vlt-bg-grey-lighter Vlt-black">
19
+ <span><%= uri.scheme %>://<%= uri.host %></span><%= uri.path.gsub(/:([^\/]+)/, '<span class="api-path-parameter">:\1</span>') %>
20
+ </code>
21
+ </div>
22
+
23
+ <div class="oas-path-small Vlt-badge-combined" style="margin-bottom: 8px;">
24
+ <code class="Vlt-badge Vlt-badge--large">Host</code>
25
+ <code class="Vlt-badge Vlt-badge--large Vlt-bg-grey-lighter Vlt-black">
26
+ <%= uri.scheme %>://<%= uri.host %>
27
+ </code>
28
+ </div>
29
+
30
+ <div class="oas-path-small Vlt-badge-combined">
31
+ <code class="Vlt-badge Vlt-badge--large Nxd-method-badge Nxd-method-badge--<%= endpoint.method %>"><%= endpoint.method.upcase %></code>
32
+ <code class="Vlt-badge Vlt-badge--large Vlt-bg-grey-lighter Vlt-black">
33
+ <%= uri.path.gsub(/:([^\/]+)/, '<span class="api-path-parameter">:\1</span>') %>
34
+ </code>
35
+ </div>
36
+
37
+ <%= erb :'open_api/_auth', locals: { endpoint: endpoint } %>
38
+
39
+ <%= erb :'open_api/_parameter_groups', locals: { endpoint: endpoint } %>
40
+
41
+ <%= erb :'open_api/_response_descriptions', locals: { endpoint: endpoint, auto_expand_responses: @auto_expand_responses } %>
42
+
43
+ </div>
44
+
45
+ <div class="Vlt-col oas-right-panel">
46
+
47
+ <%= erb :'open_api/_requests', locals: { endpoint: endpoint } %>
48
+
49
+ <%= erb :'open_api/_responses', locals: { endpoint: endpoint } %>
50
+
51
+
52
+
53
+ </div>
54
+ </div>
@@ -0,0 +1,71 @@
1
+ <div class="Vlt-grid">
2
+ <div class="Vlt-col oas-left-panel header-row" style="padding-top:20px;">
3
+ <a href="<%= @theme_link %>" class="Vlt-switch Vlt-switch--secondary" style="float:right;">
4
+ <span class="Vlt-switch__slider"></span>
5
+ </a>
6
+
7
+
8
+ <div class="Nxd-api__title">
9
+ <h1>
10
+ <%= definition.info['title'] %>
11
+ </h1>
12
+ <% if definition.info['x-label'] %>
13
+ <div>
14
+ <span class="Vlt-badge Vlt-badge--<%= definition.info['x-label'].parameterize %>">
15
+ <%= definition.info['x-label'] %>
16
+ </span>
17
+ </div>
18
+ <% end %>
19
+ </div>
20
+
21
+ <% if definition.info['description'] %>
22
+ <p><%= definition.info['description'].render_markdown %></p>
23
+ <% end %>
24
+
25
+ <div class="Vlt-grid">
26
+ <div class="Vlt-col">
27
+ <a href=<%= url("#{request.path}.#{definition.format}") %> class='Vlt-btn Vlt-btn--secondary Vlt-btn--app'>
28
+ <svg><use xlink:href="/assets/symbol/volta-icons.svg#Vlt-icon-download" /></svg>
29
+ Download OAS 3 Definition
30
+ </a>
31
+ </div>
32
+ <div class="Vlt-col Vlt-right Vlt-right-sm">
33
+ <a href="<%= Nexmo::OAS::Renderer::API.github_path %>/<%= @specification.definition_name %>.yml" class='Vlt-btn Vlt-btn--tertiary Vlt-btn--app Vlt-right Vlt-bg-grey-lighter'>
34
+ <svg className="Vlt-icon Vlt-black">
35
+ <use xlink:href="/assets/symbol/volta-icons.svg#Vlt-icon-github" />
36
+ </svg>
37
+ Improve this specification
38
+ </a>
39
+ </div>
40
+ </div>
41
+
42
+ <%
43
+ # If there's only one group, everything is untagged
44
+ if @specification.groups.size === 1
45
+ %>
46
+ <%= erb :'open_api/_available_endpoints', locals: { endpoints: definition.endpoints } %>
47
+ <% end %>
48
+
49
+ </div>
50
+
51
+ <%
52
+ has_switcher = @specification.available_versions && @specification.available_versions.count > 1
53
+ %>
54
+
55
+ <div class="oas-right-panel Vlt-col <%= has_switcher ? '' : 'sm-hidden' %>">
56
+
57
+ <% if has_switcher %>
58
+ <div class="Vlt-callout Vlt-callout--shoutout Nxd-version">
59
+ <i></i>
60
+ <div class="Vlt-callout__content">
61
+ <h4>There are multiple versions of this API available</h4>
62
+ <p>
63
+ <% @specification.available_versions.each do |v| %>
64
+ <a href="/api/<%= v['name'] %>" <%= v['version'] == @specification.current_version ? 'class=active':'' %>>Version <%= v['version'] %></a> <%= '|' unless v == @specification.available_versions.last %>
65
+ <% end %>
66
+ </p>
67
+ </div>
68
+ </div>
69
+ <% end %>
70
+ </div>
71
+ </div>
@@ -0,0 +1,43 @@
1
+ <div class="Vlt-grid">
2
+ <div class="Vlt-col oas-left-panel">
3
+
4
+ <h2 id="<%= group['name'].parameterize %>" class='Vlt-grey-dark group-header'><%= group['name'] %></h2>
5
+ <p class="Vlt-grey-darker"><%= group['description']&.render_markdown %></p>
6
+
7
+
8
+ <%= erb :'open_api/_available_endpoints', locals: { endpoints: endpoints } %>
9
+
10
+ <% if group['schema'] %>
11
+ <% group['schema'].each do |format, schema| %>
12
+ <div class="js-format" data-format="<%= format %>">
13
+ <%
14
+ if schema['properties']
15
+ properties = schema['properties']
16
+ elsif schema['allOf']
17
+ properties = schema['allOf'].map { |o| o['properties'] }.reduce(&:merge)
18
+ end
19
+
20
+ properties = properties.map do |name, definition|
21
+ OasParser::Property.new(self, schema, name, definition)
22
+ end
23
+ %>
24
+
25
+ <%= erb :'open_api/_parameters', locals: { parameters: properties, model: true, format: format } %>
26
+ </div>
27
+ <% end %>
28
+ <% end %>
29
+ </div>
30
+
31
+ <div class="Vlt-col oas-right-panel <%= !group['schema'] ? 'sm-hidden' : '' %>">
32
+
33
+ <% if group['schema'] %>
34
+ <% group['schema'].each do |format, schema| %>
35
+ <div class="js-format" data-format="<%= format %>">
36
+ <h5>Example Model</h5>
37
+ <%= ResponseParserDecorator.new(schema).html(format, xml_options: schema['xml']) %>
38
+ </div>
39
+ <% end %>
40
+ <% end %>
41
+
42
+ </div>
43
+ </div>
@@ -0,0 +1,68 @@
1
+ <header class="oas-navbar oas-navbar-full">
2
+ <% if @specification.groups.size == 1 %>
3
+ <a href="#top" class="Vlt-btn Vlt-btn--tertiary group-link">Available Operations</a>
4
+ <% end %>
5
+
6
+
7
+ <% @specification.groups.each do |name, endpoints| %>
8
+ <% next unless name %>
9
+ <a href="#<%= name.parameterize %>" class="Vlt-btn Vlt-btn--tertiary group-link"><%= name %></a>
10
+ <% end %>
11
+
12
+ <% if @specification.definition.raw['x-webhooks'] || definition.webhooks.size.positive? %>
13
+ <a href="#webhooks" class="Vlt-btn Vlt-btn--tertiary group-link">Webhooks</a>
14
+ <% end %>
15
+
16
+
17
+ <% if @specification.formats.size > 1 %>
18
+ <div class="Vlt-native-dropdown">
19
+ <select class="js-format-selector">
20
+ <% @specification.formats.each do |value, name| %>
21
+ <option value="<%= value %>"><%= name %> Responses</option>
22
+ <% end %>
23
+ </select>
24
+ </div>
25
+ <% end %>
26
+ </header>
27
+
28
+ <header class="oas-navbar oas-navbar-small">
29
+ <div id="oas-nav-accordion" style="width: 100%;">
30
+ <span role="link" class="oas-trigger">
31
+ <% if @specification.formats.size > 1 %>
32
+ <div class="Vlt-native-dropdown">
33
+ <select class="js-format-selector">
34
+ <% @specification.formats.each do |value, name| %>
35
+ <option value="<%= value %>"><%= name %> Responses</option>
36
+ <% end %>
37
+ </select>
38
+ </div>
39
+ <% end %>
40
+ </span>
41
+
42
+ <div class="oas-trigger-content">
43
+ <% if @specification.groups.size == 1 %>
44
+ <a href="#top" class="Vlt-btn Vlt-btn--tertiary group-link">Available Operations</a>
45
+ <% end %>
46
+
47
+ <br />
48
+ <br />
49
+
50
+ <% has_webhooks = @specification.definition.raw['x-webhooks'] || definition.webhooks.size.positive? %>
51
+ <% if @specification.groups.size > 1 || has_webhooks %>
52
+ <h4>Endpoints</h4>
53
+
54
+ <% @specification.groups.each do |name, endpoints| %>
55
+ <% next unless name %>
56
+ <a href="#<%= name.parameterize %>" class="Vlt-btn Vlt-btn--tertiary group-link"><%= name %></a>
57
+ <% end %>
58
+ <% end %>
59
+
60
+ <% if has_webhooks %>
61
+ <a href="#webhooks" class="Vlt-btn Vlt-btn--tertiary group-link">Webhooks</a>
62
+ <% end %>
63
+
64
+ </div>
65
+ </div>
66
+ </header>
67
+
68
+ <span id="top"></span>