station 0.0.0 → 0.0.100

Sign up to get free protection for your applications and to get access to all the features.
Files changed (620) hide show
  1. checksums.yaml +7 -0
  2. data/.buildpacks +1 -0
  3. data/.editorconfig +23 -0
  4. data/.env.example +33 -0
  5. data/.gitignore +37 -22
  6. data/CODE_OF_CONDUCT.md +46 -0
  7. data/CONTRIBUTING.md +46 -0
  8. data/Dockerfile +69 -0
  9. data/Gemfile +2 -0
  10. data/Gemfile.lock +14 -0
  11. data/LICENSE.md +400 -20
  12. data/LICENSE.txt +9 -0
  13. data/Procfile +1 -0
  14. data/README.md +54 -20
  15. data/app.json +24 -0
  16. data/babel.config.js +74 -0
  17. data/bin/nexmo-developer +120 -0
  18. data/docs/Getting-Started.md +39 -0
  19. data/docs/How-To-Use.md +272 -0
  20. data/docs/_config.yml +5 -0
  21. data/docs/index.md +46 -0
  22. data/lib/nexmo_developer/.disallowed_words +2 -0
  23. data/lib/nexmo_developer/.dockerignore +1 -0
  24. data/lib/nexmo_developer/.eslintrc.js +6 -0
  25. data/lib/nexmo_developer/.nvmrc +1 -0
  26. data/lib/nexmo_developer/.postcssrc.yml +4 -0
  27. data/lib/nexmo_developer/.pre-commit-config.yaml +8 -0
  28. data/lib/nexmo_developer/.rspec +3 -0
  29. data/lib/nexmo_developer/.rubocop.yml +276 -0
  30. data/lib/nexmo_developer/.ruby-version +1 -0
  31. data/lib/nexmo_developer/Dockerfile +28 -0
  32. data/lib/nexmo_developer/Gemfile +192 -0
  33. data/lib/nexmo_developer/Gemfile.lock +630 -0
  34. data/lib/nexmo_developer/Guardfile +109 -0
  35. data/lib/nexmo_developer/Procfile +2 -0
  36. data/lib/nexmo_developer/Rakefile +6 -0
  37. data/lib/nexmo_developer/Runbook.md +69 -0
  38. data/lib/nexmo_developer/app/admin/active_admin_feedback_author.rb +23 -0
  39. data/lib/nexmo_developer/app/admin/active_admin_redirect.rb +22 -0
  40. data/lib/nexmo_developer/app/admin/active_admin_session.rb +34 -0
  41. data/lib/nexmo_developer/app/admin/admin_building_block_event.rb +31 -0
  42. data/lib/nexmo_developer/app/admin/admin_event.rb +40 -0
  43. data/lib/nexmo_developer/app/admin/admin_feedback_feedback.rb +54 -0
  44. data/lib/nexmo_developer/app/admin/admin_feedback_resource.rb +42 -0
  45. data/lib/nexmo_developer/app/admin/admin_user.rb +37 -0
  46. data/lib/nexmo_developer/app/assets/config/manifest.js +5 -0
  47. data/lib/nexmo_developer/app/assets/fonts/Lato-Black.woff +0 -0
  48. data/lib/nexmo_developer/app/assets/fonts/Lato-Black.woff2 +0 -0
  49. data/lib/nexmo_developer/app/assets/fonts/Lato-Regular.woff +0 -0
  50. data/lib/nexmo_developer/app/assets/fonts/Lato-Regular.woff2 +0 -0
  51. data/lib/nexmo_developer/app/assets/fonts/Lato-Semibold.woff +0 -0
  52. data/lib/nexmo_developer/app/assets/fonts/Lato-Semibold.woff2 +0 -0
  53. data/lib/nexmo_developer/app/assets/fonts/icomoon.eot +0 -0
  54. data/lib/nexmo_developer/app/assets/fonts/icomoon.json +1257 -0
  55. data/lib/nexmo_developer/app/assets/fonts/icomoon.svg +55 -0
  56. data/lib/nexmo_developer/app/assets/fonts/icomoon.ttf +0 -0
  57. data/lib/nexmo_developer/app/assets/fonts/icomoon.woff +0 -0
  58. data/lib/nexmo_developer/app/assets/fonts/nexmo-developer.json +36483 -0
  59. data/lib/nexmo_developer/app/assets/images/.keep +0 -0
  60. data/lib/nexmo_developer/app/assets/images/logo@3x.png +0 -0
  61. data/lib/nexmo_developer/app/assets/images/logo_vonage.png +0 -0
  62. data/lib/nexmo_developer/app/assets/images/nexmo-developer-logo.svg +25 -0
  63. data/lib/nexmo_developer/app/assets/images/nexmo-logo-collapsed.svg +10 -0
  64. data/lib/nexmo_developer/app/assets/images/nexmo-vonage-white.svg +79 -0
  65. data/lib/nexmo_developer/app/assets/images/posters/chatapp.jpg +0 -0
  66. data/lib/nexmo_developer/app/assets/images/posters/chatapp_small.png +0 -0
  67. data/lib/nexmo_developer/app/assets/images/posters/nexmo.jpg +0 -0
  68. data/lib/nexmo_developer/app/assets/images/posters/numberinsight.jpg +0 -0
  69. data/lib/nexmo_developer/app/assets/images/posters/numberinsight_small.png +0 -0
  70. data/lib/nexmo_developer/app/assets/images/posters/sms.jpg +0 -0
  71. data/lib/nexmo_developer/app/assets/images/posters/sms_small.png +0 -0
  72. data/lib/nexmo_developer/app/assets/images/posters/verify.jpg +0 -0
  73. data/lib/nexmo_developer/app/assets/images/posters/verify_small.png +0 -0
  74. data/lib/nexmo_developer/app/assets/images/posters/voice.jpg +0 -0
  75. data/lib/nexmo_developer/app/assets/images/posters/voice_small.png +0 -0
  76. data/lib/nexmo_developer/app/assets/images/select-dropdown.png +0 -0
  77. data/lib/nexmo_developer/app/assets/images/slack.svg +33 -0
  78. data/lib/nexmo_developer/app/assets/images/themes/ea/topography.png +0 -0
  79. data/lib/nexmo_developer/app/assets/javascripts/active_admin.js.coffee +1 -0
  80. data/lib/nexmo_developer/app/assets/javascripts/application.js +19 -0
  81. data/lib/nexmo_developer/app/assets/javascripts/stats.js +14 -0
  82. data/lib/nexmo_developer/app/assets/regex/matching_chars.rb +1 -0
  83. data/lib/nexmo_developer/app/assets/regex/sequence_diagram_regex.rb +1 -0
  84. data/lib/nexmo_developer/app/assets/regex/stats_regex.rb +1 -0
  85. data/lib/nexmo_developer/app/assets/regex/webfont_regex.rb +1 -0
  86. data/lib/nexmo_developer/app/assets/stylesheets/active_admin.scss +17 -0
  87. data/lib/nexmo_developer/app/assets/stylesheets/application.css +1 -0
  88. data/lib/nexmo_developer/app/channels/application_cable/channel.rb +4 -0
  89. data/lib/nexmo_developer/app/channels/application_cable/connection.rb +4 -0
  90. data/lib/nexmo_developer/app/constraints/documentation_constraint.rb +25 -0
  91. data/lib/nexmo_developer/app/constraints/landing_page_constraint.rb +18 -0
  92. data/lib/nexmo_developer/app/constraints/locale_constraint.rb +17 -0
  93. data/lib/nexmo_developer/app/constraints/open_api_constraint.rb +49 -0
  94. data/lib/nexmo_developer/app/controllers/admin_api/code_snippets_controller.rb +45 -0
  95. data/lib/nexmo_developer/app/controllers/admin_api/feedback_controller.rb +11 -0
  96. data/lib/nexmo_developer/app/controllers/admin_api_controller.rb +17 -0
  97. data/lib/nexmo_developer/app/controllers/api_controller.rb +33 -0
  98. data/lib/nexmo_developer/app/controllers/api_errors_controller.rb +82 -0
  99. data/lib/nexmo_developer/app/controllers/application_controller.rb +93 -0
  100. data/lib/nexmo_developer/app/controllers/careers_controller.rb +9 -0
  101. data/lib/nexmo_developer/app/controllers/concerns/.keep +0 -0
  102. data/lib/nexmo_developer/app/controllers/dashboard_controller.rb +216 -0
  103. data/lib/nexmo_developer/app/controllers/extend_controller.rb +45 -0
  104. data/lib/nexmo_developer/app/controllers/feedback/feedbacks_controller.rb +85 -0
  105. data/lib/nexmo_developer/app/controllers/feeds_controller.rb +20 -0
  106. data/lib/nexmo_developer/app/controllers/jobs_controller.rb +64 -0
  107. data/lib/nexmo_developer/app/controllers/markdown_controller.rb +160 -0
  108. data/lib/nexmo_developer/app/controllers/search_controller.rb +35 -0
  109. data/lib/nexmo_developer/app/controllers/sessions_controller.rb +12 -0
  110. data/lib/nexmo_developer/app/controllers/slack_controller.rb +61 -0
  111. data/lib/nexmo_developer/app/controllers/static_controller.rb +195 -0
  112. data/lib/nexmo_developer/app/controllers/tutorial_controller.rb +113 -0
  113. data/lib/nexmo_developer/app/controllers/usage/ab_result_controller.rb +10 -0
  114. data/lib/nexmo_developer/app/controllers/usage/code_snippet_controller.rb +19 -0
  115. data/lib/nexmo_developer/app/controllers/use_case_controller.rb +65 -0
  116. data/lib/nexmo_developer/app/extensions/nokogiri/html/document.rb +23 -0
  117. data/lib/nexmo_developer/app/helpers/application_helper.rb +66 -0
  118. data/lib/nexmo_developer/app/helpers/date_range_helper.rb +9 -0
  119. data/lib/nexmo_developer/app/helpers/navigation_helper.rb +56 -0
  120. data/lib/nexmo_developer/app/helpers/parameter_values_helper.rb +5 -0
  121. data/lib/nexmo_developer/app/helpers/video_helper.rb +20 -0
  122. data/lib/nexmo_developer/app/jobs/application_job.rb +2 -0
  123. data/lib/nexmo_developer/app/mailers/application_mailer.rb +4 -0
  124. data/lib/nexmo_developer/app/middleware/nexmo_developer/building_block_redirect.rb +18 -0
  125. data/lib/nexmo_developer/app/middleware/nexmo_developer/visitor_id.rb +13 -0
  126. data/lib/nexmo_developer/app/models/api_error.rb +31 -0
  127. data/lib/nexmo_developer/app/models/application_record.rb +3 -0
  128. data/lib/nexmo_developer/app/models/concerns/.keep +0 -0
  129. data/lib/nexmo_developer/app/models/concerns/publishable.rb +13 -0
  130. data/lib/nexmo_developer/app/models/event.rb +38 -0
  131. data/lib/nexmo_developer/app/models/feedback.rb +5 -0
  132. data/lib/nexmo_developer/app/models/feedback/author.rb +5 -0
  133. data/lib/nexmo_developer/app/models/feedback/config.rb +16 -0
  134. data/lib/nexmo_developer/app/models/feedback/feedback.rb +34 -0
  135. data/lib/nexmo_developer/app/models/feedback/resource.rb +45 -0
  136. data/lib/nexmo_developer/app/models/product.rb +22 -0
  137. data/lib/nexmo_developer/app/models/redirect.rb +2 -0
  138. data/lib/nexmo_developer/app/models/session.rb +9 -0
  139. data/lib/nexmo_developer/app/models/tutorial.rb +189 -0
  140. data/lib/nexmo_developer/app/models/tutorial/file_loader.rb +28 -0
  141. data/lib/nexmo_developer/app/models/tutorial/metadata.rb +54 -0
  142. data/lib/nexmo_developer/app/models/tutorial/prerequisite.rb +31 -0
  143. data/lib/nexmo_developer/app/models/tutorial/task.rb +45 -0
  144. data/lib/nexmo_developer/app/models/usage.rb +5 -0
  145. data/lib/nexmo_developer/app/models/usage/code_snippet_event.rb +7 -0
  146. data/lib/nexmo_developer/app/models/user.rb +14 -0
  147. data/lib/nexmo_developer/app/presenters/card.rb +20 -0
  148. data/lib/nexmo_developer/app/presenters/career.rb +40 -0
  149. data/lib/nexmo_developer/app/presenters/feedback_presenter.rb +31 -0
  150. data/lib/nexmo_developer/app/presenters/footer.rb +88 -0
  151. data/lib/nexmo_developer/app/presenters/head.rb +96 -0
  152. data/lib/nexmo_developer/app/presenters/header.rb +56 -0
  153. data/lib/nexmo_developer/app/presenters/improve_page_presenter.rb +19 -0
  154. data/lib/nexmo_developer/app/presenters/languages_dropdown_presenter.rb +19 -0
  155. data/lib/nexmo_developer/app/presenters/locale_switcher_presenter.rb +36 -0
  156. data/lib/nexmo_developer/app/presenters/navigation.rb +44 -0
  157. data/lib/nexmo_developer/app/presenters/page_title.rb +38 -0
  158. data/lib/nexmo_developer/app/presenters/product_dropdown_presenter.rb +39 -0
  159. data/lib/nexmo_developer/app/presenters/sidenav.rb +64 -0
  160. data/lib/nexmo_developer/app/presenters/sidenav_item.rb +58 -0
  161. data/lib/nexmo_developer/app/presenters/sidenav_resolver.rb +136 -0
  162. data/lib/nexmo_developer/app/presenters/sidenav_subitem.rb +71 -0
  163. data/lib/nexmo_developer/app/presenters/title_normalizer.rb +25 -0
  164. data/lib/nexmo_developer/app/presenters/topnav.rb +23 -0
  165. data/lib/nexmo_developer/app/presenters/topnav_item.rb +19 -0
  166. data/lib/nexmo_developer/app/presenters/tutorial_list_item.rb +99 -0
  167. data/lib/nexmo_developer/app/screenshots/webhook-url-for-delivery-receipt.js +44 -0
  168. data/lib/nexmo_developer/app/screenshots/webhook-url-for-inbound-message.js +44 -0
  169. data/lib/nexmo_developer/app/services/diff.rb +146 -0
  170. data/lib/nexmo_developer/app/services/email_validator.rb +6 -0
  171. data/lib/nexmo_developer/app/services/feedback_slack_notifier.rb +141 -0
  172. data/lib/nexmo_developer/app/services/greenhouse.rb +45 -0
  173. data/lib/nexmo_developer/app/services/load_config.rb +14 -0
  174. data/lib/nexmo_developer/app/services/locale_redirector.rb +29 -0
  175. data/lib/nexmo_developer/app/services/not_found_notifier.rb +34 -0
  176. data/lib/nexmo_developer/app/services/open_api_definition_resolver.rb +25 -0
  177. data/lib/nexmo_developer/app/services/redirector.rb +33 -0
  178. data/lib/nexmo_developer/app/services/search/article.rb +39 -0
  179. data/lib/nexmo_developer/app/services/search/document.rb +37 -0
  180. data/lib/nexmo_developer/app/services/search_terms.rb +27 -0
  181. data/lib/nexmo_developer/app/services/smartling_api.rb +72 -0
  182. data/lib/nexmo_developer/app/services/translator/file_translator.rb +61 -0
  183. data/lib/nexmo_developer/app/services/translator/smartling/api/base.rb +54 -0
  184. data/lib/nexmo_developer/app/services/translator/smartling/api/create_batch.rb +48 -0
  185. data/lib/nexmo_developer/app/services/translator/smartling/api/create_job.rb +44 -0
  186. data/lib/nexmo_developer/app/services/translator/smartling/api/download_file.rb +44 -0
  187. data/lib/nexmo_developer/app/services/translator/smartling/api/file_status.rb +43 -0
  188. data/lib/nexmo_developer/app/services/translator/smartling/api/file_uris.rb +46 -0
  189. data/lib/nexmo_developer/app/services/translator/smartling/api/upload_file.rb +67 -0
  190. data/lib/nexmo_developer/app/services/translator/smartling/api_requests_generator.rb +64 -0
  191. data/lib/nexmo_developer/app/services/translator/smartling/token_generator.rb +16 -0
  192. data/lib/nexmo_developer/app/services/translator/smartling_coordinator.rb +56 -0
  193. data/lib/nexmo_developer/app/services/translator/smartling_downloader.rb +57 -0
  194. data/lib/nexmo_developer/app/services/translator/translation_request.rb +11 -0
  195. data/lib/nexmo_developer/app/services/translator/translator_coordinator.rb +33 -0
  196. data/lib/nexmo_developer/app/services/translator/utils.rb +42 -0
  197. data/lib/nexmo_developer/app/services/tutorial_list.rb +39 -0
  198. data/lib/nexmo_developer/app/views/admin/feedbacks/_steps.html.erb +44 -0
  199. data/lib/nexmo_developer/app/views/admin_api/code_snippets/index.json.erb +1 -0
  200. data/lib/nexmo_developer/app/views/admin_api/feedback/index.json.jbuilder +3 -0
  201. data/lib/nexmo_developer/app/views/api/show.html.erb +1 -0
  202. data/lib/nexmo_developer/app/views/api_errors/_error_example.html.erb +9 -0
  203. data/lib/nexmo_developer/app/views/api_errors/_error_table.html.erb +30 -0
  204. data/lib/nexmo_developer/app/views/api_errors/index.html.erb +45 -0
  205. data/lib/nexmo_developer/app/views/api_errors/show.html.erb +27 -0
  206. data/lib/nexmo_developer/app/views/careers/index.html.erb +76 -0
  207. data/lib/nexmo_developer/app/views/code_languages/_icon.html.erb +11 -0
  208. data/lib/nexmo_developer/app/views/contribute/administration/page-links.md +179 -0
  209. data/lib/nexmo_developer/app/views/contribute/code-snippets/how-to-update-code-snippets.md +89 -0
  210. data/lib/nexmo_developer/app/views/contribute/code-snippets/sample-code-snippet.md +42 -0
  211. data/lib/nexmo_developer/app/views/contribute/guides/code-examples.md +190 -0
  212. data/lib/nexmo_developer/app/views/contribute/guides/introduction.md +32 -0
  213. data/lib/nexmo_developer/app/views/contribute/guides/landing-pages.md +556 -0
  214. data/lib/nexmo_developer/app/views/contribute/guides/markdown-guide.md +420 -0
  215. data/lib/nexmo_developer/app/views/contribute/guides/platform.md +220 -0
  216. data/lib/nexmo_developer/app/views/contribute/guides/tutorials-and-use-cases.md +64 -0
  217. data/lib/nexmo_developer/app/views/contribute/guides/writing-style-guide.md +278 -0
  218. data/lib/nexmo_developer/app/views/contribute/overview.md +39 -0
  219. data/lib/nexmo_developer/app/views/contribute/structure/content-types/code-snippets.md +140 -0
  220. data/lib/nexmo_developer/app/views/contribute/structure/content-types/guides.md +14 -0
  221. data/lib/nexmo_developer/app/views/contribute/structure/content-types/overviews.md +34 -0
  222. data/lib/nexmo_developer/app/views/contribute/structure/content-types/tutorials.md +59 -0
  223. data/lib/nexmo_developer/app/views/contribute/structure/content-types/use-cases.md +18 -0
  224. data/lib/nexmo_developer/app/views/contribute/structure/overview.md +55 -0
  225. data/lib/nexmo_developer/app/views/contribute/tutorials-and-use-cases/tutorials.md +197 -0
  226. data/lib/nexmo_developer/app/views/contribute/tutorials-and-use-cases/use-cases.md +22 -0
  227. data/lib/nexmo_developer/app/views/dashboard/_performance_table.html.erb +18 -0
  228. data/lib/nexmo_developer/app/views/dashboard/coverage.html.erb +169 -0
  229. data/lib/nexmo_developer/app/views/dashboard/stats.html.erb +134 -0
  230. data/lib/nexmo_developer/app/views/dashboard/stats_summary.html.erb +62 -0
  231. data/lib/nexmo_developer/app/views/extend/index.html.erb +33 -0
  232. data/lib/nexmo_developer/app/views/extend/show.html.erb +31 -0
  233. data/lib/nexmo_developer/app/views/layouts/api.html.erb +24 -0
  234. data/lib/nexmo_developer/app/views/layouts/application.html.erb +15 -0
  235. data/lib/nexmo_developer/app/views/layouts/documentation-index.html.erb +16 -0
  236. data/lib/nexmo_developer/app/views/layouts/documentation.html.erb +26 -0
  237. data/lib/nexmo_developer/app/views/layouts/landing.html.erb +17 -0
  238. data/lib/nexmo_developer/app/views/layouts/mailer.html.erb +13 -0
  239. data/lib/nexmo_developer/app/views/layouts/mailer.text.erb +1 -0
  240. data/lib/nexmo_developer/app/views/layouts/open-api.html.erb +10 -0
  241. data/lib/nexmo_developer/app/views/layouts/page-full.html.erb +9 -0
  242. data/lib/nexmo_developer/app/views/layouts/page.html.erb +15 -0
  243. data/lib/nexmo_developer/app/views/layouts/partials/_feedback.html.erb +14 -0
  244. data/lib/nexmo_developer/app/views/layouts/partials/_footer.html.erb +50 -0
  245. data/lib/nexmo_developer/app/views/layouts/partials/_head.html.erb +139 -0
  246. data/lib/nexmo_developer/app/views/layouts/partials/_header.html.erb +57 -0
  247. data/lib/nexmo_developer/app/views/layouts/partials/_improve_this_page.html.erb +16 -0
  248. data/lib/nexmo_developer/app/views/layouts/partials/_locale_switcher.html.erb +28 -0
  249. data/lib/nexmo_developer/app/views/layouts/partials/_notices.html.erb +29 -0
  250. data/lib/nexmo_developer/app/views/layouts/partials/_post-body-tags.html.erb +4 -0
  251. data/lib/nexmo_developer/app/views/layouts/partials/_product_dropdown.html.erb +30 -0
  252. data/lib/nexmo_developer/app/views/layouts/partials/_programming_languages_dropdown.html.erb +29 -0
  253. data/lib/nexmo_developer/app/views/layouts/partials/_sidenav.html.erb +3 -0
  254. data/lib/nexmo_developer/app/views/layouts/partials/_sidenav_item.html.erb +18 -0
  255. data/lib/nexmo_developer/app/views/layouts/partials/_sidenav_subitem.html.erb +34 -0
  256. data/lib/nexmo_developer/app/views/layouts/partials/api/_voice.html.erb +84 -0
  257. data/lib/nexmo_developer/app/views/layouts/static.html.erb +33 -0
  258. data/lib/nexmo_developer/app/views/markdown/show.html.erb +1 -0
  259. data/lib/nexmo_developer/app/views/markdown/wip.html.erb +5 -0
  260. data/lib/nexmo_developer/app/views/product-lifecycle/beta.md +28 -0
  261. data/lib/nexmo_developer/app/views/product-lifecycle/dev-preview.md +22 -0
  262. data/lib/nexmo_developer/app/views/search/_result.html.erb +31 -0
  263. data/lib/nexmo_developer/app/views/search/results.html.erb +26 -0
  264. data/lib/nexmo_developer/app/views/sessions/set_user_locale.js.erb +1 -0
  265. data/lib/nexmo_developer/app/views/slack/join.html.erb +25 -0
  266. data/lib/nexmo_developer/app/views/static/404.html.erb +26 -0
  267. data/lib/nexmo_developer/app/views/static/_career.html.erb +15 -0
  268. data/lib/nexmo_developer/app/views/static/_community.html.erb +24 -0
  269. data/lib/nexmo_developer/app/views/static/_dotnet.html.erb +26 -0
  270. data/lib/nexmo_developer/app/views/static/_event.html.erb +7 -0
  271. data/lib/nexmo_developer/app/views/static/_products.html.erb +450 -0
  272. data/lib/nexmo_developer/app/views/static/_profile.html.erb +9 -0
  273. data/lib/nexmo_developer/app/views/static/_slack.html.erb +2 -0
  274. data/lib/nexmo_developer/app/views/static/_xwithy.html.erb +33 -0
  275. data/lib/nexmo_developer/app/views/static/default_landing.html.erb +22 -0
  276. data/lib/nexmo_developer/app/views/static/default_landing/partials/_action_button.html.erb +13 -0
  277. data/lib/nexmo_developer/app/views/static/default_landing/partials/_api_list.html.erb +30 -0
  278. data/lib/nexmo_developer/app/views/static/default_landing/partials/_call_to_action.html.erb +35 -0
  279. data/lib/nexmo_developer/app/views/static/default_landing/partials/_career.html.erb +3 -0
  280. data/lib/nexmo_developer/app/views/static/default_landing/partials/_client_sdk_card.html.erb +17 -0
  281. data/lib/nexmo_developer/app/views/static/default_landing/partials/_contact_community.html.erb +15 -0
  282. data/lib/nexmo_developer/app/views/static/default_landing/partials/_contact_support.html.erb +14 -0
  283. data/lib/nexmo_developer/app/views/static/default_landing/partials/_event_search_results.js.erb +2 -0
  284. data/lib/nexmo_developer/app/views/static/default_landing/partials/_event_search_results_content.html.erb +9 -0
  285. data/lib/nexmo_developer/app/views/static/default_landing/partials/_event_search_results_map_content.html.erb +10 -0
  286. data/lib/nexmo_developer/app/views/static/default_landing/partials/_events.html.erb +80 -0
  287. data/lib/nexmo_developer/app/views/static/default_landing/partials/_featured_session.html.erb +18 -0
  288. data/lib/nexmo_developer/app/views/static/default_landing/partials/_github_repo.html.erb +31 -0
  289. data/lib/nexmo_developer/app/views/static/default_landing/partials/_header.html.erb +24 -0
  290. data/lib/nexmo_developer/app/views/static/default_landing/partials/_headshot.html.erb +43 -0
  291. data/lib/nexmo_developer/app/views/static/default_landing/partials/_html.html.erb +3 -0
  292. data/lib/nexmo_developer/app/views/static/default_landing/partials/_join_slack.html.erb +3 -0
  293. data/lib/nexmo_developer/app/views/static/default_landing/partials/_line_divider.html.erb +5 -0
  294. data/lib/nexmo_developer/app/views/static/default_landing/partials/_linked_image.html.erb +10 -0
  295. data/lib/nexmo_developer/app/views/static/default_landing/partials/_migrate_details.html.erb +57 -0
  296. data/lib/nexmo_developer/app/views/static/default_landing/partials/_products.html.erb +1 -0
  297. data/lib/nexmo_developer/app/views/static/default_landing/partials/_section_header.html.erb +10 -0
  298. data/lib/nexmo_developer/app/views/static/default_landing/partials/_sessions.html.erb +30 -0
  299. data/lib/nexmo_developer/app/views/static/default_landing/partials/_structured_text.html.erb +24 -0
  300. data/lib/nexmo_developer/app/views/static/default_landing/partials/_submit_your_idea_form.html.erb +58 -0
  301. data/lib/nexmo_developer/app/views/static/default_landing/partials/_table.html.erb +25 -0
  302. data/lib/nexmo_developer/app/views/static/default_landing/partials/_team_members.html.erb +5 -0
  303. data/lib/nexmo_developer/app/views/static/default_landing/partials/_text.html.erb +5 -0
  304. data/lib/nexmo_developer/app/views/static/default_landing/partials/_tutorial.html.erb +30 -0
  305. data/lib/nexmo_developer/app/views/static/default_landing/partials/_unordered_list.html.erb +11 -0
  306. data/lib/nexmo_developer/app/views/static/default_landing/partials/_warning_callout.html.erb +8 -0
  307. data/lib/nexmo_developer/app/views/static/default_landing/partials/_write_for_nexmo.html.erb +12 -0
  308. data/lib/nexmo_developer/app/views/static/documentation.html.erb +1 -0
  309. data/lib/nexmo_developer/app/views/static/landing.html.erb +47 -0
  310. data/lib/nexmo_developer/app/views/static/past_events.html.erb +19 -0
  311. data/lib/nexmo_developer/app/views/static/podcast.html.erb +40 -0
  312. data/lib/nexmo_developer/app/views/static/robots.txt.erb +4 -0
  313. data/lib/nexmo_developer/app/views/tools/concatenation.html +1 -0
  314. data/lib/nexmo_developer/app/views/tutorial/_prerequisites.html.erb +23 -0
  315. data/lib/nexmo_developer/app/views/tutorial/index.html.erb +81 -0
  316. data/lib/nexmo_developer/app/views/tutorial/list.html.erb +63 -0
  317. data/lib/nexmo_developer/app/views/tutorial/single.html.erb +1 -0
  318. data/lib/nexmo_developer/app/views/use_case/_index.html.erb +53 -0
  319. data/lib/nexmo_developer/app/views/use_case/index.html.erb +12 -0
  320. data/lib/nexmo_developer/app/views/use_case/list/plain.html.erb +5 -0
  321. data/lib/nexmo_developer/app/views/use_case/show.html.erb +8 -0
  322. data/lib/nexmo_developer/app/webpacker/javascript/api_status/index.js +20 -0
  323. data/lib/nexmo_developer/app/webpacker/javascript/careers/index.js +134 -0
  324. data/lib/nexmo_developer/app/webpacker/javascript/code_snippet_events/index.js +89 -0
  325. data/lib/nexmo_developer/app/webpacker/javascript/components/concatenation/Concatenation.vue +96 -0
  326. data/lib/nexmo_developer/app/webpacker/javascript/components/concatenation/character_counter.js +112 -0
  327. data/lib/nexmo_developer/app/webpacker/javascript/components/feedback/Feedback.vue +156 -0
  328. data/lib/nexmo_developer/app/webpacker/javascript/components/feedback/FeedbackPath.vue +56 -0
  329. data/lib/nexmo_developer/app/webpacker/javascript/components/feedback/eventHub.js +3 -0
  330. data/lib/nexmo_developer/app/webpacker/javascript/components/feedback/step/FieldSet.vue +78 -0
  331. data/lib/nexmo_developer/app/webpacker/javascript/components/feedback/step/Plain.vue +26 -0
  332. data/lib/nexmo_developer/app/webpacker/javascript/components/feedback/step/RadioGroup.vue +65 -0
  333. data/lib/nexmo_developer/app/webpacker/javascript/components/feedback/step/TextArea.vue +86 -0
  334. data/lib/nexmo_developer/app/webpacker/javascript/components/feedback/step/base.vue +53 -0
  335. data/lib/nexmo_developer/app/webpacker/javascript/components/feedback/store.js +50 -0
  336. data/lib/nexmo_developer/app/webpacker/javascript/components/jwt_generator/JwtGenerator.vue +220 -0
  337. data/lib/nexmo_developer/app/webpacker/javascript/components/search/NDPArticle.vue +38 -0
  338. data/lib/nexmo_developer/app/webpacker/javascript/components/search/Search.vue +182 -0
  339. data/lib/nexmo_developer/app/webpacker/javascript/components/search/ZendeskArticle.vue +30 -0
  340. data/lib/nexmo_developer/app/webpacker/javascript/format/index.js +36 -0
  341. data/lib/nexmo_developer/app/webpacker/javascript/github_cards/index.js +16 -0
  342. data/lib/nexmo_developer/app/webpacker/javascript/locale_switcher/index.js +40 -0
  343. data/lib/nexmo_developer/app/webpacker/javascript/notices/index.js +52 -0
  344. data/lib/nexmo_developer/app/webpacker/javascript/scroll/index.js +25 -0
  345. data/lib/nexmo_developer/app/webpacker/javascript/sidenav/index.js +251 -0
  346. data/lib/nexmo_developer/app/webpacker/javascript/spotlight/index.js +12 -0
  347. data/lib/nexmo_developer/app/webpacker/javascript/volta/tooltip.min.js +5 -0
  348. data/lib/nexmo_developer/app/webpacker/javascript/volta/volta.js +2145 -0
  349. data/lib/nexmo_developer/app/webpacker/javascript/volta_tabbed_examples/index.js +106 -0
  350. data/lib/nexmo_developer/app/webpacker/javascript/volta_tabbed_examples/user_preference.js +78 -0
  351. data/lib/nexmo_developer/app/webpacker/packs/application.js +136 -0
  352. data/lib/nexmo_developer/app/webpacker/src/application.css +0 -0
  353. data/lib/nexmo_developer/app/webpacker/stylesheets/application.scss +62 -0
  354. data/lib/nexmo_developer/app/webpacker/stylesheets/custom/_core.scss +196 -0
  355. data/lib/nexmo_developer/app/webpacker/stylesheets/custom/_mixins.scss +51 -0
  356. data/lib/nexmo_developer/app/webpacker/stylesheets/custom/_syntax.scss +63 -0
  357. data/lib/nexmo_developer/app/webpacker/stylesheets/custom/_typography.scss +248 -0
  358. data/lib/nexmo_developer/app/webpacker/stylesheets/custom/_variables.scss +23 -0
  359. data/lib/nexmo_developer/app/webpacker/stylesheets/layout/_api.scss +167 -0
  360. data/lib/nexmo_developer/app/webpacker/stylesheets/layout/_careers.scss +29 -0
  361. data/lib/nexmo_developer/app/webpacker/stylesheets/layout/_community.scss +70 -0
  362. data/lib/nexmo_developer/app/webpacker/stylesheets/layout/_feedback.scss +16 -0
  363. data/lib/nexmo_developer/app/webpacker/stylesheets/layout/_footer.scss +113 -0
  364. data/lib/nexmo_developer/app/webpacker/stylesheets/layout/_header.scss +207 -0
  365. data/lib/nexmo_developer/app/webpacker/stylesheets/layout/_hero.scss +16 -0
  366. data/lib/nexmo_developer/app/webpacker/stylesheets/layout/_print.scss +14 -0
  367. data/lib/nexmo_developer/app/webpacker/stylesheets/layout/_search.scss +115 -0
  368. data/lib/nexmo_developer/app/webpacker/stylesheets/layout/_team.scss +36 -0
  369. data/lib/nexmo_developer/app/webpacker/stylesheets/objects/_building-block.scss +32 -0
  370. data/lib/nexmo_developer/app/webpacker/stylesheets/objects/_card.scss +150 -0
  371. data/lib/nexmo_developer/app/webpacker/stylesheets/objects/_collapsible.scss +18 -0
  372. data/lib/nexmo_developer/app/webpacker/stylesheets/objects/_content-block.scss +24 -0
  373. data/lib/nexmo_developer/app/webpacker/stylesheets/objects/_extend.scss +49 -0
  374. data/lib/nexmo_developer/app/webpacker/stylesheets/objects/_focus.scss +5 -0
  375. data/lib/nexmo_developer/app/webpacker/stylesheets/objects/_icons.scss +334 -0
  376. data/lib/nexmo_developer/app/webpacker/stylesheets/objects/_js-sequence-diagram.scss +9 -0
  377. data/lib/nexmo_developer/app/webpacker/stylesheets/objects/_navigation.scss +113 -0
  378. data/lib/nexmo_developer/app/webpacker/stylesheets/objects/_notices.scss +49 -0
  379. data/lib/nexmo_developer/app/webpacker/stylesheets/objects/_tabs.scss +35 -0
  380. data/lib/nexmo_developer/app/webpacker/stylesheets/objects/_use_cases.scss +29 -0
  381. data/lib/nexmo_developer/app/webpacker/stylesheets/objects/_video.scss +14 -0
  382. data/lib/nexmo_developer/app/webpacker/stylesheets/themes/_ea.scss +32 -0
  383. data/lib/nexmo_developer/bin/initiate +23 -0
  384. data/lib/nexmo_developer/bin/rails +4 -0
  385. data/lib/nexmo_developer/bin/setup +36 -0
  386. data/lib/nexmo_developer/bin/update +31 -0
  387. data/lib/nexmo_developer/bin/webpack +19 -0
  388. data/lib/nexmo_developer/bin/webpack-dev-server +19 -0
  389. data/lib/nexmo_developer/bin/yarn +11 -0
  390. data/lib/nexmo_developer/config.ru +5 -0
  391. data/lib/nexmo_developer/config/application.rb +44 -0
  392. data/lib/nexmo_developer/config/boot.rb +4 -0
  393. data/lib/nexmo_developer/config/cable.yml +10 -0
  394. data/lib/nexmo_developer/config/credentials.yml.enc +1 -0
  395. data/lib/nexmo_developer/config/database.yml +91 -0
  396. data/lib/nexmo_developer/config/dynamic_content.yml +1 -0
  397. data/lib/nexmo_developer/config/environment.rb +7 -0
  398. data/lib/nexmo_developer/config/environments/development.rb +63 -0
  399. data/lib/nexmo_developer/config/environments/production.rb +102 -0
  400. data/lib/nexmo_developer/config/environments/staging.rb +86 -0
  401. data/lib/nexmo_developer/config/environments/test.rb +48 -0
  402. data/lib/nexmo_developer/config/feedback.yml +104 -0
  403. data/lib/nexmo_developer/config/initializers/active_admin.rb +295 -0
  404. data/lib/nexmo_developer/config/initializers/algolia.rb +30 -0
  405. data/lib/nexmo_developer/config/initializers/application_controller_renderer.rb +8 -0
  406. data/lib/nexmo_developer/config/initializers/assets.rb +16 -0
  407. data/lib/nexmo_developer/config/initializers/backtrace_silencers.rb +7 -0
  408. data/lib/nexmo_developer/config/initializers/bugsnag.rb +8 -0
  409. data/lib/nexmo_developer/config/initializers/content_security_policy.rb +25 -0
  410. data/lib/nexmo_developer/config/initializers/cookies_serializer.rb +5 -0
  411. data/lib/nexmo_developer/config/initializers/devise.rb +279 -0
  412. data/lib/nexmo_developer/config/initializers/doc_finder.rb +10 -0
  413. data/lib/nexmo_developer/config/initializers/filter_parameter_logging.rb +4 -0
  414. data/lib/nexmo_developer/config/initializers/geocoder.rb +24 -0
  415. data/lib/nexmo_developer/config/initializers/gravatar_image_tag.rb +5 -0
  416. data/lib/nexmo_developer/config/initializers/greenhouse_io.rb +7 -0
  417. data/lib/nexmo_developer/config/initializers/inflections.rb +16 -0
  418. data/lib/nexmo_developer/config/initializers/locale.rb +6 -0
  419. data/lib/nexmo_developer/config/initializers/mime_types.rb +4 -0
  420. data/lib/nexmo_developer/config/initializers/recaptcha.rb +6 -0
  421. data/lib/nexmo_developer/config/initializers/session_store.rb +3 -0
  422. data/lib/nexmo_developer/config/initializers/slack_safety_check.rb +29 -0
  423. data/lib/nexmo_developer/config/initializers/split.rb +5 -0
  424. data/lib/nexmo_developer/config/initializers/wrap_parameters.rb +14 -0
  425. data/lib/nexmo_developer/config/initializers/zeitwerk.rb +7 -0
  426. data/lib/nexmo_developer/config/master.key +1 -0
  427. data/lib/nexmo_developer/config/newrelic.yml +35 -0
  428. data/lib/nexmo_developer/config/puma.rb +41 -0
  429. data/lib/nexmo_developer/config/redirects.yml +280 -0
  430. data/lib/nexmo_developer/config/repos.yml +27 -0
  431. data/lib/nexmo_developer/config/routes.rb +108 -0
  432. data/lib/nexmo_developer/config/secrets.yml +25 -0
  433. data/lib/nexmo_developer/config/spring.rb +6 -0
  434. data/lib/nexmo_developer/config/stitch-redirects.yml +145 -0
  435. data/lib/nexmo_developer/config/storage.yml +34 -0
  436. data/lib/nexmo_developer/config/tutorials/.gitkeep +0 -0
  437. data/lib/nexmo_developer/config/tutorials/en/app-to-app.yml +49 -0
  438. data/lib/nexmo_developer/config/tutorials/en/app-to-phone.yml +43 -0
  439. data/lib/nexmo_developer/config/tutorials/en/create-and-retrieve-a-report.yml +24 -0
  440. data/lib/nexmo_developer/config/tutorials/en/create-report-using-graphical-tools.yml +20 -0
  441. data/lib/nexmo_developer/config/tutorials/en/get-json-records-cli.yml +20 -0
  442. data/lib/nexmo_developer/config/tutorials/en/ifttt-to-sms.yml +10 -0
  443. data/lib/nexmo_developer/config/tutorials/en/in-app-messaging.yml +4 -0
  444. data/lib/nexmo_developer/config/tutorials/en/in-app-messaging/javascript.yml +50 -0
  445. data/lib/nexmo_developer/config/tutorials/en/in-app-messaging/kotlin.yml +52 -0
  446. data/lib/nexmo_developer/config/tutorials/en/in-app-messaging/objective_c.yml +50 -0
  447. data/lib/nexmo_developer/config/tutorials/en/in-app-messaging/swift.yml +50 -0
  448. data/lib/nexmo_developer/config/tutorials/en/number-insight-api-aspnet.yml +11 -0
  449. data/lib/nexmo_developer/config/tutorials/en/phone-to-app.yml +4 -0
  450. data/lib/nexmo_developer/config/tutorials/en/phone-to-app/javascript.yml +38 -0
  451. data/lib/nexmo_developer/config/tutorials/en/receive-sms-dotnet.yml +9 -0
  452. data/lib/nexmo_developer/config/tutorials/en/receive-sms-with-java.yml +9 -0
  453. data/lib/nexmo_developer/config/tutorials/en/receive-sms-with-php.yml +10 -0
  454. data/lib/nexmo_developer/config/tutorials/en/receive-sms-with-ruby.yml +9 -0
  455. data/lib/nexmo_developer/config/tutorials/en/send-facebook-message-with-failover.yml +41 -0
  456. data/lib/nexmo_developer/config/tutorials/en/send-fbm-message.yml +42 -0
  457. data/lib/nexmo_developer/config/tutorials/en/send-sms-with-dotnet.yml +9 -0
  458. data/lib/nexmo_developer/config/tutorials/en/send-sms-with-flask.yml +9 -0
  459. data/lib/nexmo_developer/config/tutorials/en/send-sms-with-java.yml +9 -0
  460. data/lib/nexmo_developer/config/tutorials/en/send-sms-with-messages.yml +38 -0
  461. data/lib/nexmo_developer/config/tutorials/en/send-sms-with-php.yml +9 -0
  462. data/lib/nexmo_developer/config/tutorials/en/send-sms-with-ruby.yml +9 -0
  463. data/lib/nexmo_developer/config/tutorials/en/send-viber-message.yml +40 -0
  464. data/lib/nexmo_developer/config/tutorials/en/send-whatsapp-message.yml +40 -0
  465. data/lib/nexmo_developer/config/tutorials/en/sms-browser-notifications.yml +10 -0
  466. data/lib/nexmo_developer/config/tutorials/en/sms-dlr-with-dotnet.yml +9 -0
  467. data/lib/nexmo_developer/config/tutorials/en/sms-dlr-with-php.yml +9 -0
  468. data/lib/nexmo_developer/config/tutorials/en/sms-dlr-with-ruby.yml +9 -0
  469. data/lib/nexmo_developer/config/tutorials/en/sms-fortune-cookies-with-ibm-cloud.yml +10 -0
  470. data/lib/nexmo_developer/config/tutorials/en/two-factor-authentication-dotnet-verify-api.yml +11 -0
  471. data/lib/nexmo_developer/config/webpack/custom.js +7 -0
  472. data/lib/nexmo_developer/config/webpack/development.js +3 -0
  473. data/lib/nexmo_developer/config/webpack/environment.js +22 -0
  474. data/lib/nexmo_developer/config/webpack/loaders/vue.js +6 -0
  475. data/lib/nexmo_developer/config/webpack/production.js +3 -0
  476. data/lib/nexmo_developer/config/webpack/staging.js +4 -0
  477. data/lib/nexmo_developer/config/webpack/test.js +3 -0
  478. data/lib/nexmo_developer/config/webpacker.yml +82 -0
  479. data/lib/nexmo_developer/db/migrate/20170215101603_create_events.rb +15 -0
  480. data/lib/nexmo_developer/db/migrate/20170413143802_enable_uuid_ossp_extension.rb +6 -0
  481. data/lib/nexmo_developer/db/migrate/20170413154102_change_event_id_to_uuid.rb +7 -0
  482. data/lib/nexmo_developer/db/migrate/20170413154510_create_sessions.rb +13 -0
  483. data/lib/nexmo_developer/db/migrate/20170831144035_create_feedback_feedbacks.rb +18 -0
  484. data/lib/nexmo_developer/db/migrate/20170831150024_create_feedback_resources.rb +10 -0
  485. data/lib/nexmo_developer/db/migrate/20170901093402_sorcery_core.rb +17 -0
  486. data/lib/nexmo_developer/db/migrate/20170907172926_create_feedback_authors.rb +10 -0
  487. data/lib/nexmo_developer/db/migrate/20170908112821_create_active_admin_comments.rb +19 -0
  488. data/lib/nexmo_developer/db/migrate/20170908153555_change_events_start_at_and_end_at_to_date_type.rb +6 -0
  489. data/lib/nexmo_developer/db/migrate/20170914145346_add_code_language_to_feedback.rb +6 -0
  490. data/lib/nexmo_developer/db/migrate/20170915081222_correct_uri_of_resources.rb +31 -0
  491. data/lib/nexmo_developer/db/migrate/20170919151243_add_langugage_set_filters_to_feedbacks.rb +9 -0
  492. data/lib/nexmo_developer/db/migrate/20170920153649_add_resolved_to_feedback_feedbacks.rb +6 -0
  493. data/lib/nexmo_developer/db/migrate/20170921120626_drop_users.rb +5 -0
  494. data/lib/nexmo_developer/db/migrate/20170921121218_devise_create_users.rb +44 -0
  495. data/lib/nexmo_developer/db/migrate/20171030115603_add_api_key_and_api_secret_to_users.rb +6 -0
  496. data/lib/nexmo_developer/db/migrate/20180125163023_add_api_secret_to_users.rb +18 -0
  497. data/lib/nexmo_developer/db/migrate/20180306142355_create_careers.rb +14 -0
  498. data/lib/nexmo_developer/db/migrate/20180306161650_add_summary_and_icon_to_careers.rb +6 -0
  499. data/lib/nexmo_developer/db/migrate/20180306184030_create_friendly_id_slugs.rb +15 -0
  500. data/lib/nexmo_developer/db/migrate/20180306184642_add_slug_to_career.rb +6 -0
  501. data/lib/nexmo_developer/db/migrate/20180306185340_add_description_short_to_careers.rb +5 -0
  502. data/lib/nexmo_developer/db/migrate/20180308101927_add_role_group_to_careers.rb +6 -0
  503. data/lib/nexmo_developer/db/migrate/20180403111850_add_product_to_feedback_resources.rb +41 -0
  504. data/lib/nexmo_developer/db/migrate/20180404124814_add_published_to_sessions.rb +6 -0
  505. data/lib/nexmo_developer/db/migrate/20180827133110_usage_building_block_events.rb +16 -0
  506. data/lib/nexmo_developer/db/migrate/20181006144242_create_redirects.rb +8 -0
  507. data/lib/nexmo_developer/db/migrate/20190220092207_add_city_country_to_events.rb +6 -0
  508. data/lib/nexmo_developer/db/migrate/20190306130440_add_latitude_longitude_to_events.rb +6 -0
  509. data/lib/nexmo_developer/db/migrate/20190415162421_rename_usage_building_block_events.rb +7 -0
  510. data/lib/nexmo_developer/db/migrate/20190711141227_drop_careers_table.rb +21 -0
  511. data/lib/nexmo_developer/db/migrate/20190711143408_drop_friendly_id_slugs_table.rb +16 -0
  512. data/lib/nexmo_developer/db/migrate/20191022100247_add_foreign_key_to_active_storage_for_blob_id.rb +10 -0
  513. data/lib/nexmo_developer/db/migrate/20200402092734_add_remote_to_events.rb +5 -0
  514. data/lib/nexmo_developer/db/migrate/20201016102902_create_feedback_config.rb +10 -0
  515. data/lib/nexmo_developer/db/migrate/20201016110604_add_details_to_feedback_feedback.rb +7 -0
  516. data/lib/nexmo_developer/db/schema.rb +152 -0
  517. data/lib/nexmo_developer/db/seeds.rb +70 -0
  518. data/lib/nexmo_developer/docker-compose.yml +43 -0
  519. data/lib/nexmo_developer/github_deploy_key.enc +0 -0
  520. data/lib/nexmo_developer/lib/common_errors.rb +5 -0
  521. data/lib/nexmo_developer/lib/tasks/.keep +0 -0
  522. data/lib/nexmo_developer/lib/tasks/cache.rake +6 -0
  523. data/lib/nexmo_developer/lib/tasks/careers.rake +8 -0
  524. data/lib/nexmo_developer/lib/tasks/ci.rake +171 -0
  525. data/lib/nexmo_developer/lib/tasks/diff.rake +40 -0
  526. data/lib/nexmo_developer/lib/tasks/documentation.rake +18 -0
  527. data/lib/nexmo_developer/lib/tasks/generate_search_terms.rake +39 -0
  528. data/lib/nexmo_developer/lib/tasks/links.rake +135 -0
  529. data/lib/nexmo_developer/lib/tasks/move.rake +58 -0
  530. data/lib/nexmo_developer/lib/tasks/repos.rake +57 -0
  531. data/lib/nexmo_developer/lib/tasks/screenshots.rake +11 -0
  532. data/lib/nexmo_developer/lib/tasks/section.rake +146 -0
  533. data/lib/nexmo_developer/lib/tasks/smartling.rake +65 -0
  534. data/lib/nexmo_developer/lib/tasks/test.rake +22 -0
  535. data/lib/nexmo_developer/nexmo_developer.rb +1 -0
  536. data/lib/nexmo_developer/public/404.html +67 -0
  537. data/lib/nexmo_developer/public/422.html +67 -0
  538. data/lib/nexmo_developer/public/500.html +66 -0
  539. data/lib/nexmo_developer/public/android-chrome-192x192.png +0 -0
  540. data/lib/nexmo_developer/public/android-chrome-512x512.png +0 -0
  541. data/lib/nexmo_developer/public/apple-touch-icon-precomposed.png +0 -0
  542. data/lib/nexmo_developer/public/apple-touch-icon.png +0 -0
  543. data/lib/nexmo_developer/public/browserconfig.xml +9 -0
  544. data/lib/nexmo_developer/public/favicon-16x16.png +0 -0
  545. data/lib/nexmo_developer/public/favicon-32x32.png +0 -0
  546. data/lib/nexmo_developer/public/favicon.ico +0 -0
  547. data/lib/nexmo_developer/public/fonts/Lato-Heavy.woff +0 -0
  548. data/lib/nexmo_developer/public/fonts/Lato-Heavy.woff2 +0 -0
  549. data/lib/nexmo_developer/public/fonts/Lato-Regular.woff +0 -0
  550. data/lib/nexmo_developer/public/fonts/Lato-Regular.woff2 +0 -0
  551. data/lib/nexmo_developer/public/fonts/Lato-Semibold.woff +0 -0
  552. data/lib/nexmo_developer/public/fonts/Lato-Semibold.woff2 +0 -0
  553. data/lib/nexmo_developer/public/manifest.json +17 -0
  554. data/lib/nexmo_developer/public/mstile-144x144.png +0 -0
  555. data/lib/nexmo_developer/public/mstile-150x150.png +0 -0
  556. data/lib/nexmo_developer/public/nexmo-developer-logo.svg +25 -0
  557. data/lib/nexmo_developer/public/nexmo-vonage-white.svg +79 -0
  558. data/lib/nexmo_developer/public/packs-test/css/application-5047da33.chunk.css +14950 -0
  559. data/lib/nexmo_developer/public/packs-test/css/application-5047da33.chunk.css.map +1 -0
  560. data/lib/nexmo_developer/public/packs-test/css/application-a5fa0fdb.chunk.css +15085 -0
  561. data/lib/nexmo_developer/public/packs-test/css/application-a5fa0fdb.chunk.css.map +1 -0
  562. data/lib/nexmo_developer/public/packs-test/css/application-f92656e6.chunk.css +13 -0
  563. data/lib/nexmo_developer/public/packs-test/css/application-f92656e6.chunk.css.map +1 -0
  564. data/lib/nexmo_developer/public/packs-test/css/application-f9d1bdbc.chunk.css +13 -0
  565. data/lib/nexmo_developer/public/packs-test/css/application-f9d1bdbc.chunk.css.map +1 -0
  566. data/lib/nexmo_developer/public/packs-test/js/0-e58f598fb97314a89835.chunk.js +59763 -0
  567. data/lib/nexmo_developer/public/packs-test/js/0-e58f598fb97314a89835.chunk.js.map +1 -0
  568. data/lib/nexmo_developer/public/packs-test/js/application-21483bf220c794127fa9.chunk.js +6405 -0
  569. data/lib/nexmo_developer/public/packs-test/js/application-21483bf220c794127fa9.chunk.js.map +1 -0
  570. data/lib/nexmo_developer/public/packs-test/js/application-6e53f67bc3230c42f9dd.chunk.js +7839 -0
  571. data/lib/nexmo_developer/public/packs-test/js/application-6e53f67bc3230c42f9dd.chunk.js.map +1 -0
  572. data/lib/nexmo_developer/public/packs-test/js/application-76d5a80c3775a7e2327a.chunk.js +6405 -0
  573. data/lib/nexmo_developer/public/packs-test/js/application-76d5a80c3775a7e2327a.chunk.js.map +1 -0
  574. data/lib/nexmo_developer/public/packs-test/js/application-c6f3e7a9d98562f76890.chunk.js +6619 -0
  575. data/lib/nexmo_developer/public/packs-test/js/application-c6f3e7a9d98562f76890.chunk.js.map +1 -0
  576. data/lib/nexmo_developer/public/packs-test/js/application-d280e78dd4f9d3d9b466.chunk.js +6405 -0
  577. data/lib/nexmo_developer/public/packs-test/js/application-d280e78dd4f9d3d9b466.chunk.js.map +1 -0
  578. data/lib/nexmo_developer/public/packs-test/js/runtime~application-1c11a8c601900ade80b6.js +155 -0
  579. data/lib/nexmo_developer/public/packs-test/js/runtime~application-1c11a8c601900ade80b6.js.map +1 -0
  580. data/lib/nexmo_developer/public/packs-test/js/vendors~application-6518249ed8d7aa985a8b.chunk.js +61849 -0
  581. data/lib/nexmo_developer/public/packs-test/js/vendors~application-6518249ed8d7aa985a8b.chunk.js.map +1 -0
  582. data/lib/nexmo_developer/public/packs-test/js/vendors~application-bc967911d70f3f4a5151.chunk.js +59077 -0
  583. data/lib/nexmo_developer/public/packs-test/js/vendors~application-bc967911d70f3f4a5151.chunk.js.map +1 -0
  584. data/lib/nexmo_developer/public/packs-test/js/vendors~application-d2bde7a8e622fafdeb1d.chunk.js +61843 -0
  585. data/lib/nexmo_developer/public/packs-test/js/vendors~application-d2bde7a8e622fafdeb1d.chunk.js.map +1 -0
  586. data/lib/nexmo_developer/public/packs-test/js/vendors~application-eb13e7814c54bf76b364.chunk.js +62431 -0
  587. data/lib/nexmo_developer/public/packs-test/js/vendors~application-eb13e7814c54bf76b364.chunk.js.map +1 -0
  588. data/lib/nexmo_developer/public/packs-test/manifest.json +85 -0
  589. data/lib/nexmo_developer/public/safari-pinned-tab.svg +1 -0
  590. data/lib/nexmo_developer/public/symbol/volta-brand-icons.svg +1 -0
  591. data/lib/nexmo_developer/public/symbol/volta-icons.svg +1 -0
  592. data/lib/nexmo_developer/vendor/assets/javascripts/.keep +0 -0
  593. data/lib/nexmo_developer/vendor/assets/javascripts/jquery-scrolltofixed.js +567 -0
  594. data/lib/nexmo_developer/vendor/assets/javascripts/mermaid.js +49 -0
  595. data/lib/nexmo_developer/vendor/assets/javascripts/underscore.js +5 -0
  596. data/lib/nexmo_developer/vendor/assets/javascripts/volta/addons/jquery.tablesorter.js +1031 -0
  597. data/lib/nexmo_developer/vendor/assets/javascripts/volta/addons/prism.js +22 -0
  598. data/lib/nexmo_developer/vendor/assets/javascripts/volta/components/side-navigation/volta.menu.js +377 -0
  599. data/lib/nexmo_developer/vendor/assets/javascripts/volta/components/volta.accordion.js +249 -0
  600. data/lib/nexmo_developer/vendor/assets/javascripts/volta/components/volta.dropdown.js +145 -0
  601. data/lib/nexmo_developer/vendor/assets/javascripts/volta/components/volta.flash.js +175 -0
  602. data/lib/nexmo_developer/vendor/assets/javascripts/volta/components/volta.modal.js +312 -0
  603. data/lib/nexmo_developer/vendor/assets/javascripts/volta/components/volta.tab.js +203 -0
  604. data/lib/nexmo_developer/vendor/assets/javascripts/volta/components/volta.tooltip.js +71 -0
  605. data/lib/nexmo_developer/vendor/assets/javascripts/volta/popper.min.js +5 -0
  606. data/lib/nexmo_developer/vendor/assets/javascripts/volta/svgxuse.min.js +12 -0
  607. data/lib/nexmo_developer/vendor/assets/javascripts/volta/tooltip.min.js +5 -0
  608. data/lib/nexmo_developer/vendor/assets/javascripts/volta/volta.core.js +238 -0
  609. data/lib/nexmo_developer/vendor/assets/javascripts/volta/volta.js +2141 -0
  610. data/lib/nexmo_developer/vendor/assets/javascripts/volta/volta.min.js +1 -0
  611. data/lib/nexmo_developer/vendor/assets/stylesheets/.keep +0 -0
  612. data/lib/nexmo_developer/version.rb +3 -0
  613. data/package.json +124 -0
  614. data/station.gemspec +94 -42
  615. data/yarn.lock +13943 -0
  616. metadata +1888 -55
  617. data/.document +0 -5
  618. data/Rakefile +0 -61
  619. data/VERSION +0 -1
  620. data/lib/station.rb +0 -3
@@ -0,0 +1,420 @@
1
+ ---
2
+ title: Markdown Guide
3
+ navigation_weight: 3
4
+ ---
5
+
6
+ ⚓ Anchor Example
7
+
8
+ # Markdown Guide
9
+
10
+ Here is a complete overview of the basic markdown and custom plugins that Nexmo Developer supports.
11
+
12
+ We use plugins sparingly to extend functionality where the only other option would be HTML.
13
+
14
+ You can find this document in `/app/views/contribute/guides/markdown-guide.md`. The side navigation has been left present to be an accurate representation of the content width.
15
+
16
+ There is no markdown syntax in here as this document is rendered with the same engine and no support exists for escaping Markdown. Examples would ultimately be rendered. To understand recursion you must first understand recursion.
17
+
18
+ ## Metadata
19
+
20
+ The first part of a Markdown file includes metadata similar to the following:
21
+
22
+ ```
23
+ ---
24
+ title: Markdown Guide
25
+ navigation_weight: 3
26
+ ---
27
+ ```
28
+
29
+ The purpose of the metadata is to provide useful information in the following areas:
30
+
31
+ * Algolia search results (that is when you search in NDP)
32
+ * Google (and other external search engine) search results
33
+ * Information for the navbar (also sometimes called the table of contents or TOC)
34
+
35
+ The meta data items that can be used are described in the following table:
36
+
37
+ Metadata | HTML generated | Description
38
+ ----|----|----
39
+ `title` | N/A | This is the title for the topic that will be displayed in the navbar. This main be different to that display at the top of the topic. It is displayed in the Algolia search results when you search NDP.
40
+ `description` | N/A | This is the short description for the topic. It is displayed in the Algolia search results when you search NDP. It should indicate the nature of the content of the topic.
41
+ `meta_title` | `<head><title>The title</title>...</head>` | Used for SEO in external search engine results. This should be more descriptive than the `title` to provide additional context in the absence of the navbar. [Further reading](https://moz.com/learn/seo/title-tag).
42
+ `meta_description` | `<head><meta name="description" content="The description">...</head>` | Used in external search engine results. Provides SEO. Should be no more than 160 characters. [Further reading](https://moz.com/learn/seo/meta-description).
43
+ `navigation_weight` | N/A | A hint to position the topic in the navbar where a particular position is preferred. The lower the number used the higher in the navbar the item will appear. Overrides information defined in `config/navigation.yml`. In most cases you only need to add a `navigation_weight` item if your topic is not automatically displayed in your preferred position in the navbar.
44
+
45
+ ### Example
46
+
47
+ The following shows an example of metadata use:
48
+
49
+ ```
50
+ ---
51
+ title: Overview
52
+ description: An overview of the Vonage Voice API.
53
+ meta_title: Text-To-Speech, IVR, Call Recording and more with the Vonage Voice API.
54
+ meta_description: The Vonage Voice API is the easiest way to build high-quality voice applications in the Cloud.
55
+ navigation_weight: 1
56
+ ---
57
+ ```
58
+
59
+ ### Writing an effective `title`
60
+
61
+ When using `title` bear in mind that while something like "Overview" may be fine for the navbar (as the navbar provides positional context), that would not be very informative in the title of a search result. Sometimes you would see `title` as Overview, but supplement that with a `meta_title` of "Vonage Voice API Overview" for clarity in external search engine search results.
62
+
63
+ Ideally task (step) or other active topics should include a gerund. For example:
64
+
65
+ * Installing the Vonage Command Line Interface (CLI)
66
+
67
+ Topics providing reference information would have a noun-based title, for example:
68
+
69
+ * The Conversation object
70
+
71
+ To provide greater context in external search results a corresponding `meta_title` might contain much more specific information, for example:
72
+
73
+ * The Vonage Conversation API Conversation object
74
+
75
+ ### Writing an effective `description`
76
+
77
+ `description` is used in search results when you search on NDP. The description should be written to give the user a clear idea of the purpose on the topic, as in many cases it will not be possible to determine the content of a topic from `title` alone.
78
+
79
+ ### Writing an effective `meta_title`
80
+
81
+ This appears in external search engine results. While navbar titles such as "Overview" might be fine for the navbar (as the navbar provides positional context) this would not be very information in search engine results. `meta_title` could then be set to something that clearly indicates the content of the topic in the external search engine context. You can read more information about how `meta_title` is leveraged by search engines on [this page](https://moz.com/learn/seo/meta-title).
82
+
83
+ ### Writing an effective `meta_description`
84
+
85
+ `meta_description` is used by external search engines. It provide SEO for external engines. It is an opportunity to create an information description containing important key words. You can read more information about how `meta_description` is leveraged by search engines on [this page](https://moz.com/learn/seo/meta-description).
86
+
87
+ ## Typography
88
+
89
+ **Headings**
90
+
91
+ # I am a H1
92
+ ## I am a H2
93
+ ### I am a H3
94
+
95
+ > Custom extension: Headings have their own slugified ID's for deep linking. For example the `h1` has an ID of `i-am-a-h1`
96
+
97
+ **Paragraphs**
98
+
99
+ Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Donec id elit non mi porta gravida at [eget metus](#). Vestibulum id ligula porta felis euismod semper. Donec id elit non mi porta gravida at eget metus. Cras mattis consectetur purus sit amet fermentum. Sed posuere consectetur est at lobortis.
100
+
101
+ **Inline styles**
102
+
103
+ Text can be **bold**, *italic* or ***bold and italic***. You could use ~~strikethrough~~ but please don't.
104
+
105
+ You can define inline `code block` with backticks.
106
+
107
+ This is a [link](http://google.com) to Google.
108
+
109
+ > **Note**: You can use a `>` to specify a blockquote. We use these for tips like this.
110
+
111
+ **Labels**
112
+
113
+ You can have [labels].
114
+
115
+ They auto-magically color when you use verbs like [POST] or [DELETE]
116
+
117
+ **Collapsible Content (custom plugin)**
118
+
119
+ | ### Click me
120
+ |
121
+ | Here is some hidden content.
122
+ |
123
+ | Markdown _still_ works `here`!
124
+ |
125
+ | Nullam id dolor id nibh ultricies vehicula ut id elit. Donec ullamcorper nulla non metus auctor fringilla. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.
126
+
127
+ | ### Alpha
128
+ |
129
+ | Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Donec id elit non mi porta gravida at eget metus. Sed posuere consectetur est at lobortis. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ullamcorper nulla non metus auctor fringilla.
130
+ |
131
+ | Donec id elit non mi porta gravida at eget metus. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Nulla vitae elit libero, a pharetra augue. Donec sed odio dui. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Cras mattis consectetur purus sit amet fermentum.
132
+ |
133
+ | Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Donec id elit non mi porta gravida at eget metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean lacinia bibendum nulla sed consectetur. Nullam quis risus eget urna mollis ornare vel eu leo.
134
+
135
+ **Tooltips (custom plugin)**
136
+
137
+ Find out ^[more](Tooltips are useful for when you have more information to convey, but don't want to break context.).
138
+
139
+ ## Images
140
+
141
+ ![Please always add alt-text](https://media.giphy.com/media/pDTLSpqNvNxlu/giphy.gif)
142
+
143
+ > Images should be used sparingly, try to avoid using screenshots that might go out of date.
144
+ >
145
+ > Also... Please ALWAYS write descriptive alt text.
146
+
147
+ ## Lists
148
+
149
+ **Unordered Lists**
150
+
151
+ > List items have `*` in front of them.
152
+ >
153
+ > Indentations are 4 spaces.
154
+
155
+ * Alpha
156
+ * Bravo
157
+ * Charlie
158
+ * Delta
159
+ * Echo
160
+ * Foxtrot
161
+ * Golf
162
+
163
+ **Ordered Lists**
164
+
165
+ > List items have `1.`, `2.`, `3.` etc in front of them.
166
+ >
167
+ > Indentations are 4 spaces.
168
+
169
+ 1. One
170
+ 2. Two
171
+ 1. Three
172
+ 2. Four
173
+ 1. Five
174
+ 1. Six
175
+ 3. Seven
176
+
177
+ ## Code
178
+
179
+ See our detailed [code examples guide](/contribute/guides/code-examples) for advice on including code.
180
+
181
+ ## Tables
182
+
183
+ > Pipes should only be between cells. Two hyphens `--` should be used to 'underline' the headings.
184
+ >
185
+ > You'll have to view the `markdown-guide.md` source to see how since showing you the syntax would result in it being processed.
186
+
187
+ Key | Description
188
+ -- | --
189
+ `TO_NUMBER` | The number you are sending the SMS to
190
+ `API_KEY` | You can find this in your [account overview](https://dashboard.nexmo.com/account-overview)
191
+ `API_SECRET` | You can find this in your [account overview](https://dashboard.nexmo.com/account-overview)
192
+
193
+ ## Tabbed Content (custom plugin)
194
+
195
+ To use the tabbed content block, add a section like this to your markdown to point out where the directory holding the examples is:
196
+
197
+ ````
198
+ ```tabbed_content
199
+ source: '/_examples/styleguide/tabbed-content'
200
+ ```
201
+ ````
202
+
203
+ Each file becomes a tab, as you can see:
204
+
205
+ ```tabbed_content
206
+ source: '/_examples/styleguide/tabbed-content'
207
+ ```
208
+
209
+ ## Tabbed folder (custom plugin)
210
+
211
+ Tabbed folders provide a convenient method for automatically tabbing a collection of content contained in a folder.
212
+
213
+ You can create tabbed content using a tabbed folder configuration file, along with the content to be tabbed, all organized in the same folder. You would create a configuration file, `.config.yml`, in the folder, and then create the markdown documents to be tabbed in the same folder.
214
+
215
+ You can see an example of what this looks like [here](/client-sdk/setup/add-sdk-to-your-app).
216
+
217
+ Config file, `.config.yml`, would contain metadata such as the following:
218
+
219
+ ```
220
+ ---
221
+ title: Add Client SDK to your application
222
+ description: How to add the Client SDK to your application.
223
+ navigation_weight: 2
224
+ tabbed: true
225
+ ---
226
+ ```
227
+
228
+ Note that `tabbed` is set to `true` for tabbed folder content.
229
+
230
+ Example files can be found in the folder `_documentation/en/client-sdk/setup/add-sdk-to-your-app`:
231
+
232
+ * `.config.yml`
233
+ * `android.md`
234
+ * `ios.md`
235
+ * `javascript.md`
236
+
237
+ The rendered output can be found [here](/client-sdk/setup/add-sdk-to-your-app/javascript).
238
+
239
+ ## Mermaid (custom plugin)
240
+
241
+ You can use any [Mermaid](https://mermaidjs.github.io/) diagram using the `mermaid` filter.
242
+
243
+ ````
244
+ ```mermaid
245
+ graph TD;
246
+ A-->B;
247
+ A-->C;
248
+ B-->D;
249
+ C-->D;
250
+ ```
251
+ ````
252
+
253
+ Creates a diagram like this:
254
+
255
+ ```mermaid
256
+ graph TD;
257
+ A-->B;
258
+ A-->C;
259
+ B-->D;
260
+ C-->D;
261
+ ```
262
+
263
+ Some common diagrams e.g. sequence diagrams may have specific extensions, so keep reading!
264
+
265
+ ## Sequence Diagram (custom plugin, using Mermaid)
266
+
267
+ Our sequence diagrams are simple markup that is rendered to a graphical representation by a custom plugin. Starting with code like this:
268
+
269
+ ````
270
+ ```sequence_diagram
271
+ Andrew->China: Says Hello
272
+ Note right of China: China thinks\nabout it
273
+ China-->Andrew: How are you?
274
+ Andrew->>China: I am good thanks!
275
+ ```
276
+ ````
277
+
278
+ Creates the following diagram:
279
+
280
+ ```sequence_diagram
281
+ Andrew->China: Says Hello
282
+ Note right of China: China thinks\nabout it
283
+ China-->Andrew: How are you?
284
+ Andrew->>China: I am good thanks!
285
+ ```
286
+
287
+ ## Languages (custom plugin)
288
+
289
+ Inline [IETF language tag](https://en.wikipedia.org/wiki/IETF_language_tag) support, using both primary language tags and subtags, is provided using the following syntax.
290
+
291
+ Language | Key | Text
292
+ -- | -- | --
293
+ English | none | Hello World
294
+ Spanish | `es` | [Hola Mundo](lang: 'es')
295
+ French | `fr` | [Bonjour le monde](lang: 'fr')
296
+ Brazilian Portuguese | `pt-BR` | [Olá Mundo](lang: 'pt-BR')
297
+ Hebrew | `il` | [שלום עולם](lang: 'il')
298
+
299
+ ## Anchors (custom plugin)
300
+
301
+ Adding custom anchors and retaining support for old headings can be done as such:
302
+
303
+ ````
304
+ ⚓ This is the old heading
305
+ ````
306
+
307
+ This would produce the following HTML:
308
+
309
+ ```html
310
+ <a name="this-is-the-old-heading"></a>
311
+ ```
312
+
313
+ If you are adding support for a changed header this would normally go above the old heading as such:
314
+
315
+ ````
316
+ ⚓ Send with Short Message Service
317
+ ⚓ Send with SMS
318
+
319
+ # Sending an SMS
320
+ ````
321
+
322
+ ### Example
323
+
324
+ [Go to the anchor](#anchor-example). I've placed at the top of this document.
325
+
326
+ ## Screenshots
327
+
328
+ Webpage screenshots can be scripted so that they only require sourcing once. Define a screenshot as such:
329
+
330
+ ````
331
+ ```screenshot
332
+ script: app/screenshots/webhook-url-for-delivery-receipt.js
333
+ ```
334
+ ````
335
+
336
+ Run the following command:
337
+
338
+ ```
339
+ $ rake screenshots:new
340
+ ```
341
+
342
+ This changes the original source document to add an `image` value pointing to the screenshot:
343
+
344
+ ````
345
+ ```screenshot
346
+ script: app/screenshots/webhook-url-for-delivery-receipt.js
347
+ image: public/assets/screenshots/da5f952d465355c19eb888fa1049844b31e090c2.png
348
+ ```
349
+ ````
350
+
351
+ You can also update all examples by running the following command:
352
+
353
+ ```
354
+ $ rake screenshots:all
355
+ ```
356
+
357
+ Here is the example of the final rendered output:
358
+
359
+ ```screenshot
360
+ script: app/screenshots/webhook-url-for-delivery-receipt.js
361
+ image: public/assets/screenshots/da5f952d465355c19eb888fa1049844b31e090c2.png
362
+ ```
363
+
364
+ ## Audio (custom plugin)
365
+
366
+ The HTML `<audio>` element can be utilised in Markdown with the following syntax:
367
+
368
+ ````
369
+ 🔈[https://developer.nexmo.com.s3.amazonaws.com/assets/ssml/06-phonemes.mp3]
370
+ ````
371
+
372
+ This produces the following output:
373
+
374
+ 🔈[https://developer.nexmo.com.s3.amazonaws.com/assets/ssml/06-phonemes.mp3]
375
+
376
+ ## Dynamic content
377
+
378
+ You can use syntax such as:
379
+
380
+ ````
381
+ Welcome to [~dynamic_content_example~]
382
+ ````
383
+
384
+ This will render as:
385
+
386
+ Welcome to [~dynamic_content_example~]
387
+
388
+ ## Concept list (custom plugin)
389
+
390
+ If you need to produce a list of concepts (also known as guides) on a page, you can specify a product and have it render an unstyled `<ul>`
391
+
392
+ ````
393
+ ```concept_list
394
+ product: voice/voice-api
395
+ ```
396
+ ````
397
+
398
+ This produces the following output:
399
+
400
+ ```concept_list
401
+ product: voice/voice-api
402
+ ```
403
+
404
+ Alternatively, you can specify the concepts to list manually if you need to show a subset of concepts, or concepts from multiple different products:
405
+
406
+ ````
407
+ ```concept_list
408
+ concepts:
409
+ - voice/voice-api/call-flow
410
+ - messaging/sms/delivery-receipts
411
+ ```
412
+ ````
413
+
414
+ This produces the following output:
415
+
416
+ ```concept_list
417
+ concepts:
418
+ - voice/voice-api/call-flow
419
+ - messaging/sms/delivery-receipts
420
+ ```
@@ -0,0 +1,220 @@
1
+ ---
2
+ title: Platform
3
+ navigation_weight: 7
4
+ ---
5
+
6
+ # Platform
7
+
8
+ This document provides some insight into the inner-workings of Nexmo Developer as platform and where various resources can be found.
9
+
10
+ ## Contents
11
+
12
+ - [Contents](#contents)
13
+ - [Icons](#icons)
14
+ - [Navigation Text](#navigation-text)
15
+ - [Pages and content](#pages-and-content)
16
+ - [OpenAPI Pages](#openapi-pages)
17
+ - [Admin](#admin)
18
+ - [Search](#search)
19
+ - [Non-Markdown pages](#non-markdown-pages)
20
+ - [Team listing](#team-listing)
21
+ - [Markdown Pipeline](#markdown-pipeline)
22
+ - [Filters](#filters)
23
+ - [Webpack](#webpack)
24
+ - [Hosting](#hosting)
25
+ - [Redirects](#redirects)
26
+ - [Notices](#notices)
27
+ - [Site wide](#site-wide)
28
+ - [Section Specific (non-dismissible)](#section-specific-non-dismissible)
29
+ - [Code Examples](#code-examples)
30
+
31
+ ## Icons
32
+
33
+ Icons are turned into fonts using a tool called [Icomoon](https://icomoon.io/app/).
34
+
35
+ We use a mixture of custom icons and ones made available by the packs, a backup file should be maintained so that icons can be added, removed and edited by anybody. You can find the most recent backup file at `/app/assets/fonts/nexmo-developer.json`.
36
+
37
+ ## Navigation Text
38
+
39
+ The navigation is generated from the file structure of the `/_documentation` folder. The documents get their titles from the front-matter within the Markdown files themselves for example the file at `/_documentation/messaging/sms/code-snippets/send-an-sms.md` has the following front-matter:
40
+
41
+ ```
42
+ ---
43
+ title: Send an SMS
44
+ navigation_weight: 1
45
+ ---
46
+ ```
47
+
48
+ The `title` is used for both the meta `<title>` and also the navigation text.
49
+
50
+ The `navigation_weight` is used to force the order of the page within the navigation in relation to its siblings. By default pages are ordered Alphabetically by giving pages weights this default can be overridden.
51
+
52
+ Folders however don't have any document that could provide front-matter so these care configured by a configuration YAML documents:
53
+
54
+ Document | Description
55
+ --- | ---
56
+ `/config/locales/en.yml` | This file translates the directory name into the display name. For example `in-app-messaging` to `In-app Messaging`.
57
+ `/config/navigation.yml` | This file provides the `navigation_weight` for directories so that products or content types can be placed in a defined order.
58
+
59
+ > **NOTE**: Complex ordering or navigation items that share a display name.
60
+ >
61
+ > §
62
+ >
63
+ > The ordering is a flat lookup of the name. This can cause issues if two different orderings are required relating to two or more menu items with the same name. An example of this is that at the time of writing this Concepts sits as the very first and top-most element. If a product was to need a concepts section this would be forced to the top the product tree since they would both share a common name.
64
+ >
65
+ > §
66
+ >
67
+ > Although this specific issue hasn't been addressed some work has been made towards having a tree based overrides, this could allow an individual item to be overridden by specifying it's location within the document hirearchy. You can see the start of this work under `navigation_overrides` within the `/config/navigation.yml` file.
68
+
69
+ ## Pages and content
70
+
71
+ Documentation pages can be created by creating a new Markdown file for the content within the `/_documentation` directory hierarchy. For existing products adding the file is sufficient enough to create new content. To create documentation for new products however requires a small update to the `DocumentationConstraint`.
72
+
73
+ You can find this at `/app/constraints/documentation_constraint.rb`. The `product` and `product_with_parent` methods supply a hash of constraints back to the router so that context can be inferred by the application. Any new products should be added to this list.
74
+
75
+ <a name="open-api-pages" />
76
+ ## OpenAPI Pages
77
+
78
+ API pages use a custom OpenAPI parser and renderer. The parser belongs to a separate dependency you can find at [https://github.com/nexmo/oas_parser](https://github.com/nexmo/oas_parser). The rendering is provided by views that can be found at `/app/views/open_api/`.
79
+
80
+ Each of the OpenAPI pages consumes an OpenAPI Specification 3 definition for that API. These are held in a separate repo <https://github.com/Nexmo/api-specification> and are brought into NDP as a git submodule.
81
+
82
+ The parser has been built in such a way that it has tested against several OAS definitions however full compatibility with the specification shouldn't be assumed and development work may be required to support new features as they are authored within our definitions.
83
+
84
+ ## Admin
85
+
86
+ Our Admin panel uses a framework called [Active Admin](https://github.com/activeadmin/activeadmin). It is used to manage:
87
+
88
+ - Events
89
+ - Job listings
90
+ - Feedback
91
+ - Authors
92
+ - Resources
93
+ - Feedbacks
94
+ - Admin Users
95
+
96
+ You should refer to the [Active Admin Docs](https://activeadmin.info/documentation.html) for any information regarding customisation.
97
+
98
+ ## Search
99
+
100
+ Our search is powered by [Algolia](https://www.algolia.com/). There are indices for development, staging (including review apps) and production.
101
+
102
+ The indices are automatically refreshed on each deployment by the `refresh` Rake task. There are three Rake tasks available for performing search actions:
103
+
104
+ ```
105
+ rake search_terms:algolia:clear # Clear the index in Algolia
106
+ rake search_terms:algolia:generate # Publish search terms to Algolia
107
+ rake search_terms:algolia:refresh # Refresh the Algolia index
108
+ ```
109
+
110
+ Searching is performed directly from the client to Algolia. Protected resources such as restricting the indices or filtering items from the knowlegebase are handled by using [Algolia's Secured API Keys](https://www.algolia.com/doc/tutorials/security/api-keys/secured-api-keys/how-to-restrict-the-search-to-a-subset-of-records-belonging-to-a-specific-user/) functionality.
111
+
112
+ The configuration object that configures the secured API key can be found in the `ALGOLIA_CONFIG` environment variable or for easier local development the `/config/algolia.yml.example` file can be renamed to `/config/algolia.yml`.
113
+
114
+ ## Non-Markdown pages
115
+
116
+ Some pages including the landing, tools and community pages are not Markdown pages since they usually have more complicated layouts or database concerns.
117
+
118
+ Many of these are handled by the `StaticController`, however you can find out which controller and action is handling a particular page by running:
119
+
120
+ ```
121
+ $ rails routes
122
+ ```
123
+
124
+ ## Team listing
125
+
126
+ The [team page](/team) lists members that are defined in the `/config/team.yml` file. Avatars are pulled from [Gravatar](http://en.gravatar.com/) giving individuals an easy way to choose their image. Lastly, the role defaults to `Developer Advocate` unless provided within the configuration.
127
+
128
+ > **Tip**: Getting new hires to add themselves onto the team page is a great way to get them setup with the basics of Nexmo Developer, process and to become familiar with deployments.
129
+
130
+ ## Markdown Pipeline
131
+
132
+ Nexmo Developer has a powerful Markdown pipeline that adds additional support to Markdown providing some tools that support technical writing.
133
+
134
+ Here is a video to help explain this concept starts at 6 minutes, 58 seconds:
135
+
136
+ <iframe width="854" height="480" src="https://www.youtube.com/embed/AnvqMb1VT40?t=456" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
137
+
138
+ ### Filters
139
+
140
+ Here is a quick explanation of all of the filters:
141
+
142
+ Filter | Current User Context | Type | Description
143
+ --- | --- | --- | ---
144
+ Frontmatter | No | [Implicit] | Strips frontmatter from documents
145
+ PHPInliner | No | [Implicit] | Fixes a quirk with our code parser that requires PHP code to have `<?php` at the start. This filter adds an option onto PHP code examples that makes this not required.
146
+ InlineEscape | No | [Extended] | Allows for escaping of inline code where normally the internals would be processes by the markdown. For example this isn't turned into a ``[label]`` when surrounded by two backticks.
147
+ BlockEscape | No | [Extended] | Allows for escaping of code fences where normally the internals would be processes by the markdown.
148
+ Screenshot | No | [Plugin] | Allows for screenshots be put into documentation that are captured by a headless browser so they can be easily refreshed.
149
+ Anchor | No | [Extended] | Useful for when a title changes, an explicit anchor can be added and renders a non-visible anchor link to the same content.
150
+ Audio | No | [Extended] | Used to embed audio examples using the `<audio>` element.
151
+ Tooltip | No | [Extended] | Allows for ^[Toolips](Hello world!) to be added with a markdown-style syntax.
152
+ Collapsible | No | [Extended] | Allows for collapsible and expandable content to be added with a markdown-style syntax.
153
+ TabbedExamplesFilter | Yes | [Plugin] | Pulls in code examples into multiple tabs.
154
+ TabbedContentFilter | Yes | [Plugin] | Renders markdown files into multiple tabs.
155
+ Code | No | [Plugin] | Allows for code to be pulled in as a partial.
156
+ Indent | No | [Extended] | Adds an indentation to text with a markdown-style syntax.
157
+ Modal | No | [Extended] | Adds a link that launches a modal loaded from another markdown file by using a markdown-style syntax.
158
+ JsSequenceDiagram | No | [Extended] | Adds [JS Sequence Diagrams](https://bramp.github.io/js-sequence-diagrams/) rendering in Markdown.
159
+ Partial | No | [Plugin] | Pull in another markdown file. Good for content reuse.
160
+ Techio | No | [Extended] | Pull in a [Tech.io](https://tech.io) playground widget into the document.
161
+ Tutorials | No | [Plugin] | Pull in cars linking to tutorials into the markdown document.
162
+ Language | No | [Extended] | Wraps content into a span with a `lang` attribute by using a markdown-style syntax.
163
+ Columns | No | [Extended] | Allows for basic column layout by using a markdown-style syntax.
164
+ Markdown | No | - | Converts markdown to HTML
165
+ UserPersonalizationFilter | Yes | [Implicit] | Replaces specific keywords with a logged in users values. Can be used to inject credentials into code examples
166
+ Heading | No | [Implicit] | Automatically adds parameterized id to heading items avoiding conflicts.
167
+ Label | No | [Extended] | Adds support for [labels] by using square brackets as such ``[labels]``.
168
+ Break | No | [Extended] | Allows for breaks to be added using the ``§`` symbol. Great for § adding § new § lines § where it would normally be difficult in markdown such as in tables.
169
+ Unfreeze | No | [Implicit] | Supports several other filters that Base64 their output to prevent manipulation by other filters especially the MarkdownFilter from changing any further.
170
+ Icon | No | [Implicit] | Changes emoji into nice icons.
171
+ ExternalLink | No | [Implicit] | Automatically adds an icon and `target="blank"` to links that go off-site such as [Google](https://google.com).
172
+
173
+ ## Webpack
174
+
175
+ We use [Webpacker](https://github.com/rails/webpacker) to handle JavaScript in webpack with Ruby on Rails. We use the React integration with this tool.
176
+
177
+ The JavaScript file that is loaded can be found at `/app/javascript/packs/application.js`.
178
+
179
+ Any further information on how to consume or configure this can be found in [Webpacker Usage Guide](https://github.com/rails/webpacker#usage)
180
+
181
+ ## Hosting
182
+
183
+ Nexmo Developer is hosted on Heroku which auto-deploys any changes to the `master` branch on the [public repo](https://github.com/nexmo/nexmo-developer).
184
+
185
+ The EA site automatically deploys from the `private/ea` branch on the [private repo](https://github.com/nexmo/nexmo-developer-private).
186
+
187
+ Review apps can be created from the Heroku Dashboard, auto-deployment should not be enabled since it could cause a security concern if an outside authors code that dumps `ENV` variables to HTML or externally.
188
+
189
+ ## Redirects
190
+
191
+ When a documentation page is not found the `Redirector` service is invoked to see if a redirection can be found. If it can it issues a redirection to the client otherwise the `404 Not Found` page is rendered.
192
+
193
+ ## Notices
194
+
195
+ Notices can be added site-wide or on specific routes. Here are examples of implementing this:
196
+
197
+ ### Site wide
198
+
199
+ ```yaml
200
+ some-unique-id:
201
+ content: |-
202
+ <h4>Welcome to Nexmo Developer</h4>
203
+ <p>We are improving our Documentation, API references, learning resources & tooling to help you more effectively use our services. We want to help you find everything you need to integrate Nexmo APIs into your code.</p>
204
+ <p>As we start this transition, we’d love to hear from you with thoughts & suggestions. If you’ve got something, positive or negative, to tell us, please tell us using the feedback tool at the bottom of each guide or <a href="https://github.com/Nexmo/nexmo-developer/issues/new">file an issue</a> on GitHub. - Nexmo</p>
205
+ ```
206
+
207
+ ### Section Specific (non-dismissible)
208
+
209
+ ```yaml
210
+ another-inique-id:
211
+ dismissible: false
212
+ path: '^\/(api\/)?new-product'
213
+ content: |-
214
+ <h4>Welcome to the Developer Preview for New Product</h4>
215
+ <p>If you are interested in participating, have any questions, or feedback you can email us at <a href="mailto:support@nexmo.com">support@nexmo.com</a>.</p>
216
+ ```
217
+
218
+ ## Code Examples
219
+
220
+ Code examples are often pulled in from other repositories using submodules - refer to the project `README` for more information.