nexmo-oas-renderer 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (158) hide show
  1. checksums.yaml +7 -0
  2. data/.env.example +1 -0
  3. data/.gitignore +5 -0
  4. data/CHANGELOG.md +2 -0
  5. data/CONTRIBUTING.md +46 -0
  6. data/Gemfile +4 -0
  7. data/Gemfile.lock +183 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +73 -0
  10. data/Rakefile +2 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/exe/nexmo-oas-renderer +5 -0
  14. data/lib/nexmo/oas/engine.rb +9 -0
  15. data/lib/nexmo/oas/renderer.rb +13 -0
  16. data/lib/nexmo/oas/renderer/app.rb +116 -0
  17. data/lib/nexmo/oas/renderer/config.ru +7 -0
  18. data/lib/nexmo/oas/renderer/config/code_languages.yml +138 -0
  19. data/lib/nexmo/oas/renderer/config/dynamic_content.yml +1 -0
  20. data/lib/nexmo/oas/renderer/config/redirects.yml +8 -0
  21. data/lib/nexmo/oas/renderer/constraints/open_api.rb +76 -0
  22. data/lib/nexmo/oas/renderer/constraints/redirector.rb +17 -0
  23. data/lib/nexmo/oas/renderer/decorators/response_parser_decorator.rb +55 -0
  24. data/lib/nexmo/oas/renderer/filters/anchor.rb +17 -0
  25. data/lib/nexmo/oas/renderer/filters/audio.rb +21 -0
  26. data/lib/nexmo/oas/renderer/filters/block_escape.rb +24 -0
  27. data/lib/nexmo/oas/renderer/filters/break.rb +13 -0
  28. data/lib/nexmo/oas/renderer/filters/code.rb +64 -0
  29. data/lib/nexmo/oas/renderer/filters/code_snippet.rb +194 -0
  30. data/lib/nexmo/oas/renderer/filters/code_snippet_list.rb +33 -0
  31. data/lib/nexmo/oas/renderer/filters/code_snippets.rb +158 -0
  32. data/lib/nexmo/oas/renderer/filters/collapsible.rb +27 -0
  33. data/lib/nexmo/oas/renderer/filters/columns.rb +50 -0
  34. data/lib/nexmo/oas/renderer/filters/concept_list.rb +33 -0
  35. data/lib/nexmo/oas/renderer/filters/dynamic_content.rb +30 -0
  36. data/lib/nexmo/oas/renderer/filters/external_link.rb +32 -0
  37. data/lib/nexmo/oas/renderer/filters/frontmatter.rb +14 -0
  38. data/lib/nexmo/oas/renderer/filters/heading.rb +61 -0
  39. data/lib/nexmo/oas/renderer/filters/icon.rb +22 -0
  40. data/lib/nexmo/oas/renderer/filters/indent.rb +20 -0
  41. data/lib/nexmo/oas/renderer/filters/inline_escape.rb +17 -0
  42. data/lib/nexmo/oas/renderer/filters/js_sequence_diagram.rb +21 -0
  43. data/lib/nexmo/oas/renderer/filters/label.rb +32 -0
  44. data/lib/nexmo/oas/renderer/filters/language.rb +15 -0
  45. data/lib/nexmo/oas/renderer/filters/markdown.rb +85 -0
  46. data/lib/nexmo/oas/renderer/filters/modal.rb +41 -0
  47. data/lib/nexmo/oas/renderer/filters/partial.rb +28 -0
  48. data/lib/nexmo/oas/renderer/filters/php_inliner.rb +15 -0
  49. data/lib/nexmo/oas/renderer/filters/screenshot.rb +26 -0
  50. data/lib/nexmo/oas/renderer/filters/tab.rb +250 -0
  51. data/lib/nexmo/oas/renderer/filters/techio.rb +24 -0
  52. data/lib/nexmo/oas/renderer/filters/tooltip.rb +22 -0
  53. data/lib/nexmo/oas/renderer/filters/tutorial_link.rb +27 -0
  54. data/lib/nexmo/oas/renderer/filters/tutorials.rb +28 -0
  55. data/lib/nexmo/oas/renderer/filters/unfreeze.rb +20 -0
  56. data/lib/nexmo/oas/renderer/filters/user_personalization.rb +43 -0
  57. data/lib/nexmo/oas/renderer/helpers/navigation.rb +66 -0
  58. data/lib/nexmo/oas/renderer/helpers/render.rb +24 -0
  59. data/lib/nexmo/oas/renderer/helpers/summary.rb +30 -0
  60. data/lib/nexmo/oas/renderer/helpers/url.rb +17 -0
  61. data/lib/nexmo/oas/renderer/lib/core_ext/string.rb +14 -0
  62. data/lib/nexmo/oas/renderer/lib/redcarpet.rb +14 -0
  63. data/lib/nexmo/oas/renderer/models/code_snippet.rb +75 -0
  64. data/lib/nexmo/oas/renderer/models/tutorial.rb +83 -0
  65. data/lib/nexmo/oas/renderer/pipelines/markdown_pipeline.rb +52 -0
  66. data/lib/nexmo/oas/renderer/presenters/api_specification.rb +42 -0
  67. data/lib/nexmo/oas/renderer/presenters/groups.rb +35 -0
  68. data/lib/nexmo/oas/renderer/presenters/navigation.rb +24 -0
  69. data/lib/nexmo/oas/renderer/presenters/open_api_specification.rb +68 -0
  70. data/lib/nexmo/oas/renderer/presenters/versions.rb +40 -0
  71. data/lib/nexmo/oas/renderer/public/assets/fonts/Lato-Black.woff +0 -0
  72. data/lib/nexmo/oas/renderer/public/assets/fonts/Lato-Black.woff2 +0 -0
  73. data/lib/nexmo/oas/renderer/public/assets/fonts/Lato-Heavy.woff +0 -0
  74. data/lib/nexmo/oas/renderer/public/assets/fonts/Lato-Heavy.woff2 +0 -0
  75. data/lib/nexmo/oas/renderer/public/assets/fonts/Lato-Regular.woff +0 -0
  76. data/lib/nexmo/oas/renderer/public/assets/fonts/Lato-Regular.woff2 +0 -0
  77. data/lib/nexmo/oas/renderer/public/assets/fonts/Lato-Semibold.woff +0 -0
  78. data/lib/nexmo/oas/renderer/public/assets/fonts/Lato-Semibold.woff2 +0 -0
  79. data/lib/nexmo/oas/renderer/public/assets/images/brands/android.svg +1 -0
  80. data/lib/nexmo/oas/renderer/public/assets/images/brands/curl.svg +1 -0
  81. data/lib/nexmo/oas/renderer/public/assets/images/brands/dotnet.svg +1 -0
  82. data/lib/nexmo/oas/renderer/public/assets/images/brands/ios.svg +1 -0
  83. data/lib/nexmo/oas/renderer/public/assets/images/brands/java.svg +1 -0
  84. data/lib/nexmo/oas/renderer/public/assets/images/brands/javascript.svg +1 -0
  85. data/lib/nexmo/oas/renderer/public/assets/images/brands/node.svg +1 -0
  86. data/lib/nexmo/oas/renderer/public/assets/images/brands/php.svg +1 -0
  87. data/lib/nexmo/oas/renderer/public/assets/images/brands/python.svg +11 -0
  88. data/lib/nexmo/oas/renderer/public/assets/images/brands/ruby.svg +1 -0
  89. data/lib/nexmo/oas/renderer/public/assets/images/lost.svg +37 -0
  90. data/lib/nexmo/oas/renderer/public/assets/javascripts/components/format.js +42 -0
  91. data/lib/nexmo/oas/renderer/public/assets/javascripts/volta.accordion.js +249 -0
  92. data/lib/nexmo/oas/renderer/public/assets/javascripts/volta.core.js +230 -0
  93. data/lib/nexmo/oas/renderer/public/assets/javascripts/volta.modal.js +300 -0
  94. data/lib/nexmo/oas/renderer/public/assets/javascripts/volta.tabs.js +139 -0
  95. data/lib/nexmo/oas/renderer/public/assets/stylesheets/api.css +95 -0
  96. data/lib/nexmo/oas/renderer/public/assets/stylesheets/buttons.css +80 -0
  97. data/lib/nexmo/oas/renderer/public/assets/stylesheets/core.css +79 -0
  98. data/lib/nexmo/oas/renderer/public/assets/stylesheets/mediaqueries.css +2 -0
  99. data/lib/nexmo/oas/renderer/public/assets/stylesheets/mediaqueries.css.map +7 -0
  100. data/lib/nexmo/oas/renderer/public/assets/stylesheets/navigation.css +79 -0
  101. data/lib/nexmo/oas/renderer/public/assets/stylesheets/nexmo.css +68 -0
  102. data/lib/nexmo/oas/renderer/public/assets/stylesheets/sass/api.scss +147 -0
  103. data/lib/nexmo/oas/renderer/public/assets/stylesheets/sass/core.scss +133 -0
  104. data/lib/nexmo/oas/renderer/public/assets/stylesheets/sass/mediaqueries.scss +48 -0
  105. data/lib/nexmo/oas/renderer/public/assets/stylesheets/sass/navigation.scss +106 -0
  106. data/lib/nexmo/oas/renderer/public/assets/stylesheets/sass/nexmo.scss +61 -0
  107. data/lib/nexmo/oas/renderer/public/assets/stylesheets/sass/style.scss +10 -0
  108. data/lib/nexmo/oas/renderer/public/assets/stylesheets/sass/syntax.scss +63 -0
  109. data/lib/nexmo/oas/renderer/public/assets/stylesheets/sass/typography.scss +248 -0
  110. data/lib/nexmo/oas/renderer/public/assets/stylesheets/sass/variables.scss +91 -0
  111. data/lib/nexmo/oas/renderer/public/assets/stylesheets/sass/volta-templates.scss +119 -0
  112. data/lib/nexmo/oas/renderer/public/assets/stylesheets/style.css +2 -0
  113. data/lib/nexmo/oas/renderer/public/assets/stylesheets/style.css.map +7 -0
  114. data/lib/nexmo/oas/renderer/public/assets/stylesheets/syntax.css +79 -0
  115. data/lib/nexmo/oas/renderer/public/assets/stylesheets/typography.css +86 -0
  116. data/lib/nexmo/oas/renderer/public/assets/stylesheets/variables.css +2 -0
  117. data/lib/nexmo/oas/renderer/public/assets/stylesheets/variables.css.map +7 -0
  118. data/lib/nexmo/oas/renderer/public/assets/stylesheets/volta-templates.css +2 -0
  119. data/lib/nexmo/oas/renderer/public/assets/stylesheets/volta-templates.css.map +7 -0
  120. data/lib/nexmo/oas/renderer/public/assets/stylesheets/volta.min.css +1 -0
  121. data/lib/nexmo/oas/renderer/public/assets/symbol/volta-icons.svg +1 -0
  122. data/lib/nexmo/oas/renderer/public/favicon.ico +0 -0
  123. data/lib/nexmo/oas/renderer/services/code_language_api.rb +98 -0
  124. data/lib/nexmo/oas/renderer/services/oas_parser.rb +21 -0
  125. data/lib/nexmo/oas/renderer/services/open_api_definition_resolver.rb +33 -0
  126. data/lib/nexmo/oas/renderer/version.rb +7 -0
  127. data/lib/nexmo/oas/renderer/views/api/show.erb +1 -0
  128. data/lib/nexmo/oas/renderer/views/code_snippets/_application_messages_dispatch.html.erb +9 -0
  129. data/lib/nexmo/oas/renderer/views/code_snippets/_application_rtc.html.erb +41 -0
  130. data/lib/nexmo/oas/renderer/views/code_snippets/_application_voice.html.erb +24 -0
  131. data/lib/nexmo/oas/renderer/views/code_snippets/_code_only.html.erb +6 -0
  132. data/lib/nexmo/oas/renderer/views/code_snippets/_configure_client.html.erb +20 -0
  133. data/lib/nexmo/oas/renderer/views/code_snippets/_dependencies.html.erb +11 -0
  134. data/lib/nexmo/oas/renderer/views/code_snippets/_write_code.html.erb +13 -0
  135. data/lib/nexmo/oas/renderer/views/code_snippets/list/plain.html.erb +10 -0
  136. data/lib/nexmo/oas/renderer/views/concepts/list/plain.html.erb +5 -0
  137. data/lib/nexmo/oas/renderer/views/layouts/_head.erb +4 -0
  138. data/lib/nexmo/oas/renderer/views/layouts/_javascripts.erb +9 -0
  139. data/lib/nexmo/oas/renderer/views/layouts/api.erb +23 -0
  140. data/lib/nexmo/oas/renderer/views/layouts/open_api.erb +10 -0
  141. data/lib/nexmo/oas/renderer/views/open_api/_callback.erb +5 -0
  142. data/lib/nexmo/oas/renderer/views/open_api/_callback_endpoint.erb +48 -0
  143. data/lib/nexmo/oas/renderer/views/open_api/_code_examples.erb +16 -0
  144. data/lib/nexmo/oas/renderer/views/open_api/_endpoint.erb +156 -0
  145. data/lib/nexmo/oas/renderer/views/open_api/_model.erb +38 -0
  146. data/lib/nexmo/oas/renderer/views/open_api/_navigation.erb +80 -0
  147. data/lib/nexmo/oas/renderer/views/open_api/_parameter_groups.erb +50 -0
  148. data/lib/nexmo/oas/renderer/views/open_api/_parameters.erb +165 -0
  149. data/lib/nexmo/oas/renderer/views/open_api/_response_description_parameters.erb +61 -0
  150. data/lib/nexmo/oas/renderer/views/open_api/_response_descriptions.erb +41 -0
  151. data/lib/nexmo/oas/renderer/views/open_api/show.erb +104 -0
  152. data/lib/nexmo/oas/renderer/views/static/404.erb +6 -0
  153. data/lib/nexmo/oas/renderer/views/tutorials/_index.html.erb +32 -0
  154. data/lib/nexmo/oas/renderer/views/tutorials/index.html.erb +7 -0
  155. data/lib/nexmo/oas/renderer/views/tutorials/list/plain.html.erb +5 -0
  156. data/lib/nexmo/oas/renderer/views/tutorials/show.html.erb +8 -0
  157. data/nexmo-oas-renderer.gemspec +49 -0
  158. metadata +399 -0
@@ -0,0 +1,33 @@
1
+ require_relative './oas_parser'
2
+
3
+ module Nexmo
4
+ module OAS
5
+ module Renderer
6
+ class OpenApiDefinitionResolver
7
+ def self.find(name)
8
+ path = paths(name).detect do |p|
9
+ break p if File.file? p
10
+ end
11
+
12
+ return resolve(path) if path
13
+
14
+ raise "Could not find definition '#{name}' in '#{API.oas_path}'"
15
+ end
16
+
17
+ def self.paths(name)
18
+ ['json', 'yaml', 'yml'].map do |format|
19
+ path(name, format)
20
+ end
21
+ end
22
+
23
+ def self.path(name, format)
24
+ "#{API.oas_path}/definitions/#{name}.#{format}"
25
+ end
26
+
27
+ def self.resolve(path)
28
+ OasParser::Definition.resolve(path)
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,7 @@
1
+ module Nexmo
2
+ module OAS
3
+ module Renderer
4
+ VERSION = "0.1.0"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1 @@
1
+ <%= @specification.content.html_safe %>
@@ -0,0 +1,9 @@
1
+ <div class="Vlt-box Vlt-box--lesspadding Nxd-accordion-emphasis">
2
+ <h5 class="Vlt-js-accordion__trigger Vlt-accordion__trigger" data-accordion="acc<%= id %>" tabindex="0">
3
+ <%= app['use_existing'] ? 'Use your existing application' : 'Create an application' %>
4
+ </h5>
5
+
6
+ <div id="acc<%=id %>" class="Vlt-js-accordion__content Vlt-accordion__content Vlt-accordion__content--noborder">
7
+ If you do not have an application you can <a href="/messages/code-snippets/create-an-application">create one</a>. Make sure you also <a href="/messages/code-snippets/configure-webhooks">configure your webhooks</a>.
8
+ </div>
9
+ </div>
@@ -0,0 +1,41 @@
1
+ <div class="Vlt-box Vlt-box--lesspadding Nxd-accordion-emphasis">
2
+ <h5 class="Vlt-js-accordion__trigger Vlt-accordion__trigger" data-accordion="acc<%= id %>" tabindex="0">
3
+ Create an application
4
+ </h5>
5
+
6
+ <div id="acc<%=id %>" class="Vlt-js-accordion__content Vlt-accordion__content Vlt-accordion__content--noborder">
7
+ <p>A Nexmo application contains the required configuration for your project. You can create an application
8
+ using the <a href="https://github.com/Nexmo/nexmo-cli">Nexmo CLI</a> (see below) or <a href="https://dashboard.nexmo.com/voice/create-application">via
9
+ the dashboard</a>. To learn more about applications <a href="/concepts/guides/applications">see our
10
+ Nexmo concepts guide</a>.</p>
11
+ <h4>Install the CLI</h4>
12
+ <pre class="highlight shell"><code>$ npm install -g nexmo-cli</code></pre>
13
+
14
+ <h4>Create an application</h4>
15
+ <p>Once you have the CLI installed you can use it to create a Nexmo application. Run the following command and
16
+ make a note of the application ID that it returns. This is the value to use in <code>NEXMO_APPLICATION_ID</code>
17
+ in the example below. It will also create <code>private.key</code> in the current directory which you will
18
+ need in the <em>Initialize your dependencies</em> step</p>
19
+
20
+ <% unless app['disable_ngrok'] %>
21
+ <p>Nexmo needs to connect to your local machine to access your <code>answer_url</code>. We recommend using <a
22
+ href="https://www.nexmo.com/blog/2017/07/04/local-development-nexmo-ngrok-tunnel-dr/">ngrok</a> to do
23
+ this. Make sure to change <code>demo.ngrok.io</code> in the examples below to your own ngrok URL.</p>
24
+ <% end %>
25
+
26
+ <pre class="highlight shell"><code>$ nexmo app:create "<%=app['name'] %>" <%=app['answer_url'] %> <%=app['event_url'] %> --keyfile=private.key --type=rtc</code></pre>
27
+
28
+ <h4>Or to use your existing Nexmo application</h4>
29
+
30
+ <p>You will need to use an existing Nexmo application and
31
+ authenticate a User in order to achieve results here.</p>
32
+ <p>See the <a href="https://developer.nexmo.com/conversation/overview">Conversation API docs</a>
33
+ for information
34
+ on how to create an Application and Users on your backend server.</p>
35
+ <p>Alternatively you can review the <a href="https://developer.nexmo.com/tutorials/client-sdk-generate-test-credentials">tutorial
36
+ on getting started with generating an Application and
37
+ credentials</a>.</p>
38
+ </div>
39
+
40
+
41
+ </div>
@@ -0,0 +1,24 @@
1
+ <div class="Vlt-box Vlt-box--lesspadding Nxd-accordion-emphasis">
2
+ <h5 class="Vlt-js-accordion__trigger Vlt-accordion__trigger" data-accordion="acc<%= id %>" tabindex="0">
3
+ <%= app['use_existing'] ? 'Use your existing application' : 'Create an application' %>
4
+ </h5>
5
+
6
+ <div id="acc<%=id %>" class="Vlt-js-accordion__content Vlt-accordion__content Vlt-accordion__content--noborder">
7
+ <% if app['use_existing'] %>
8
+ <p><%= app['use_existing'] %></p>
9
+ <% else %>
10
+ <p>A Nexmo application contains the required configuration for your project. You can create an application using the <a href="https://github.com/Nexmo/nexmo-cli">Nexmo CLI</a> (see below) or <a href="https://dashboard.nexmo.com/voice/create-application">via the dashboard</a>. To learn more about applications <a href="/concepts/guides/applications">see our Nexmo concepts guide</a>.</p>
11
+ <h4>Install the CLI</h4>
12
+ <pre class="highlight bash dependencies"><code>npm install -g nexmo-cli</code></pre>
13
+
14
+ <h4>Create an application</h4>
15
+ <p>Once you have the CLI installed you can use it to create a Nexmo application. Run the following command and make a note of the application ID that it returns. This is the value to use in <code>NEXMO_APPLICATION_ID</code> in the example below. It will also create <code>private.key</code> in the current directory which you will need in the <em>Initialize your dependencies</em> step</p>
16
+
17
+ <% unless app['disable_ngrok'] %>
18
+ <p>Nexmo needs to connect to your local machine to access your <code>answer_url</code>. We recommend using <a href="https://www.nexmo.com/blog/2017/07/04/local-development-nexmo-ngrok-tunnel-dr/">ngrok</a> to do this. Make sure to change <code>demo.ngrok.io</code> in the examples below to your own ngrok URL.</p>
19
+ <% end %>
20
+
21
+ <pre class="highlight bash dependencies"><code>nexmo app:create "<%=app['name'] %>" <%=app['answer_url'] %> <%=app['event_url'] %> --keyfile private.key</code></pre>
22
+ <% end %>
23
+ </div>
24
+ </div>
@@ -0,0 +1,6 @@
1
+ <div class="copy-wrapper">
2
+ <div class="copy-button" data-lang="<%= lang %>" data-block="<%= config['source'] %>" data-section="code">
3
+ <%= octicon "clippy", :class => 'top left' %> <span>Copy to Clipboard</span>
4
+ </div>
5
+ <pre class="highlight <%= lexer.tag %> main-code"><code><%= highlighted_code_source %></code></pre>
6
+ </div>
@@ -0,0 +1,20 @@
1
+ <div class="Vlt-box Vlt-box--lesspadding Nxd-accordion-emphasis">
2
+ <h5 class="Vlt-js-accordion__trigger Vlt-accordion__trigger" data-accordion="acc<%= id %>" tabindex="0">
3
+ Initialize your dependencies
4
+ </h5>
5
+
6
+ <div id="acc<%=id %>" class="Vlt-js-accordion__content Vlt-accordion__content Vlt-accordion__content--noborder">
7
+ <%= create_instructions %>
8
+ <div class="copy-wrapper">
9
+
10
+ <div class="copy-button" data-lang="<%= lang %>" data-block="<%= config['source'] %>" data-section="configure">
11
+ <%= octicon "clippy", :class => 'top left' %> <span>Copy to Clipboard</span>
12
+ </div>
13
+ <pre class="highlight copy-to-clipboard <%= config['title'] %>"><code><%= highlighted_client_source %></code></pre>
14
+ </div>
15
+
16
+ <p><a data-section="configure" data-lang="<%= lang %>" data-block="<%= config['source'] %>" href="<%= client_url %>">View full source</a></p>
17
+
18
+ </div>
19
+ </div>
20
+
@@ -0,0 +1,11 @@
1
+ <div class="Vlt-box Vlt-box--lesspadding Nxd-accordion-emphasis">
2
+ <h5 class="Vlt-js-accordion__trigger Vlt-accordion__trigger" data-accordion="acc<%= id %>" tabindex="0"><%= title %></h5>
3
+
4
+ <div id="acc<%= id %>" class="Vlt-js-accordion__content Vlt-accordion__content Vlt-accordion__content--noborder">
5
+ <p><%=deps['text']%></p>
6
+ <% if deps['code'] %>
7
+ <pre class="highlight <%= deps['type'] || 'bash' %> dependencies"><code><%=deps['code']%></code></pre>
8
+ <% end %>
9
+ </div>
10
+ </div>
11
+
@@ -0,0 +1,13 @@
1
+ <h2 class="Vlt-title--margin-top3">Write the code</h2>
2
+ <%= add_instructions %>
3
+
4
+ <div class="copy-wrapper">
5
+ <div class="copy-button" data-lang="<%= lang %>" data-block="<%= config['source'] %>" data-section="code">
6
+ <%= octicon "clippy", :class => 'top left' %> <span>Copy to Clipboard</span>
7
+ </div>
8
+ <pre class="highlight <%= lexer.tag %> main-code"><code><%= highlighted_code_source %></code></pre>
9
+
10
+ </div>
11
+
12
+ <p><a data-section="code" data-lang="<%= lang %>" data-block="<%= config['source'] %>" href="<%= source_url %>">View full source</a></p>
13
+
@@ -0,0 +1,10 @@
1
+ <ul class="Vlt-list Vlt-list--simple">
2
+ <% @blocks.each do |block| %>
3
+ <li><a href="<%= block.url %>">
4
+ <% if block.category %>
5
+ <%= block.category %> /
6
+ <% end %>
7
+ <%= block.title %></a>
8
+ </li>
9
+ <% end %>
10
+ </ul>
@@ -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,4 @@
1
+ <head>
2
+ <link rel="stylesheet" href="/assets/stylesheets/volta.min.css"/>
3
+ <link rel="stylesheet" href="/assets/stylesheets/style.css"/>
4
+ </head>
@@ -0,0 +1,9 @@
1
+ <script src="/assets/javascripts/volta.core.js"></script>
2
+ <script src="/assets/javascripts/volta.accordion.js"></script>
3
+ <script src="/assets/javascripts/volta.tabs.js"></script>
4
+ <script src="/assets/javascripts/volta.modal.js"></script>
5
+ <script src="/assets/javascripts/components/format.js"></script>
6
+ <script type="text/javascript">
7
+ Volta.init(["accordion", "tab", "modal"]);
8
+ new Format
9
+ </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 Vlt-sidenav--light" 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,10 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <%= erb :"layouts/_head" %>
4
+
5
+ <body class="Nxd-template">
6
+ <%= yield %>
7
+
8
+ <%= erb :"layouts/_javascripts" %>
9
+ </body>
10
+ </html>
@@ -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,48 @@
1
+ <div class="Vlt-grid">
2
+ <div class="Vlt-col Vlt-col--2of3 Nxd-api__docs">
3
+ <div>
4
+ <h3 id="<%= endpoint.operationId %>" class="Vlt-title--icon">
5
+ <%= endpoint.summary %>
6
+ <% if webhook %>
7
+ <span class="Vlt-badge Vlt-badge--orange">
8
+ <i class="icon icon-webhook"></i> Webhook
9
+ </span>
10
+ <% else %>
11
+ <span class="Vlt-badge Vlt-badge--green">
12
+ <i class="icon icon-callback"></i> Callback
13
+ </span>
14
+ <% end %>
15
+ </h3>
16
+ <% if endpoint.description %>
17
+ <p><%= endpoint.description.render_markdown %></p>
18
+ <% end %>
19
+
20
+ <div class="Vlt-badge-combined">
21
+ <code class="Vlt-badge Vlt-badge--large Nxd-method-badge Nxd-method-badge--<%= endpoint.method %>"><%= endpoint.method.upcase %></code>
22
+ <code class="Vlt-badge Vlt-badge--large Vlt-badge--grey">
23
+ <span class="api-path-host">https://example.com</span>
24
+ <%= (endpoint.raw['x-example-path'] || '/webhooks/event').gsub(/\{(.+?)\}/, '<span class="api-path-parameter">:\1</span>') %>
25
+ </code>
26
+ </div>
27
+
28
+ <%= erb :'open_api/_parameter_groups', locals: { endpoint: endpoint, callback: true } %>
29
+ </div>
30
+ </div>
31
+
32
+ <div class="Vlt-col Vlt-col--1of3 Nxd-api__code">
33
+ <%= erb :'open_api/_code_examples', locals: { endpoint: endpoint } %>
34
+
35
+ <h5>Request model</h5>
36
+
37
+ <% endpoint.request_body.formats.each_with_index do |format, index| %>
38
+ <div class="js-format" data-format="<%= format %>">
39
+ <% schema = endpoint.request_body.schema(format) %>
40
+ <%= Nexmo::OAS::Renderer::ResponseParserDecorator.new(schema).html(format, xml_options: schema['xml']) %>
41
+ </div>
42
+ <% end %>
43
+ </div>
44
+ </div>
45
+
46
+ <% endpoint.callbacks.each do |callback| %>
47
+ <%= erb :'open_api/callback', locals: { callback: callback } %>
48
+ <% 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,156 @@
1
+ <div class="Vlt-grid">
2
+ <div class="Vlt-col Vlt-col--2of3 Nxd-api__docs">
3
+ <div>
4
+ <h3 id='<%= endpoint.operationId %>'><%= endpoint.summary %></h3>
5
+ <% if endpoint.description %>
6
+ <p><%= endpoint.description.render_markdown %></p>
7
+ <% end %>
8
+
9
+ <div class="Vlt-badge-combined">
10
+ <code class="Vlt-badge Vlt-badge--large Nxd-method-badge Nxd-method-badge--<%= endpoint.method %>"><%= endpoint.method.upcase %></code>
11
+ <code class="Vlt-badge Vlt-badge--large Vlt-badge--grey">
12
+ <% servers = endpoint.path.servers ? endpoint.path.servers : endpoint.definition.servers %>
13
+ <span><%= servers[0]['url'] %></span><%= endpoint.path.path.gsub(/\{(.+?)\}/, '<span class="api-path-parameter">:\1</span>') %>
14
+ </code>
15
+ </div>
16
+
17
+ <% if endpoint.jwt? || endpoint.basic_auth? || endpoint.oauth? %>
18
+ <h4>Authentication</h4>
19
+
20
+ <% if endpoint.jwt? && endpoint.basic_auth? %>
21
+ <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>
22
+
23
+ <p>You can use <em>either</em> JWT or Basic authentication, but not both at the same time.</p>
24
+ <% end %>
25
+
26
+ <div class="Vlt-table Vlt-table--data Vlt-table--bordered">
27
+ <table>
28
+ <thead>
29
+ <tr>
30
+ <th>Key</th>
31
+ <th>Description</th>
32
+ <th>Example</th>
33
+ <th>Default</th>
34
+ </tr>
35
+ </thead>
36
+ <tbody>
37
+ <% if endpoint.oauth? %>
38
+ <tr>
39
+ <td>
40
+ <b>Authorization</b>
41
+ </td>
42
+ <td>
43
+ <b>Your OAuth token.</b><br>
44
+ <small><a href="/vonage-business-cloud/vbc-apis/getting-started/authentication">Read more about OAuth tokens</a></small>
45
+ </td>
46
+ <td><code>Bearer &lt;access_token&gt;</code></td>
47
+ <td>
48
+ <em>None</em>
49
+ </td>
50
+ </tr>
51
+ <% end %>
52
+
53
+ <% if endpoint.jwt? %>
54
+ <tr>
55
+ <td>
56
+ <b>Authorization</b>
57
+ </td>
58
+ <td>
59
+ <b>Your JSON web token.</b><br>
60
+ <small><a href="/concepts/guides/authentication#json-web-tokens-jwt">Read more about JWTs</a></small>
61
+ </td>
62
+ <td><code>Bearer &lt;JWT&gt;</code></td>
63
+ <td>
64
+ <em>None</em>
65
+ </td>
66
+ </tr>
67
+ <% end %>
68
+
69
+ <% if endpoint.basic_auth? %>
70
+ <tr>
71
+ <td>
72
+ <b>Authorization</b>
73
+ </td>
74
+ <td>
75
+ <b>Base64 encoded API key and secret joined by a colon.</b><br>
76
+ <small><a href="/concepts/guides/authentication#header-based-api-key-and-secret-authentication">Read more</a></small>
77
+ </td>
78
+ <td><code>Basic &lt;base64&gt;</code></td>
79
+ <td>
80
+ <i>None</i>
81
+ </td>
82
+ </tr>
83
+ <% end %>
84
+ </tbody>
85
+ </table>
86
+ </div>
87
+ <% end %>
88
+
89
+ <%= erb :'open_api/_parameter_groups', locals: { endpoint: endpoint } %>
90
+ <%= erb :'open_api/_response_descriptions', locals: { endpoint: endpoint, anchor_prefix: "response-#{endpoint.operationId}", auto_expand_responses: @auto_expand_responses } %>
91
+
92
+ </div>
93
+ </div>
94
+
95
+ <div class="Vlt-col Vlt-col--1of3 Nxd-api__code">
96
+ <%= erb :'open_api/_code_examples', locals: { endpoint: endpoint } %>
97
+
98
+ <% endpoint.responses.each do |response| %>
99
+ <%
100
+ id = SecureRandom.hex
101
+ expand_response = response.code[0] == '2' && response.raw['x-expand-response'] != false
102
+ expand_response = true if response.raw['x-expand-response']
103
+ %>
104
+
105
+ <div class="Vlt-accordion">
106
+ <button tabindex="0" class="Vlt-accordion__trigger <%= expand_response ? 'Vlt-accordion__trigger_active' : '' %>">
107
+ <h5 class="Vlt-title--nomargin">HTTP response
108
+ <span class="Vlt-badge Vlt-badge--<%= response.code[0] == '2' ? 'green' : response.code[0] == '3' ? 'yellow' : 'red' %>"><%= response.code %></span>
109
+ </h5>
110
+ </button>
111
+
112
+ <div class="Vlt-accordion__content <%= expand_response ? 'Vlt-accordion__content_open' : '' %>">
113
+ <% response.formats.each_with_index do |format, index| %>
114
+ <div class="js-format" data-format="<%= format %>">
115
+ <% if response.exhibits_one_of_multiple_schemas?(format) %>
116
+ <%
117
+ schema_tab_ids = []
118
+ id = SecureRandom.hex
119
+ response.split_schemas(format).each { schema_tab_ids << SecureRandom.hex }
120
+ %>
121
+
122
+ <div class="Vlt-tabs">
123
+ <div class="Vlt-tabs__header">
124
+ <% response.split_schemas(format).each_with_index do |schema, index| %>
125
+ <div tabindex="<%= schema_tab_ids[index] %>" <% if index.zero? %>class="Vlt-tabs__link Vlt-tabs__link_active" aria-selected="true"<% else %>class="Vlt-tabs__link"<% end %>>
126
+ <%= schema['description'] || "Response #{index + 1}" %>
127
+ </div>
128
+ <% end %>
129
+ </div>
130
+ <div class="Vlt-tabs__content">
131
+ <% response.split_schemas(format).each_with_index do |schema, index| %>
132
+ <div class="Vlt-tabs__panel <% if index.zero? %>Vlt-tabs__panel_active<% end %>">
133
+ <%= Nexmo::OAS::Renderer::ResponseParserDecorator.new(schema).html(format, xml_options: schema['xml']) %>
134
+ </div>
135
+ <% end %>
136
+ </div>
137
+ </div>
138
+ <% else %>
139
+ <% schema = response.schema(format) %>
140
+ <%= Nexmo::OAS::Renderer::ResponseParserDecorator.new(schema).html(format, xml_options: schema['xml']) %>
141
+ <% end %>
142
+ </div>
143
+ <% end %>
144
+ </div>
145
+
146
+ <% if response.code == '204' || response.formats.empty? %>
147
+ <pre class="highlight"><code>No content</code></pre>
148
+ <% end %>
149
+ </div>
150
+ <% end %>
151
+ </div>
152
+ </div>
153
+
154
+ <% endpoint.callbacks.each do |callback| %>
155
+ <%= erb :'open_api/_callback', locals: { callback: callback, webhook: false } %>
156
+ <% end %>