nexmo_markdown_renderer 0.2.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/locales/en.yml +1 -0
- data/lib/nexmo_markdown_renderer.rb +24 -1
- data/lib/nexmo_markdown_renderer/filters/block_escape_filter.rb +3 -3
- data/lib/nexmo_markdown_renderer/filters/code_filter.rb +17 -17
- data/lib/nexmo_markdown_renderer/filters/code_snippet/binding.rb +41 -0
- data/lib/nexmo_markdown_renderer/filters/code_snippet/create_application.rb +61 -0
- data/lib/nexmo_markdown_renderer/filters/code_snippet/import_dependencies.rb +38 -0
- data/lib/nexmo_markdown_renderer/filters/code_snippet/initialize_dependencies.rb +41 -0
- data/lib/nexmo_markdown_renderer/filters/code_snippet/install_dependencies.rb +38 -0
- data/lib/nexmo_markdown_renderer/filters/code_snippet/instructions.rb +46 -0
- data/lib/nexmo_markdown_renderer/filters/code_snippet/renderable.rb +62 -0
- data/lib/nexmo_markdown_renderer/filters/code_snippet/run.rb +29 -0
- data/lib/nexmo_markdown_renderer/filters/code_snippet_filter.rb +22 -159
- data/lib/nexmo_markdown_renderer/filters/concerns/prism_code_snippet.rb +22 -0
- data/lib/nexmo_markdown_renderer/filters/markdown_filter.rb +13 -10
- data/lib/nexmo_markdown_renderer/filters/tab_filter.rb +70 -67
- data/lib/nexmo_markdown_renderer/filters/utils.rb +50 -0
- data/lib/nexmo_markdown_renderer/models/tutorial.rb +116 -72
- data/lib/nexmo_markdown_renderer/models/tutorial/file_loader.rb +32 -0
- data/lib/nexmo_markdown_renderer/models/tutorial/metadata.rb +57 -0
- data/lib/nexmo_markdown_renderer/models/tutorial/prerequisite.rb +35 -0
- data/lib/nexmo_markdown_renderer/models/tutorial/task.rb +49 -0
- data/lib/nexmo_markdown_renderer/models/use_case.rb +3 -16
- data/lib/nexmo_markdown_renderer/services/doc_finder.rb +5 -0
- data/lib/nexmo_markdown_renderer/views/code_snippets/_application_rtc.html.erb +2 -2
- data/lib/nexmo_markdown_renderer/views/code_snippets/_application_voice.html.erb +2 -2
- data/lib/nexmo_markdown_renderer/views/code_snippets/_configure_client.html.erb +2 -2
- data/lib/nexmo_markdown_renderer/views/code_snippets/_import_dependencies.html.erb +18 -0
- data/lib/version.rb +1 -1
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7e21f8aa58664f86273978415744faa05026ec551b1bd99a6e0f7b54f7872eff
|
4
|
+
data.tar.gz: ec3ea04ec8714d98ec8aa17d318999142477d58dc7a8904b96396dc982825572
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9788f8896e42b0e4f84084c231669a15a588c6335b3be8df01a60f3f73b3736a6d8ec832e650943c5de8506564893a78f3c368eca93c75c1a95d4fce1cb8d267
|
7
|
+
data.tar.gz: 5dc5835781068ada21d52a4108381222bca7293bdff94a26668dee3110310ba61c6e97d9a1b280c04b31253cca575bdb8190aecc44851c6c623d95b1675cc9b0
|
data/config/locales/en.yml
CHANGED
@@ -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:
|
@@ -6,10 +6,12 @@ require 'nokogiri'
|
|
6
6
|
require 'open-uri'
|
7
7
|
require 'active_model'
|
8
8
|
require 'i18n'
|
9
|
+
|
9
10
|
require_relative 'nexmo_markdown_renderer/config/load_config'
|
10
11
|
require_relative 'nexmo_markdown_renderer/initializers/redcarpet'
|
11
12
|
require_relative 'nexmo_markdown_renderer/initializers/i18n'
|
12
13
|
require_relative 'nexmo_markdown_renderer/core_ext/string'
|
14
|
+
|
13
15
|
require_relative 'nexmo_markdown_renderer/services/code_snippet_renderer/base'
|
14
16
|
require_relative 'nexmo_markdown_renderer/services/code_snippet_renderer/android'
|
15
17
|
require_relative 'nexmo_markdown_renderer/services/code_snippet_renderer/curl'
|
@@ -22,9 +24,30 @@ require_relative 'nexmo_markdown_renderer/services/code_snippet_renderer/php'
|
|
22
24
|
require_relative 'nexmo_markdown_renderer/services/code_snippet_renderer/python'
|
23
25
|
require_relative 'nexmo_markdown_renderer/services/code_snippet_renderer/ruby'
|
24
26
|
require_relative 'nexmo_markdown_renderer/services/code_snippet_renderer/swift'
|
27
|
+
|
25
28
|
require_relative 'nexmo_markdown_renderer/services/doc_finder'
|
26
29
|
require_relative 'nexmo_markdown_renderer/services/doc_finder/doc'
|
27
|
-
|
30
|
+
|
31
|
+
require_relative 'nexmo_markdown_renderer/models/code_language'
|
32
|
+
require_relative 'nexmo_markdown_renderer/models/code_snippet'
|
33
|
+
require_relative 'nexmo_markdown_renderer/models/concept'
|
34
|
+
require_relative 'nexmo_markdown_renderer/models/tutorial'
|
35
|
+
require_relative 'nexmo_markdown_renderer/models/tutorial/file_loader'
|
36
|
+
require_relative 'nexmo_markdown_renderer/models/tutorial/metadata'
|
37
|
+
require_relative 'nexmo_markdown_renderer/models/tutorial/prerequisite'
|
38
|
+
require_relative 'nexmo_markdown_renderer/models/tutorial/task'
|
39
|
+
require_relative 'nexmo_markdown_renderer/models/use_case'
|
40
|
+
|
41
|
+
require_relative 'nexmo_markdown_renderer/filters/code_snippet/binding'
|
42
|
+
require_relative 'nexmo_markdown_renderer/filters/code_snippet/renderable'
|
43
|
+
require_relative 'nexmo_markdown_renderer/filters/code_snippet/create_application'
|
44
|
+
require_relative 'nexmo_markdown_renderer/filters/code_snippet/initialize_dependencies'
|
45
|
+
require_relative 'nexmo_markdown_renderer/filters/code_snippet/instructions'
|
46
|
+
require_relative 'nexmo_markdown_renderer/filters/code_snippet/import_dependencies'
|
47
|
+
require_relative 'nexmo_markdown_renderer/filters/code_snippet/install_dependencies'
|
48
|
+
require_relative 'nexmo_markdown_renderer/filters/code_snippet/run'
|
49
|
+
|
50
|
+
Dir[File.join(__dir__, 'nexmo_markdown_renderer/filters/concerns', '*.rb')].each { |file| require_relative file }
|
28
51
|
Dir[File.join(__dir__, 'nexmo_markdown_renderer/filters', '*.rb')].each { |file| require_relative file }
|
29
52
|
Dir[File.join(__dir__, 'nexmo_markdown_renderer/filters/i18n', '*.rb')].each { |file| require_relative file }
|
30
53
|
require_relative 'nexmo_markdown_renderer/markdown_renderer'
|
@@ -1,6 +1,8 @@
|
|
1
1
|
module Nexmo
|
2
2
|
module Markdown
|
3
3
|
class BlockEscapeFilter < Banzai::Filter
|
4
|
+
include Nexmo::Markdown::Concerns::PrismCodeSnippet
|
5
|
+
|
4
6
|
def call(input)
|
5
7
|
# Freeze to prevent Markdown formatting
|
6
8
|
input.gsub(/````\n(.+?)````/m) do |_s|
|
@@ -8,9 +10,7 @@ module Nexmo
|
|
8
10
|
formatter = Rouge::Formatters::HTML.new
|
9
11
|
highlighted_source = formatter.format(lexer.lex($1))
|
10
12
|
|
11
|
-
output =
|
12
|
-
<pre class="Vlt-prism--dark language-#{lexer.tag} Vlt-prism--copy-disabled"><code>#{highlighted_source}</code></pre>
|
13
|
-
HEREDOC
|
13
|
+
output = code_snippet_body(lexer, highlighted_source)
|
14
14
|
|
15
15
|
"FREEZESTART#{Base64.urlsafe_encode64(output)}FREEZEEND"
|
16
16
|
end
|
@@ -1,43 +1,43 @@
|
|
1
1
|
module Nexmo
|
2
2
|
module Markdown
|
3
3
|
class CodeFilter < Banzai::Filter
|
4
|
+
include Nexmo::Markdown::Concerns::PrismCodeSnippet
|
5
|
+
|
4
6
|
def call(input)
|
5
7
|
input.gsub(/(?!.*snippet)```code(.+?)```/m) do |_s|
|
6
8
|
config = YAML.safe_load($1)
|
7
|
-
|
9
|
+
|
8
10
|
if config['config']
|
9
11
|
configs = YAML.load_file("#{Nexmo::Markdown::Config.docs_base_path}/config/code_examples.yml")
|
10
12
|
config = config['config'].split('.').inject(configs) { |h, k| h[k] }
|
11
13
|
end
|
12
|
-
|
14
|
+
|
13
15
|
code = File.read("#{Nexmo::Markdown::Config.docs_base_path}/#{config['source']}")
|
14
16
|
language = File.extname("#{Nexmo::Markdown::Config.docs_base_path}/#{config['source']}")[1..-1]
|
15
17
|
lexer = language_to_lexer(language)
|
16
|
-
|
18
|
+
|
17
19
|
total_lines = code.lines.count
|
18
|
-
|
20
|
+
|
19
21
|
# Minus one since lines are not zero-indexed
|
20
22
|
from_line = (config['from_line'] || 1) - 1
|
21
23
|
to_line = (config['to_line'] || total_lines) - 1
|
22
|
-
|
24
|
+
|
23
25
|
code = code.lines[from_line..to_line].join
|
24
26
|
code.unindent! if config['unindent']
|
25
|
-
|
27
|
+
|
26
28
|
highlighted_source = highlight(code, lexer)
|
27
|
-
|
28
|
-
|
29
|
-
<pre class="Vlt-prism--dark language-#{lexer.tag} Vlt-prism--copy-disabled"><code>#{highlighted_source}</code></pre>
|
30
|
-
HEREDOC
|
29
|
+
|
30
|
+
code_snippet_body(lexer, highlighted_source)
|
31
31
|
end
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
private
|
35
|
-
|
35
|
+
|
36
36
|
def highlight(source, lexer)
|
37
37
|
formatter = Rouge::Formatters::HTML.new
|
38
38
|
formatter.format(lexer.lex(source))
|
39
39
|
end
|
40
|
-
|
40
|
+
|
41
41
|
def language_to_lexer_name(language)
|
42
42
|
if language_configuration[language]
|
43
43
|
language_configuration[language]['lexer']
|
@@ -45,18 +45,18 @@ module Nexmo
|
|
45
45
|
language
|
46
46
|
end
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
def language_to_lexer(language)
|
50
50
|
language = language_to_lexer_name(language)
|
51
51
|
return Rouge::Lexers::PHP.new({ start_inline: true }) if language == 'php'
|
52
|
-
|
52
|
+
|
53
53
|
Rouge::Lexer.find(language.downcase) || Rouge::Lexer.find('text')
|
54
54
|
end
|
55
|
-
|
55
|
+
|
56
56
|
def language_configuration
|
57
57
|
@language_configuration ||= YAML.load_file("#{GEM_ROOT}/config/code_languages.yml")
|
58
58
|
end
|
59
59
|
end
|
60
|
-
|
60
|
+
|
61
61
|
end
|
62
62
|
end
|
@@ -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,38 @@
|
|
1
|
+
module Nexmo
|
2
|
+
module Markdown
|
3
|
+
module Filters
|
4
|
+
module CodeSnippet
|
5
|
+
class InstallDependencies
|
6
|
+
include Renderable
|
7
|
+
|
8
|
+
def initialize(config, snippet)
|
9
|
+
@config = config
|
10
|
+
@snippet = snippet
|
11
|
+
end
|
12
|
+
|
13
|
+
def partial
|
14
|
+
@partial ||= File.read("#{GEM_ROOT}/lib/nexmo_markdown_renderer/views/code_snippets/_dependencies.html.erb")
|
15
|
+
end
|
16
|
+
|
17
|
+
def title
|
18
|
+
@title ||= begin
|
19
|
+
# The only valid dependency for curl examples is `JWT`
|
20
|
+
if @config.map(&:upcase).include?('JWT')
|
21
|
+
::I18n.t('filters.generate_your_jwt')
|
22
|
+
else
|
23
|
+
::I18n.t('filters.install_dependencies')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def render
|
29
|
+
return '' unless @config
|
30
|
+
|
31
|
+
deps = renderer.dependencies(@config)
|
32
|
+
ERB.new(partial).result(binding)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
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,62 @@
|
|
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
|
+
else
|
47
|
+
raise "Unknown language: #{normalized_language}"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def normalized_language
|
52
|
+
if language == 'csharp'
|
53
|
+
'dotnet'
|
54
|
+
else
|
55
|
+
language
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|