nexmo_markdown_renderer 0.3.1 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/config/code_languages.yml +9 -0
  4. data/config/locales/en.yml +1 -0
  5. data/lib/nexmo_markdown_renderer.rb +10 -0
  6. data/lib/nexmo_markdown_renderer/filters/code_snippet/binding.rb +41 -0
  7. data/lib/nexmo_markdown_renderer/filters/code_snippet/create_application.rb +61 -0
  8. data/lib/nexmo_markdown_renderer/filters/code_snippet/import_dependencies.rb +38 -0
  9. data/lib/nexmo_markdown_renderer/filters/code_snippet/initialize_dependencies.rb +41 -0
  10. data/lib/nexmo_markdown_renderer/filters/code_snippet/install_dependencies.rb +39 -0
  11. data/lib/nexmo_markdown_renderer/filters/code_snippet/instructions.rb +46 -0
  12. data/lib/nexmo_markdown_renderer/filters/code_snippet/renderable.rb +64 -0
  13. data/lib/nexmo_markdown_renderer/filters/code_snippet/run.rb +29 -0
  14. data/lib/nexmo_markdown_renderer/filters/code_snippet_filter.rb +22 -159
  15. data/lib/nexmo_markdown_renderer/filters/code_snippets_filter.rb +2 -1
  16. data/lib/nexmo_markdown_renderer/filters/markdown_filter.rb +3 -1
  17. data/lib/nexmo_markdown_renderer/filters/partial_filter.rb +1 -1
  18. data/lib/nexmo_markdown_renderer/filters/screenshot_filter.rb +1 -1
  19. data/lib/nexmo_markdown_renderer/filters/tab_filter.rb +5 -3
  20. data/lib/nexmo_markdown_renderer/filters/utils.rb +50 -0
  21. data/lib/nexmo_markdown_renderer/models/code_language.rb +7 -3
  22. data/lib/nexmo_markdown_renderer/services/code_snippet_renderer/android.rb +1 -1
  23. data/lib/nexmo_markdown_renderer/services/code_snippet_renderer/curl.rb +1 -1
  24. data/lib/nexmo_markdown_renderer/services/code_snippet_renderer/dotnet.rb +1 -1
  25. data/lib/nexmo_markdown_renderer/services/code_snippet_renderer/go.rb +23 -0
  26. data/lib/nexmo_markdown_renderer/services/code_snippet_renderer/java.rb +4 -3
  27. data/lib/nexmo_markdown_renderer/services/code_snippet_renderer/javascript.rb +1 -1
  28. data/lib/nexmo_markdown_renderer/services/code_snippet_renderer/kotlin.rb +1 -1
  29. data/lib/nexmo_markdown_renderer/services/code_snippet_renderer/objective_c.rb +1 -1
  30. data/lib/nexmo_markdown_renderer/services/code_snippet_renderer/php.rb +1 -1
  31. data/lib/nexmo_markdown_renderer/services/code_snippet_renderer/python.rb +1 -1
  32. data/lib/nexmo_markdown_renderer/services/code_snippet_renderer/ruby.rb +1 -1
  33. data/lib/nexmo_markdown_renderer/services/doc_finder.rb +2 -2
  34. data/lib/nexmo_markdown_renderer/views/code_snippets/_application_rtc.html.erb +1 -1
  35. data/lib/nexmo_markdown_renderer/views/code_snippets/_application_voice.html.erb +1 -1
  36. data/lib/nexmo_markdown_renderer/views/code_snippets/_configure_client.html.erb +2 -2
  37. data/lib/nexmo_markdown_renderer/views/code_snippets/_import_dependencies.html.erb +18 -0
  38. data/lib/version.rb +1 -1
  39. metadata +14 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 746e034b9ef6f00f3004f92196e71c3b670cc677f931fa67cdf42252620fdc37
4
- data.tar.gz: 680b76bcce7a745ee748cb4e6a5db8d2724a2727271651179a18d43dee0a1701
3
+ metadata.gz: e3f2fe624417d3d2acb266f3231d0155449c65c898f8be479dac44ad3e102ca8
4
+ data.tar.gz: acd7954ba9497e2eb70ab42593399492fd35142f35e02736daa7ed8a31cab97c
5
5
  SHA512:
6
- metadata.gz: 10cfc564ff9a5544f522fcd98a77afdae52c9140846ae199db099615218ccc8be61360f27ba1c73b46fb0326c4a613ddf625b7bef19df45ba5564a022c1fb1ad
7
- data.tar.gz: 31bd733108f5ebcb4608cc9bfbd7b7669902ce66cc94a922abd58a7819c6843d082a710307920efd1450b6b737b53490bcdf5c7f34ead2e07c9d2bdcb704618c
6
+ metadata.gz: 342774f31333d182961bdb3ccc58478f5565795d42b916de02963167d16b688ebe0816f167f0c31ace9d63c8528cc60a33366c826a00c9c7687f207b074eb5d3
7
+ data.tar.gz: abbd6f026b698bd3ca5bf8db2c28139403e28a3198426d23c804c7dd8668c747dcee0a9a113020f777ca2ee685ec3a7a70d32c2bd472e9cbff3c4dbdda1af61c
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Nexmo Markdown Renderer
2
2
 
3
- [![Build Status](https://api.travis-ci.org/Nexmo/nexmo-markdown-renderer.svg?branch=master)](https://travis-ci.org/Nexmo/nexmo-markdown-renderer/)
3
+ ![Build Status](https://github.com/Nexmo/nexmo-markdown-renderer/workflows/CI/badge.svg)
4
4
  [![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE.txt)
5
5
 
6
6
  This gem facilitates the presentation of markdown documents in a Rails app by applying custom filters for tabs, code snippets, icons, indentation and more. It is used in the [Nexmo Developer Platform](https://developer.nexmo.com).
@@ -109,6 +109,15 @@ languages:
109
109
  icon: ios
110
110
  dependencies: []
111
111
 
112
+ go:
113
+ weight: 12
114
+ label: Go
115
+ lexer: go
116
+ icon: curl
117
+ dependencies:
118
+ - 'vonage/vonage-go-sdk'
119
+ run_command: 'go run {filename}'
120
+
112
121
  platforms:
113
122
  ios:
114
123
  languages:
@@ -129,6 +129,7 @@ en:
129
129
  write_the_code: Write the code
130
130
  configure_client:
131
131
  initialize_dependencies: Initialize your dependencies
132
+ import_dependencies: Import dependencies
132
133
  application_messages_dispatch:
133
134
  no_application_html: 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>.
134
135
  application_rtc:
@@ -24,6 +24,7 @@ require_relative 'nexmo_markdown_renderer/services/code_snippet_renderer/php'
24
24
  require_relative 'nexmo_markdown_renderer/services/code_snippet_renderer/python'
25
25
  require_relative 'nexmo_markdown_renderer/services/code_snippet_renderer/ruby'
26
26
  require_relative 'nexmo_markdown_renderer/services/code_snippet_renderer/swift'
27
+ require_relative 'nexmo_markdown_renderer/services/code_snippet_renderer/go'
27
28
 
28
29
  require_relative 'nexmo_markdown_renderer/services/doc_finder'
29
30
  require_relative 'nexmo_markdown_renderer/services/doc_finder/doc'
@@ -38,6 +39,15 @@ require_relative 'nexmo_markdown_renderer/models/tutorial/prerequisite'
38
39
  require_relative 'nexmo_markdown_renderer/models/tutorial/task'
39
40
  require_relative 'nexmo_markdown_renderer/models/use_case'
40
41
 
42
+ require_relative 'nexmo_markdown_renderer/filters/code_snippet/binding'
43
+ require_relative 'nexmo_markdown_renderer/filters/code_snippet/renderable'
44
+ require_relative 'nexmo_markdown_renderer/filters/code_snippet/create_application'
45
+ require_relative 'nexmo_markdown_renderer/filters/code_snippet/initialize_dependencies'
46
+ require_relative 'nexmo_markdown_renderer/filters/code_snippet/instructions'
47
+ require_relative 'nexmo_markdown_renderer/filters/code_snippet/import_dependencies'
48
+ require_relative 'nexmo_markdown_renderer/filters/code_snippet/install_dependencies'
49
+ require_relative 'nexmo_markdown_renderer/filters/code_snippet/run'
50
+
41
51
  Dir[File.join(__dir__, 'nexmo_markdown_renderer/filters/concerns', '*.rb')].each { |file| require_relative file }
42
52
  Dir[File.join(__dir__, 'nexmo_markdown_renderer/filters', '*.rb')].each { |file| require_relative file }
43
53
  Dir[File.join(__dir__, 'nexmo_markdown_renderer/filters/i18n', '*.rb')].each { |file| require_relative file }
@@ -0,0 +1,41 @@
1
+ module Nexmo
2
+ module Markdown
3
+ module Filters
4
+ module CodeSnippet
5
+ class Binding
6
+ def initialize(config)
7
+ @config = config
8
+ end
9
+
10
+ def language
11
+ @language ||= @config['language']
12
+ end
13
+
14
+ def lexer
15
+ @lexer ||= Nexmo::Markdown::CodeLanguage.find(language).lexer
16
+ end
17
+
18
+ def lang
19
+ @lang ||= @config['title'].delete('.')
20
+ end
21
+
22
+ def unindent
23
+ @unindent ||= @config['unindent']
24
+ end
25
+
26
+ def file_name
27
+ @file_name ||= @config['file_name']
28
+ end
29
+
30
+ def source
31
+ @source ||= @config['source']
32
+ end
33
+
34
+ def import_dependencies?
35
+ @config['import_dependencies']
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,61 @@
1
+ module Nexmo
2
+ module Markdown
3
+ module Filters
4
+ module CodeSnippet
5
+ class CreateApplication
6
+ include Renderable
7
+
8
+ NGROK_URL = 'http://demo.ngrok.io'.freeze
9
+ EXAMPLE_URL = 'https://example.com'.freeze
10
+
11
+ attr_reader :app
12
+
13
+ def initialize(app)
14
+ @app = app
15
+ end
16
+
17
+ def base_url
18
+ @base_url ||= @app['disable_ngrok'] && EXAMPLE_URL || NGROK_URL
19
+ end
20
+
21
+ def name
22
+ @name ||= @app['name'] || 'ExampleProject'
23
+ end
24
+
25
+ def type
26
+ # We should remove this default once we're sure that all Code Snippets
27
+ # have a type set e.g audit
28
+ @type ||= @app.fetch('type', 'voice')
29
+ end
30
+
31
+ def event_url
32
+ @event_url ||= @app.fetch('event_url', "#{base_url}/webhooks/events")
33
+ end
34
+
35
+ def answer_url
36
+ @answer_url ||= @app.fetch('answer_url', "#{base_url}/webhooks/answer")
37
+ end
38
+
39
+ def partial
40
+ @partial ||= begin
41
+ case type
42
+ when 'voice', 'rtc'
43
+ File.read("#{GEM_ROOT}/lib/nexmo_markdown_renderer/views/code_snippets/_application_#{type}.html.erb")
44
+ when 'messages', 'dispatch'
45
+ File.read("#{GEM_ROOT}/lib/nexmo_markdown_renderer/views/code_snippets/_application_messages_dispatch.html.erb")
46
+ else
47
+ raise "Invalid application type when creating code snippet: '#{type}'"
48
+ end
49
+ end
50
+ end
51
+
52
+ def render
53
+ return '' unless @app
54
+
55
+ ERB.new(partial).result(binding)
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,38 @@
1
+ module Nexmo
2
+ module Markdown
3
+ module Filters
4
+ module CodeSnippet
5
+ class ImportDependencies
6
+ include OcticonsHelper
7
+ include Renderable
8
+
9
+ attr_reader :config
10
+
11
+ def initialize(config, snippet)
12
+ @config = config
13
+ @snippet = snippet
14
+ end
15
+
16
+ def partial
17
+ @partial ||= File.read("#{GEM_ROOT}/lib/nexmo_markdown_renderer/views/code_snippets/_import_dependencies.html.erb")
18
+ end
19
+
20
+ def highlighted_import_source
21
+ @highlighted_import_source ||= ::Nexmo::Markdown::Utils.generate_code_block(
22
+ language,
23
+ @config,
24
+ unindent
25
+ )
26
+ end
27
+
28
+ def render
29
+ return '' unless @config
30
+
31
+ create_instructions = renderer.create_instructions(file_name).render_markdown
32
+ ERB.new(partial).result(binding)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,41 @@
1
+ module Nexmo
2
+ module Markdown
3
+ module Filters
4
+ module CodeSnippet
5
+ class InitializeDependencies
6
+ include OcticonsHelper
7
+ include Renderable
8
+
9
+ def initialize(config, snippet)
10
+ @config = config
11
+ @snippet = snippet
12
+ end
13
+
14
+ def partial
15
+ @partial ||= File.read("#{GEM_ROOT}/lib/nexmo_markdown_renderer/views/code_snippets/_configure_client.html.erb")
16
+ end
17
+
18
+ def highlighted_client_source
19
+ @highlighted_client_source ||= ::Nexmo::Markdown::Utils.generate_code_block(
20
+ language,
21
+ @config,
22
+ unindent
23
+ )
24
+ end
25
+
26
+ def render
27
+ return '' unless @config
28
+
29
+ create_instructions = if import_dependencies?
30
+ renderer.add_instructions(file_name).render_markdown
31
+ else
32
+ renderer.create_instructions(file_name).render_markdown
33
+ end
34
+
35
+ ERB.new(partial).result(binding)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,39 @@
1
+ module Nexmo
2
+ module Markdown
3
+ module Filters
4
+ module CodeSnippet
5
+ class InstallDependencies
6
+ include Renderable
7
+
8
+ def initialize(config, version, snippet)
9
+ @config = config
10
+ @snippet = snippet
11
+ @version = version
12
+ end
13
+
14
+ def partial
15
+ @partial ||= File.read("#{GEM_ROOT}/lib/nexmo_markdown_renderer/views/code_snippets/_dependencies.html.erb")
16
+ end
17
+
18
+ def title
19
+ @title ||= begin
20
+ # The only valid dependency for curl examples is `JWT`
21
+ if @config.map(&:upcase).include?('JWT')
22
+ ::I18n.t('filters.generate_your_jwt')
23
+ else
24
+ ::I18n.t('filters.install_dependencies')
25
+ end
26
+ end
27
+ end
28
+
29
+ def render
30
+ return '' unless @config
31
+
32
+ deps = renderer.dependencies(@config, @version)
33
+ ERB.new(partial).result(binding)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,46 @@
1
+ module Nexmo
2
+ module Markdown
3
+ module Filters
4
+ module CodeSnippet
5
+ class Instructions
6
+ include OcticonsHelper
7
+ include Renderable
8
+
9
+ attr_reader :config
10
+
11
+ def initialize(config, snippet)
12
+ @config = config
13
+ @snippet = snippet
14
+ end
15
+
16
+ def partial
17
+ @partial ||= begin
18
+ if @config['code_only']
19
+ File.read("#{GEM_ROOT}/lib/nexmo_markdown_renderer/views/code_snippets/_code_only.html.erb")
20
+ else
21
+ File.read("#{GEM_ROOT}/lib/nexmo_markdown_renderer/views/code_snippets/_write_code.html.erb")
22
+ end
23
+ end
24
+ end
25
+
26
+ def highlighted_code_source
27
+ @highlighted_code_source ||= ::Nexmo::Markdown::Utils.generate_code_block(
28
+ language,
29
+ @config['code'],
30
+ unindent
31
+ )
32
+ end
33
+
34
+ def source_url
35
+ @source_url ||= ::Nexmo::Markdown::Utils.generate_source_url(@config['code'])
36
+ end
37
+
38
+ def render
39
+ add_instructions = renderer.add_instructions(file_name).render_markdown
40
+ ERB.new(partial).result(binding)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,64 @@
1
+ require 'forwardable'
2
+
3
+ module Nexmo
4
+ module Markdown
5
+ module Filters
6
+ module CodeSnippet
7
+ module Renderable
8
+ extend Forwardable
9
+
10
+ def_delegators :@snippet, :language, :lang, :renderer, :lexer, :unindent, :file_name, :source, :import_dependencies?
11
+
12
+ def id
13
+ @id ||= SecureRandom.hex
14
+ end
15
+
16
+ def client_url
17
+ @client_url ||= ::Nexmo::Markdown::Utils.generate_source_url(@config)
18
+ end
19
+
20
+ def renderer
21
+ case normalized_language
22
+ when 'curl'
23
+ Nexmo::Markdown::CodeSnippetRenderer::Curl
24
+ when 'node'
25
+ Nexmo::Markdown::CodeSnippetRenderer::Javascript
26
+ when 'javascript'
27
+ Nexmo::Markdown::CodeSnippetRenderer::Javascript
28
+ when 'java'
29
+ Nexmo::Markdown::CodeSnippetRenderer::Java
30
+ when 'dotnet'
31
+ Nexmo::Markdown::CodeSnippetRenderer::Dotnet
32
+ when 'python'
33
+ Nexmo::Markdown::CodeSnippetRenderer::Python
34
+ when 'ruby'
35
+ Nexmo::Markdown::CodeSnippetRenderer::Ruby
36
+ when 'php'
37
+ Nexmo::Markdown::CodeSnippetRenderer::Php
38
+ when 'android'
39
+ Nexmo::Markdown::CodeSnippetRenderer::Android
40
+ when 'kotlin'
41
+ Nexmo::Markdown::CodeSnippetRenderer::Kotlin
42
+ when 'objective_c'
43
+ Nexmo::Markdown::CodeSnippetRenderer::ObjectiveC
44
+ when 'swift'
45
+ Nexmo::Markdown::CodeSnippetRenderer::Swift
46
+ when 'go'
47
+ Nexmo::Markdown::CodeSnippetRenderer::Go
48
+ else
49
+ raise "Unknown language: #{normalized_language}"
50
+ end
51
+ end
52
+
53
+ def normalized_language
54
+ if language == 'csharp'
55
+ 'dotnet'
56
+ else
57
+ language
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,29 @@
1
+ module Nexmo
2
+ module Markdown
3
+ module Filters
4
+ module CodeSnippet
5
+ class Run
6
+ include OcticonsHelper
7
+ include Renderable
8
+
9
+ def initialize(config, snippet)
10
+ @config = config
11
+ @snippet = snippet
12
+ end
13
+
14
+ def run_command
15
+ @run_command ||= begin
16
+ if @config['run_command']
17
+ @config['run_command'].gsub('{filename}', file_name)
18
+ end
19
+ end
20
+ end
21
+
22
+ def render
23
+ renderer.run_command(run_command, file_name, @config['code']['source']).to_s
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -5,183 +5,46 @@ module Nexmo
5
5
 
6
6
  def call(input)
7
7
  input.gsub(/```single_code_snippet(.+?)```/m) do |_s|
8
- config = YAML.safe_load($1)
8
+ @config = YAML.safe_load($1)
9
+ @binding = ::Nexmo::Markdown::Filters::CodeSnippet::Binding.new(@config)
9
10
 
10
- @renderer = get_renderer(config['language'])
11
+ return instructions if @config['code_only']
11
12
 
12
- lexer = Nexmo::Markdown::CodeLanguage.find(config['language']).lexer
13
- lang = config['title'].delete('.')
14
-
15
- application_html = generate_application_block(config['application'])
16
-
17
- # Read the client
18
- if config['client']
19
- highlighted_client_source = generate_code_block(config['language'], config['client'], config['unindent'])
20
- end
21
-
22
- # Read the code
23
- highlighted_code_source = generate_code_block(config['language'], config['code'], config['unindent'])
24
-
25
- dependency_html = ''
26
- if config['dependencies']
27
- dependency_html = generate_dependencies(lexer.tag, config['dependencies'])
28
- end
29
-
30
- source_url = generate_source_url(config['code'])
31
-
32
- client_html = ''
33
- if highlighted_client_source
34
- client_url = generate_source_url(config['client'])
35
- id = SecureRandom.hex
36
- create_instructions = @renderer.create_instructions(config['file_name']).render_markdown
37
- erb = File.read("#{GEM_ROOT}/lib/nexmo_markdown_renderer/views/code_snippets/_configure_client.html.erb")
38
- client_html = ERB.new(erb).result(binding)
39
- end
40
-
41
- add_instructions = @renderer.add_instructions(config['file_name']).render_markdown
42
- if config['code_only']
43
- erb = File.read("#{GEM_ROOT}/lib/nexmo_markdown_renderer/views/code_snippets/_code_only.html.erb")
44
- else
45
- erb = File.read("#{GEM_ROOT}/lib/nexmo_markdown_renderer/views/code_snippets/_write_code.html.erb")
46
- end
47
-
48
- code_html = ERB.new(erb).result(binding)
49
-
50
- return code_html if config['code_only']
51
-
52
- config['run_command'] = config['run_command'].gsub('{filename}', config['file_name']) if config['run_command']
53
- run_html = @renderer.run_command(config['run_command'], config['file_name'], config['code']['source']).to_s
13
+ "#{prerequisites}#{instructions}#{run}"
14
+ end
15
+ end
54
16
 
55
- prereqs = (application_html + dependency_html + client_html).strip
17
+ def prerequisites
18
+ @prerequisites ||= begin
19
+ prereqs = [application_html, install_dependencies, import_dependencies, initialize_dependencies].join.strip
56
20
  prereqs = "<h2>#{::I18n.t('.filters.prerequisites')}</h2>#{prereqs}" unless prereqs.empty?
57
- prereqs + code_html + run_html
21
+ prereqs
58
22
  end
59
23
  end
60
24
 
61
- private
62
-
63
- def highlight(source, lexer)
64
- formatter = Rouge::Formatters::HTML.new
65
- formatter.format(lexer.lex(source))
25
+ def application_html
26
+ @application_html ||= ::Nexmo::Markdown::Filters::CodeSnippet::CreateApplication.new(@config['application']).render
66
27
  end
67
28
 
68
- def generate_code_block(language, input, unindent)
69
- filename = "#{Nexmo::Markdown::Config.docs_base_path}/#{input['source']}"
70
- return '' unless input
71
- raise "CodeSnippetFilter - Could not load #{filename} for language #{language}" unless File.exist?(filename)
72
-
73
- code = File.read(filename)
74
- lexer = Nexmo::Markdown::CodeLanguage.find(language).lexer
75
-
76
- total_lines = code.lines.count
77
-
78
- # Minus one since lines are not zero-indexed
79
- from_line = (input['from_line'] || 1) - 1
80
- to_line = (input['to_line'] || total_lines) - 1
81
-
82
- code = code.lines[from_line..to_line].join
83
- code.unindent! if unindent
84
-
85
- highlight(code, lexer)
29
+ def install_dependencies
30
+ @install_dependencies ||= ::Nexmo::Markdown::Filters::CodeSnippet::InstallDependencies.new(@config['dependencies'], @config['version'], @binding).render
86
31
  end
87
32
 
88
- def get_renderer(language)
89
- language = 'dotnet' if language == 'csharp'
90
- case language
91
- when 'curl'
92
- Nexmo::Markdown::CodeSnippetRenderer::Curl
93
- when 'node'
94
- Nexmo::Markdown::CodeSnippetRenderer::Javascript
95
- when 'javascript'
96
- Nexmo::Markdown::CodeSnippetRenderer::Javascript
97
- when 'java'
98
- Nexmo::Markdown::CodeSnippetRenderer::Java
99
- when 'dotnet'
100
- Nexmo::Markdown::CodeSnippetRenderer::Dotnet
101
- when 'python'
102
- Nexmo::Markdown::CodeSnippetRenderer::Python
103
- when 'ruby'
104
- Nexmo::Markdown::CodeSnippetRenderer::Ruby
105
- when 'php'
106
- Nexmo::Markdown::CodeSnippetRenderer::Php
107
- when 'android'
108
- Nexmo::Markdown::CodeSnippetRenderer::Android
109
- when 'kotlin'
110
- Nexmo::Markdown::CodeSnippetRenderer::Kotlin
111
- when 'objective_c'
112
- Nexmo::Markdown::CodeSnippetRenderer::ObjectiveC
113
- when 'swift'
114
- Nexmo::Markdown::CodeSnippetRenderer::Swift
115
- else
116
- raise "Unknown language: #{language}"
117
- end
33
+ def import_dependencies
34
+ @import_dependencies ||= ::Nexmo::Markdown::Filters::CodeSnippet::ImportDependencies.new(@config['import_dependencies'], @binding).render
118
35
  end
119
36
 
120
- def generate_dependencies(language, dependencies)
121
- # The only valid dependency for curl examples is `JWT`
122
- if dependencies.map(&:upcase).include?('JWT')
123
- title = ::I18n.t('filters.generate_your_jwt')
124
- else
125
- title = ::I18n.t('filters.install_dependencies')
126
- end
127
- deps = @renderer.dependencies(dependencies)
128
- id = SecureRandom.hex
129
- erb = File.read("#{GEM_ROOT}/lib/nexmo_markdown_renderer/views/code_snippets/_dependencies.html.erb")
130
- ERB.new(erb).result(binding)
37
+ def initialize_dependencies
38
+ @initialize_dependencies ||= ::Nexmo::Markdown::Filters::CodeSnippet::InitializeDependencies.new(@config['client'], @binding).render
131
39
  end
132
40
 
133
- def generate_application_block(app)
134
- return '' unless app
135
-
136
- base_url = 'http://demo.ngrok.io'
137
- base_url = 'https://example.com' if app['disable_ngrok']
138
-
139
- app['name'] = 'ExampleProject' unless app['name']
140
-
141
- # We should remove this default once we're sure that all Code Snippets
142
- # have a type set e.g audit
143
- app['type'] ||= 'voice'
144
-
145
- if ['voice', 'rtc'].include? app['type']
146
- app['event_url'] = "#{base_url}/webhooks/events" unless app['event_url']
147
- app['answer_url'] = "#{base_url}/webhooks/answer" unless app['answer_url']
148
- erb = File.read("#{GEM_ROOT}/lib/nexmo_markdown_renderer/views/code_snippets/_application_#{app['type']}.html.erb")
149
- elsif ['messages', 'dispatch'].include? app['type']
150
- erb = File.read("#{GEM_ROOT}/lib/nexmo_markdown_renderer/views/code_snippets/_application_messages_dispatch.html.erb")
151
- else
152
- raise "Invalid application type when creating code snippet: '#{app['type']}'"
153
- end
154
-
155
- id = SecureRandom.hex
156
-
157
- ERB.new(erb).result(binding)
41
+ def instructions
42
+ @instructions ||= ::Nexmo::Markdown::Filters::CodeSnippet::Instructions.new(@config, @binding).render
158
43
  end
159
44
 
160
- def generate_source_url(code)
161
- # Source example: .repos/nexmo/nexmo-java-code-snippets/ExampleClass.java
162
- # Direct link on GitHub is in form https://github.com/nexmo/nexmo-java-code-snippets/blob/master/ExampleClass.java
163
- start_section = 'https://github.com'
164
-
165
- # Insert "blob/master" and strip ".repos"
166
- repo_path = '\\0blob/master/'
167
- file_section = code['source'].sub('.repos', '').sub(%r{(-quickstart|-code-snippets|-code-snippets)/}, repo_path)
168
-
169
- # Line highlighting
170
- line_section = ''
171
- if code['from_line']
172
- line_section += "#L#{code['from_line']}"
173
- if code['to_line']
174
- # If we've provided a to_line, use that
175
- line_section += "-L#{code['to_line']}" if code['to_line']
176
- else
177
- # By default we read to the end of the file
178
- line_section += "-L#{File.read(code['source']).lines.count}"
179
- end
180
- end
181
-
182
- start_section + file_section + line_section
45
+ def run
46
+ @run ||= ::Nexmo::Markdown::Filters::CodeSnippet::Run.new(@config, @binding).render
183
47
  end
184
48
  end
185
-
186
49
  end
187
50
  end
@@ -116,7 +116,8 @@ module Nexmo
116
116
  content['weight'] ||= defaults.weight
117
117
  content['run_command'] ||= defaults.run_command
118
118
  content['unindent'] = defaults.unindent || false
119
-
119
+ content['version'] ||= defaults.version
120
+
120
121
  # If we don't have a file_name in config, use the one in the repo
121
122
  content['file_name'] ||= File.basename(content['code']['source'])
122
123
 
@@ -63,7 +63,9 @@ module Nexmo
63
63
  '<figure>' \
64
64
  '<img src="'\
65
65
  "#{link}"\
66
- '" alt="#{alt_text}">' \
66
+ '" alt="'\
67
+ "#{_alt_text}"\
68
+ '">' \
67
69
  '</figure>'
68
70
  end
69
71
 
@@ -5,7 +5,7 @@ module Nexmo
5
5
  input.gsub(/```partial(.+?)```/m) do |_s|
6
6
  config = YAML.safe_load($1)
7
7
  file_path = if config['source'].starts_with? 'app/views'
8
- config['source']
8
+ "#{Rails.root}/#{config['source']}"
9
9
  else
10
10
  "#{Nexmo::Markdown::Config.docs_base_path}/#{config['source']}"
11
11
  end
@@ -4,7 +4,7 @@ module Nexmo
4
4
  def call(input)
5
5
  input.gsub(/```screenshot(.+?)```/m) do |_s|
6
6
  config = YAML.safe_load($1)
7
- if config['image'] && File.file?(config['image'])
7
+ if config['image'] && File.file?("#{Nexmo::Markdown::Config.docs_base_path}/#{config['image']}")
8
8
  "![Screenshot](#{config['image'].gsub('public', '')})"
9
9
  else
10
10
  <<~HEREDOC
@@ -10,9 +10,9 @@ module Nexmo
10
10
  @config = YAML.safe_load($3)
11
11
 
12
12
  if tabbed_folder?
13
- raise "#{@config['source']} is not a directory" unless File.directory? "#{Nexmo::Markdown::Config.docs_base_path}/#{@config['source']}"
13
+ raise "#{@config['source']} is not a directory" unless File.directory? "#{@config['source']}"
14
14
 
15
- @tabbed_config = YAML.safe_load(File.read("#{Nexmo::Markdown::Config.docs_base_path}/#{@config['source']}/.config.yml"))
15
+ @tabbed_config = YAML.safe_load(File.read("#{@config['source']}/.config.yml"))
16
16
  @path = @config['source']
17
17
  validate_folder_config
18
18
  else
@@ -50,6 +50,8 @@ module Nexmo
50
50
  tab_link.content = content[:tab_title]
51
51
  elsif content[:language].key == 'objective_c' || content[:language].key == 'swift'
52
52
  tab_link.inner_html = "<svg><use xlink:href=\"/assets/images/brands/ios.svg#ios\" /></svg><span>" + content[:tab_title] + '</span>'
53
+ elsif content[:language].key == 'kotlin'
54
+ tab_link.inner_html = "<img class=\"Vlt-icon Vlt-icon--small\" src=\"/assets/images/brands/kotlin.svg#kotlin\" /><span>" + content[:tab_title] + '</span>'
53
55
  else
54
56
  tab_link.inner_html = "<svg><use xlink:href=\"/assets/images/brands/#{content[:language].key}.svg##{content[:language].key}\" /></svg><span>" + content[:tab_title] + '</span>'
55
57
  end
@@ -167,7 +169,7 @@ module Nexmo
167
169
  end
168
170
 
169
171
  def content_from_folder
170
- source_path = "#{Nexmo::Markdown::Config.docs_base_path}/#{@config['source']}"
172
+ source_path = "#{@config['source']}"
171
173
  source_path += '/*.md'
172
174
 
173
175
  files = Dir.glob(source_path)
@@ -0,0 +1,50 @@
1
+ module Nexmo
2
+ module Markdown
3
+ class Utils
4
+ def self.generate_source_url(code)
5
+ # Source example: .repos/vonage/vonage-java-code-snippets/ExampleClass.java
6
+ # Direct link on GitHub is in form https://github.com/vonage/vonage-java-code-snippets/blob/master/ExampleClass.java
7
+ start_section = 'https://github.com'
8
+
9
+ # Insert "blob/master" and strip ".repos"
10
+ repo_path = '\\0blob/master/'
11
+ file_section = code['source'].sub('.repos', '').sub(%r{(-quickstart|-code-snippets|-code-snippets)/}, repo_path)
12
+
13
+ # Line highlighting
14
+ line_section = ''
15
+ if code['from_line']
16
+ line_section += "#L#{code['from_line']}"
17
+ if code['to_line']
18
+ # If we've provided a to_line, use that
19
+ line_section += "-L#{code['to_line']}" if code['to_line']
20
+ else
21
+ # By default we read to the end of the file
22
+ line_section += "-L#{File.read("#{Nexmo::Markdown::Config.docs_base_path}/#{code['source']}").lines.count}"
23
+ end
24
+ end
25
+
26
+ start_section + file_section + line_section
27
+ end
28
+
29
+ def self.generate_code_block(language, input, unindent)
30
+ return '' unless input
31
+ filename = "#{Nexmo::Markdown::Config.docs_base_path}/#{input['source']}"
32
+ raise "CodeSnippetFilter - Could not load #{filename} for language #{language}" unless File.exist?(filename)
33
+
34
+ code = File.read(filename)
35
+ lexer = Nexmo::Markdown::CodeLanguage.find(language).lexer
36
+
37
+ total_lines = code.lines.count
38
+
39
+ # Minus one since lines are not zero-indexed
40
+ from_line = (input['from_line'] || 1) - 1
41
+ to_line = (input['to_line'] || total_lines) - 1
42
+
43
+ code = code.lines[from_line..to_line].join
44
+ code.unindent! if unindent
45
+ formatter = Rouge::Formatters::HTML.new
46
+ formatter.format(lexer.lex(code))
47
+ end
48
+ end
49
+ end
50
+ end
@@ -3,8 +3,12 @@ module Nexmo
3
3
  class CodeLanguage
4
4
  include ActiveModel::Model
5
5
  attr_accessor :key, :label, :type, :dependencies, :unindent, :icon, :run_command
6
- attr_writer :weight, :linkable, :languages, :lexer
7
-
6
+ attr_writer :weight, :linkable, :languages, :lexer, :version
7
+
8
+ def version
9
+ @version || nil
10
+ end
11
+
8
12
  def weight
9
13
  @weight || 999
10
14
  end
@@ -72,7 +76,7 @@ module Nexmo
72
76
  end
73
77
 
74
78
  private_class_method def self.config
75
- @config ||= YAML.load_file('./config/code_languages.yml')
79
+ @config ||= YAML.load_file("#{Nexmo::Markdown::Config.docs_base_path}/config/code_languages.yml")
76
80
  end
77
81
  end
78
82
  end
@@ -2,7 +2,7 @@ module Nexmo
2
2
  module Markdown
3
3
  module CodeSnippetRenderer
4
4
  class Android < Base
5
- def self.dependencies(_deps)
5
+ def self.dependencies(_deps, _version)
6
6
  {
7
7
  'text' => 'See <a href="https://developer.nexmo.com/use-cases/client-sdk-android-add-sdk-to-your-app">How to Add the Nexmo Client SDK to your Android App</a>',
8
8
  }
@@ -2,7 +2,7 @@ module Nexmo
2
2
  module Markdown
3
3
  module CodeSnippetRenderer
4
4
  class Curl < Base
5
- def self.dependencies(deps)
5
+ def self.dependencies(deps, _version)
6
6
  dependencies = deps.map(&:upcase)
7
7
  raise t('.only_permitted_dependency') unless dependencies.include?('JWT')
8
8
  {
@@ -2,7 +2,7 @@ module Nexmo
2
2
  module Markdown
3
3
  module CodeSnippetRenderer
4
4
  class Dotnet < Base
5
- def self.dependencies(deps)
5
+ def self.dependencies(deps, _version)
6
6
  { 'code' => "Install-Package #{deps.join(' ')}" }
7
7
  end
8
8
 
@@ -0,0 +1,23 @@
1
+ module Nexmo
2
+ module Markdown
3
+ module CodeSnippetRenderer
4
+ class Go < Base
5
+ def self.dependencies(deps, _version)
6
+ { 'code' => "go get #{deps.join(' ')}" }
7
+ end
8
+
9
+ def self.run_command(command, _filename, _file_path)
10
+ ::I18n.t('services.code_snippet_renderer.run_command', command: command)
11
+ end
12
+
13
+ def self.create_instructions(filename)
14
+ ::I18n.t('services.code_snippet_renderer.create_instructions', filename: filename)
15
+ end
16
+
17
+ def self.add_instructions(_filename)
18
+ ::I18n.t('services.code_snippet_renderer.add_instructions_to_code')
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -2,16 +2,17 @@ module Nexmo
2
2
  module Markdown
3
3
  module CodeSnippetRenderer
4
4
  class Java < Base
5
- def self.dependencies(deps)
5
+ def self.dependencies(deps, version)
6
+ raise "'version' not provided for Java snippet" unless version
6
7
  {
7
8
  'text' => ::I18n.t('services.code_snippet_renderer.add_instructions_to_file', file: 'build.gradle'),
8
- 'code' => deps.map { |d| "compile '#{d.gsub('@latest', '5.2.1')}'" }.join('<br />'),
9
+ 'code' => deps.map { |d| "compile '#{d.gsub('@latest', version)}'" }.join('<br />'),
9
10
  'type' => 'groovy',
10
11
  }
11
12
  end
12
13
 
13
14
  def self.run_command(_command, filename, file_path)
14
- package = file_path.gsub('.repos/nexmo/nexmo-java-code-snippets/src/main/java/', '').tr('/', '.').gsub(filename, '')
15
+ package = file_path.gsub('.repos/vonage/vonage-java-code-snippets/src/main/java/', '').tr('/', '.').gsub(filename, '')
15
16
  file = filename.gsub('.java', '')
16
17
  main = "#{package}#{filename.gsub('.java', '')}"
17
18
  chomped_package = package.chomp('.')
@@ -2,7 +2,7 @@ module Nexmo
2
2
  module Markdown
3
3
  module CodeSnippetRenderer
4
4
  class Javascript < Base
5
- def self.dependencies(deps)
5
+ def self.dependencies(deps, _version)
6
6
  { 'code' => "npm install #{deps.join(' ')}" }
7
7
  end
8
8
 
@@ -2,7 +2,7 @@ module Nexmo
2
2
  module Markdown
3
3
  module CodeSnippetRenderer
4
4
  class Kotlin < Base
5
- def self.dependencies(_deps)
5
+ def self.dependencies(deps, _version)
6
6
  {
7
7
  'text' => 'See <a href="https://developer.nexmo.com/use-cases/client-sdk-android-add-sdk-to-your-app">How to Add the Nexmo Client SDK to your Android App</a>',
8
8
  }
@@ -2,7 +2,7 @@ module Nexmo
2
2
  module Markdown
3
3
  module CodeSnippetRenderer
4
4
  class ObjectiveC < Base
5
- def self.dependencies(_deps)
5
+ def self.dependencies(_deps, _version)
6
6
  {
7
7
  'text' => 'See <a href="/client-sdk/setup/add-sdk-to-your-app/ios">How to Add the Nexmo Client SDK to your iOS App</a>',
8
8
  }
@@ -2,7 +2,7 @@ module Nexmo
2
2
  module Markdown
3
3
  module CodeSnippetRenderer
4
4
  class Php < Base
5
- def self.dependencies(deps)
5
+ def self.dependencies(deps, _version)
6
6
  { 'code' => "composer require #{deps.join(' ')}" }
7
7
  end
8
8
 
@@ -2,7 +2,7 @@ module Nexmo
2
2
  module Markdown
3
3
  module CodeSnippetRenderer
4
4
  class Python < Base
5
- def self.dependencies(deps)
5
+ def self.dependencies(deps, _version)
6
6
  { 'code' => "pip install #{deps.join(' ')}" }
7
7
  end
8
8
 
@@ -2,7 +2,7 @@ module Nexmo
2
2
  module Markdown
3
3
  module CodeSnippetRenderer
4
4
  class Ruby < Base
5
- def self.dependencies(deps)
5
+ def self.dependencies(deps, _version)
6
6
  { 'code' => "gem install #{deps.join(' ')}" }
7
7
  end
8
8
 
@@ -91,9 +91,9 @@ module Nexmo
91
91
 
92
92
  def self.load_english
93
93
  paths.each do |path|
94
- if path.starts_with?('app/views')
94
+ if defined?(Rails) && path.starts_with?("#{Rails.root}/app/views")
95
95
  Dir["#{path}/**/*.*"].each do |file|
96
- dictionary[file][::I18n.default_locale.to_s] = ::I18n.default_locale.to_s
96
+ dictionary[file.gsub("#{Rails.root}/", '')][::I18n.default_locale.to_s] = ::I18n.default_locale.to_s
97
97
  end
98
98
  else
99
99
  path_with_locale = "#{path}/#{::I18n.default_locale}"
@@ -15,7 +15,7 @@
15
15
  <p><%= ::I18n.t('.code_snippets.nexmo_needs_to_connect_html') %></p>
16
16
  <% end %>
17
17
 
18
- <pre class="Vlt-prism--dark dependencies command-line Vlt-prism--copy-disabled language-bash" data-prompt='$'><code>nexmo app:create "<%=app['name'] %>" <%=app['answer_url'] %> <%=app['event_url'] %> --keyfile=private.key --type=rtc</code></pre>
18
+ <pre class="Vlt-prism--dark dependencies command-line Vlt-prism--copy-disabled language-bash" data-prompt='$'><code>nexmo app:create "<%= name %>" <%= answer_url %> <%= event_url %> --keyfile=private.key --type=rtc</code></pre>
19
19
 
20
20
  <h4><%= ::I18n.t('.code_snippets.application_rtc.use_your_existing_app') %></h4>
21
21
 
@@ -18,7 +18,7 @@
18
18
  <p><%= ::I18n.t('.code_snippets.nexmo_needs_to_connect_html') %></p>
19
19
  <% end %>
20
20
 
21
- <pre class="Vlt-prism--dark dependencies command-line Vlt-prism--copy-disabled language-bash" data-prompt='$'><code>nexmo app:create "<%=app['name'] %>" <%=app['answer_url'] %> <%=app['event_url'] %> --keyfile private.key</code></pre>
21
+ <pre class="Vlt-prism--dark dependencies command-line Vlt-prism--copy-disabled language-bash" data-prompt='$'><code>nexmo app:create "<%= name %>" <%= answer_url %> <%= event_url %> --keyfile private.key</code></pre>
22
22
  <% end %>
23
23
  </div>
24
24
  </div>
@@ -7,13 +7,13 @@
7
7
  <%= create_instructions %>
8
8
  <div class="copy-wrapper">
9
9
 
10
- <div class="copy-button" data-lang="<%= lang %>" data-block="<%= config['source'] %>" data-section="configure">
10
+ <div class="copy-button" data-lang="<%= lang %>" data-block="<%= source %>" data-section="configure">
11
11
  <%= octicon "clippy", :class => 'top left' %> <span>Copy to Clipboard</span>
12
12
  </div>
13
13
  <pre class="Vlt-prism--dark language-<%= lexer.tag %> Vlt-prism--copy-disabled"><code><%= highlighted_client_source %></code></pre>
14
14
  </div>
15
15
 
16
- <p><a data-section="configure" data-lang="<%= lang %>" data-block="<%= config['source'] %>" href="<%= client_url %>">View full source</a></p>
16
+ <p><a data-section="configure" data-lang="<%= lang %>" data-block="<%= source %>" href="<%= client_url %>">View full source</a></p>
17
17
 
18
18
  </div>
19
19
  </div>
@@ -0,0 +1,18 @@
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
+ <%= ::I18n.t('.code_snippets.configure_client.import_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="Vlt-prism--dark language-<%= lexer.tag %> Vlt-prism--copy-disabled"><code><%= highlighted_import_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
+ </div>
18
+ </div>
@@ -1,7 +1,7 @@
1
1
  # :nocov:
2
2
  module Nexmo
3
3
  module Markdown
4
- VERSION = '0.3.1'
4
+ VERSION = '0.4.4'
5
5
  end
6
6
  end
7
7
  # :nocov:
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nexmo_markdown_renderer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nexmo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-21 00:00:00.000000000 Z
11
+ date: 2020-11-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: banzai
@@ -240,6 +240,14 @@ files:
240
240
  - lib/nexmo_markdown_renderer/filters/block_escape_filter.rb
241
241
  - lib/nexmo_markdown_renderer/filters/break_filter.rb
242
242
  - lib/nexmo_markdown_renderer/filters/code_filter.rb
243
+ - lib/nexmo_markdown_renderer/filters/code_snippet/binding.rb
244
+ - lib/nexmo_markdown_renderer/filters/code_snippet/create_application.rb
245
+ - lib/nexmo_markdown_renderer/filters/code_snippet/import_dependencies.rb
246
+ - lib/nexmo_markdown_renderer/filters/code_snippet/initialize_dependencies.rb
247
+ - lib/nexmo_markdown_renderer/filters/code_snippet/install_dependencies.rb
248
+ - lib/nexmo_markdown_renderer/filters/code_snippet/instructions.rb
249
+ - lib/nexmo_markdown_renderer/filters/code_snippet/renderable.rb
250
+ - lib/nexmo_markdown_renderer/filters/code_snippet/run.rb
243
251
  - lib/nexmo_markdown_renderer/filters/code_snippet_filter.rb
244
252
  - lib/nexmo_markdown_renderer/filters/code_snippet_list_filter.rb
245
253
  - lib/nexmo_markdown_renderer/filters/code_snippets_filter.rb
@@ -271,6 +279,7 @@ files:
271
279
  - lib/nexmo_markdown_renderer/filters/tooltip_filter.rb
272
280
  - lib/nexmo_markdown_renderer/filters/unfreeze_filter.rb
273
281
  - lib/nexmo_markdown_renderer/filters/use_case_list_filter.rb
282
+ - lib/nexmo_markdown_renderer/filters/utils.rb
274
283
  - lib/nexmo_markdown_renderer/initializers/doc_finder.rb
275
284
  - lib/nexmo_markdown_renderer/initializers/i18n.rb
276
285
  - lib/nexmo_markdown_renderer/initializers/redcarpet.rb
@@ -288,6 +297,7 @@ files:
288
297
  - lib/nexmo_markdown_renderer/services/code_snippet_renderer/base.rb
289
298
  - lib/nexmo_markdown_renderer/services/code_snippet_renderer/curl.rb
290
299
  - lib/nexmo_markdown_renderer/services/code_snippet_renderer/dotnet.rb
300
+ - lib/nexmo_markdown_renderer/services/code_snippet_renderer/go.rb
291
301
  - lib/nexmo_markdown_renderer/services/code_snippet_renderer/java.rb
292
302
  - lib/nexmo_markdown_renderer/services/code_snippet_renderer/javascript.rb
293
303
  - lib/nexmo_markdown_renderer/services/code_snippet_renderer/kotlin.rb
@@ -304,6 +314,7 @@ files:
304
314
  - lib/nexmo_markdown_renderer/views/code_snippets/_code_only.html.erb
305
315
  - lib/nexmo_markdown_renderer/views/code_snippets/_configure_client.html.erb
306
316
  - lib/nexmo_markdown_renderer/views/code_snippets/_dependencies.html.erb
317
+ - lib/nexmo_markdown_renderer/views/code_snippets/_import_dependencies.html.erb
307
318
  - lib/nexmo_markdown_renderer/views/code_snippets/_write_code.html.erb
308
319
  - lib/nexmo_markdown_renderer/views/code_snippets/list/plain.html.erb
309
320
  - lib/nexmo_markdown_renderer/views/concepts/list/plain.html.erb
@@ -334,7 +345,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
334
345
  - !ruby/object:Gem::Version
335
346
  version: '0'
336
347
  requirements: []
337
- rubygems_version: 3.0.3
348
+ rubygems_version: 3.0.1
338
349
  signing_key:
339
350
  specification_version: 4
340
351
  summary: Middleware to render Markdown Documents in Nexmo Developer Platform.