nexmo_markdown_renderer 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0a7ee181316166581904d3090d0921bdd910fd04f3b82c3f0c79466c18c9161b
4
- data.tar.gz: 47df143beda5e33479d632ad8de13e6b9af55103fe581d1d368ec75101c6bacf
3
+ metadata.gz: 5d556fff7ca8b92dfaa71da286fd16d2e54d4ce8d13b2d11433d55bf4f049d69
4
+ data.tar.gz: 3d38cdbd687132a0e4a014893ada68e292c723d1698a97aa9761ac1275374c24
5
5
  SHA512:
6
- metadata.gz: 9d394cb2a18d09357457307975ce286ec1d933cb38012ff735c342f211d1b381dda8707b5e012a5eee45c28caf57085bf52ab8d485005fff631a2dfc9044bc87
7
- data.tar.gz: ecdeb294a4f147299e62863dc0120acc626e07d93eaa2433a2df67db42ba4dca81a4d09c782a353ee992aef26aa6be43409d5cfc7f37dca7f82e55166fca27c3
6
+ metadata.gz: 5d748be0b975cdc9cc403719e06b1bb9ba0ac2532823bd48c770c1234c85fc240c3060b5ab9367c09698db6f759c973a178362a9b4d05e98876b0c30a06f4516
7
+ data.tar.gz: ed02f86a2d2c91f66e6c8419998831ca2ae9119f5ec50a48a7e3dd9b294487dc50771863b76d3d63a0ea85f4680b995c7ada2fce663be9d96a18666b871f0447
@@ -152,7 +152,7 @@ en:
152
152
  run_command: >-
153
153
  ## Run your code
154
154
  Save this file to your machine and run it:
155
- <pre class='highlight bash run-command'><code>%{command}</code></pre>
155
+ <pre class="Vlt-prism--dark command-line language-bash Vlt-prism--copy-disabled" data-prompt="$"><code>%{command}</code></pre>
156
156
 
157
157
  curl:
158
158
  only_permitted_dependency: The only permitted curl dependency is `jwt`
@@ -173,4 +173,4 @@ en:
173
173
 
174
174
  Run the following `gradle` command to execute your application, replacing `%{chomped_package}` with the package containing `%{file}`:
175
175
 
176
- <pre class="highlight bash run-command"><code>gradle run -Pmain=%{main}</code></pre>
176
+ <pre class="language-shell Vlt-prism--dark command-line Vlt-prism--copy-disabled" data-prompt="$"><code>gradle run -Pmain=%{main}</code></pre>
@@ -7,15 +7,15 @@ module Nexmo
7
7
  lexer = Rouge::Lexer.find('text')
8
8
  formatter = Rouge::Formatters::HTML.new
9
9
  highlighted_source = formatter.format(lexer.lex($1))
10
-
10
+
11
11
  output = <<~HEREDOC
12
- <pre class="highlight #{lexer.tag}"><code>#{highlighted_source}</code></pre>
12
+ <pre class="Vlt-prism--dark language-#{lexer.tag} Vlt-prism--copy-disabled"><code>#{highlighted_source}</code></pre>
13
13
  HEREDOC
14
-
14
+
15
15
  "FREEZESTART#{Base64.urlsafe_encode64(output)}FREEZEEND"
16
16
  end
17
17
  end
18
18
  end
19
-
19
+
20
20
  end
21
- end
21
+ end
@@ -26,7 +26,7 @@ module Nexmo
26
26
  highlighted_source = highlight(code, lexer)
27
27
 
28
28
  <<~HEREDOC
29
- <pre class="highlight #{lexer.tag}"><code>#{highlighted_source}</code></pre>
29
+ <pre class="Vlt-prism--dark language-#{lexer.tag} Vlt-prism--copy-disabled"><code>#{highlighted_source}</code></pre>
30
30
  HEREDOC
31
31
  end
32
32
  end
@@ -2,33 +2,33 @@ module Nexmo
2
2
  module Markdown
3
3
  class CodeSnippetFilter < Banzai::Filter
4
4
  include OcticonsHelper
5
-
5
+
6
6
  def call(input)
7
7
  input.gsub(/```single_code_snippet(.+?)```/m) do |_s|
8
8
  config = YAML.safe_load($1)
9
-
9
+
10
10
  @renderer = get_renderer(config['language'])
11
-
11
+
12
12
  lexer = Nexmo::Markdown::CodeLanguage.find(config['language']).lexer
13
13
  lang = config['title'].delete('.')
14
-
14
+
15
15
  application_html = generate_application_block(config['application'])
16
-
16
+
17
17
  # Read the client
18
18
  if config['client']
19
19
  highlighted_client_source = generate_code_block(config['language'], config['client'], config['unindent'])
20
20
  end
21
-
21
+
22
22
  # Read the code
23
23
  highlighted_code_source = generate_code_block(config['language'], config['code'], config['unindent'])
24
-
24
+
25
25
  dependency_html = ''
26
26
  if config['dependencies']
27
27
  dependency_html = generate_dependencies(lexer.tag, config['dependencies'])
28
28
  end
29
-
29
+
30
30
  source_url = generate_source_url(config['code'])
31
-
31
+
32
32
  client_html = ''
33
33
  if highlighted_client_source
34
34
  client_url = generate_source_url(config['client'])
@@ -37,54 +37,54 @@ module Nexmo
37
37
  erb = File.read("#{GEM_ROOT}/lib/nexmo_markdown_renderer/views/code_snippets/_configure_client.html.erb")
38
38
  client_html = ERB.new(erb).result(binding)
39
39
  end
40
-
40
+
41
41
  add_instructions = @renderer.add_instructions(config['file_name']).render_markdown
42
42
  if config['code_only']
43
43
  erb = File.read("#{GEM_ROOT}/lib/nexmo_markdown_renderer/views/code_snippets/_code_only.html.erb")
44
44
  else
45
45
  erb = File.read("#{GEM_ROOT}/lib/nexmo_markdown_renderer/views/code_snippets/_write_code.html.erb")
46
46
  end
47
-
47
+
48
48
  code_html = ERB.new(erb).result(binding)
49
-
49
+
50
50
  return code_html if config['code_only']
51
-
51
+
52
52
  config['run_command'] = config['run_command'].gsub('{filename}', config['file_name']) if config['run_command']
53
53
  run_html = @renderer.run_command(config['run_command'], config['file_name'], config['code']['source']).to_s
54
-
54
+
55
55
  prereqs = (application_html + dependency_html + client_html).strip
56
56
  prereqs = "<h2>#{::I18n.t('.filters.prerequisites')}</h2>#{prereqs}" unless prereqs.empty?
57
57
  prereqs + code_html + run_html
58
58
  end
59
59
  end
60
-
60
+
61
61
  private
62
-
62
+
63
63
  def highlight(source, lexer)
64
64
  formatter = Rouge::Formatters::HTML.new
65
65
  formatter.format(lexer.lex(source))
66
66
  end
67
-
67
+
68
68
  def generate_code_block(language, input, unindent)
69
69
  filename = "#{Nexmo::Markdown::Config.docs_base_path}/#{input['source']}"
70
70
  return '' unless input
71
71
  raise "CodeSnippetFilter - Could not load #{filename} for language #{language}" unless File.exist?(filename)
72
-
72
+
73
73
  code = File.read(filename)
74
74
  lexer = Nexmo::Markdown::CodeLanguage.find(language).lexer
75
-
75
+
76
76
  total_lines = code.lines.count
77
-
77
+
78
78
  # Minus one since lines are not zero-indexed
79
79
  from_line = (input['from_line'] || 1) - 1
80
80
  to_line = (input['to_line'] || total_lines) - 1
81
-
81
+
82
82
  code = code.lines[from_line..to_line].join
83
83
  code.unindent! if unindent
84
-
84
+
85
85
  highlight(code, lexer)
86
86
  end
87
-
87
+
88
88
  def get_renderer(language)
89
89
  language = 'dotnet' if language == 'csharp'
90
90
  case language
@@ -116,7 +116,7 @@ module Nexmo
116
116
  raise "Unknown language: #{language}"
117
117
  end
118
118
  end
119
-
119
+
120
120
  def generate_dependencies(language, dependencies)
121
121
  # The only valid dependency for curl examples is `JWT`
122
122
  if dependencies.map(&:upcase).include?('JWT')
@@ -129,19 +129,19 @@ module Nexmo
129
129
  erb = File.read("#{GEM_ROOT}/lib/nexmo_markdown_renderer/views/code_snippets/_dependencies.html.erb")
130
130
  ERB.new(erb).result(binding)
131
131
  end
132
-
132
+
133
133
  def generate_application_block(app)
134
134
  return '' unless app
135
-
135
+
136
136
  base_url = 'http://demo.ngrok.io'
137
137
  base_url = 'https://example.com' if app['disable_ngrok']
138
-
138
+
139
139
  app['name'] = 'ExampleProject' unless app['name']
140
-
140
+
141
141
  # We should remove this default once we're sure that all Code Snippets
142
142
  # have a type set e.g audit
143
143
  app['type'] ||= 'voice'
144
-
144
+
145
145
  if ['voice', 'rtc'].include? app['type']
146
146
  app['event_url'] = "#{base_url}/webhooks/events" unless app['event_url']
147
147
  app['answer_url'] = "#{base_url}/webhooks/answer" unless app['answer_url']
@@ -151,21 +151,21 @@ module Nexmo
151
151
  else
152
152
  raise "Invalid application type when creating code snippet: '#{app['type']}'"
153
153
  end
154
-
154
+
155
155
  id = SecureRandom.hex
156
-
156
+
157
157
  ERB.new(erb).result(binding)
158
158
  end
159
-
159
+
160
160
  def generate_source_url(code)
161
161
  # Source example: .repos/nexmo/nexmo-java-code-snippets/ExampleClass.java
162
162
  # Direct link on GitHub is in form https://github.com/nexmo/nexmo-java-code-snippets/blob/master/ExampleClass.java
163
163
  start_section = 'https://github.com'
164
-
164
+
165
165
  # Insert "blob/master" and strip ".repos"
166
166
  repo_path = '\\0blob/master/'
167
167
  file_section = code['source'].sub('.repos', '').sub(%r{(-quickstart|-code-snippets|-code-snippets)/}, repo_path)
168
-
168
+
169
169
  # Line highlighting
170
170
  line_section = ''
171
171
  if code['from_line']
@@ -178,10 +178,10 @@ module Nexmo
178
178
  line_section += "-L#{File.read(code['source']).lines.count}"
179
179
  end
180
180
  end
181
-
181
+
182
182
  start_section + file_section + line_section
183
183
  end
184
184
  end
185
-
185
+
186
186
  end
187
- end
187
+ end
@@ -39,7 +39,7 @@ module Nexmo
39
39
  end
40
40
 
41
41
  def table(header, body)
42
- '<div class="Vlt-table Vlt-table--data Vlt-table--bordered">' \
42
+ '<div class="Vlt-table Vlt-table--bordered">' \
43
43
  '<table>' \
44
44
  "<thead>#{header}</thead>" \
45
45
  "<tbody>#{body}</tbody>" \
@@ -75,6 +75,20 @@ module Nexmo
75
75
  '</ol>' \
76
76
  end
77
77
  end
78
+
79
+ def block_code(code, language)
80
+ lexer = ::Rouge::Lexer.find_fancy(language, code) || ::Rouge::Lexers::PlainText
81
+
82
+ # XXX HACK: Redcarpet strips hard tabs out of code blocks,
83
+ # so we assume you're not using leading spaces that aren't tabs,
84
+ # and just replace them here.
85
+ if lexer.tag == 'make'
86
+ code.gsub! /^ /, "\t"
87
+ end
88
+
89
+ formatter = ::Rouge::Formatters::HTMLLegacy.new(:css_class => "Vlt-prism--dark language-#{lexer.tag} Vlt-prism--copy-disabled")
90
+ formatter.format(lexer.lex(code))
91
+ end
78
92
  end
79
93
  end
80
94
  end
@@ -4,29 +4,29 @@ module Nexmo
4
4
  class Java < Base
5
5
  def self.dependencies(deps)
6
6
  {
7
- 'text' => t('services.code_snippet_renderer.add_instructions_to_file', file: 'build.gradle'),
7
+ 'text' => ::I18n.t('services.code_snippet_renderer.add_instructions_to_file', file: 'build.gradle'),
8
8
  'code' => deps.map { |d| "compile '#{d.gsub('@latest', '5.2.1')}'" }.join('<br />'),
9
9
  'type' => 'groovy',
10
10
  }
11
11
  end
12
-
12
+
13
13
  def self.run_command(_command, filename, file_path)
14
14
  package = file_path.gsub('.repos/nexmo/nexmo-java-code-snippets/src/main/java/', '').tr('/', '.').gsub(filename, '')
15
15
  file = filename.gsub('.java', '')
16
16
  main = "#{package}#{filename.gsub('.java', '')}"
17
17
  chomped_package = package.chomp('.')
18
-
19
- ::I18n.t('.run_command', chomped_package: chomped_package, package: package, main: main, file: file)
18
+
19
+ ::I18n.t('services.code_snippet_renderer.java.run_command', chomped_package: chomped_package, package: package, main: main, file: file)
20
20
  end
21
-
21
+
22
22
  def self.create_instructions(filename)
23
- ::I18n.t('.create_instructions', file: filename.gsub('.java', ''))
23
+ ::I18n.t('services.code_snippet_renderer.java.create_instructions', file: filename.gsub('.java', ''))
24
24
  end
25
-
25
+
26
26
  def self.add_instructions(filename)
27
- ::I18n.t('.add_instructions', file: filename.gsub('.java', ''))
27
+ ::I18n.t('services.code_snippet_renderer.java.add_instructions', file: filename.gsub('.java', ''))
28
28
  end
29
29
  end
30
- end
30
+ end
31
31
  end
32
- end
32
+ end
@@ -2,5 +2,5 @@
2
2
  <div class="copy-button" data-lang="<%= lang %>" data-block="<%= config['source'] %>" data-section="code">
3
3
  <%= octicon "clippy", :class => 'top left' %> <span><%= ::I18n.t('.copy-to-clipboad') %></span>
4
4
  </div>
5
- <pre class="highlight <%= lexer.tag %> main-code"><code><%= highlighted_code_source %></code></pre>
5
+ <pre class="language-<%= lexer.tag %> main-code Vlt-prism--dark Vlt-prism--copy-disabled"><code><%= highlighted_code_source %></code></pre>
6
6
  </div>
@@ -10,7 +10,7 @@
10
10
  <div class="copy-button" data-lang="<%= lang %>" data-block="<%= config['source'] %>" data-section="configure">
11
11
  <%= octicon "clippy", :class => 'top left' %> <span>Copy to Clipboard</span>
12
12
  </div>
13
- <pre class="highlight copy-to-clipboard <%= config['title'] %>"><code><%= highlighted_client_source %></code></pre>
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
16
  <p><a data-section="configure" data-lang="<%= lang %>" data-block="<%= config['source'] %>" href="<%= client_url %>">View full source</a></p>
@@ -4,7 +4,7 @@
4
4
  <div id="acc<%= id %>" class="Vlt-js-accordion__content Vlt-accordion__content Vlt-accordion__content--noborder">
5
5
  <p><%=deps['text']%></p>
6
6
  <% if deps['code'] %>
7
- <pre class="highlight <%= deps['type'] || 'bash' %> dependencies"><code><%=deps['code']%></code></pre>
7
+ <pre class="Vlt-prism--dark language-<%= deps['type'] || 'bash' %> dependencies command-line Vlt-prism--copy-disabled" data-prompt='$'><code><%=deps['code']%></code></pre>
8
8
  <% end %>
9
9
  </div>
10
10
  </div>
@@ -5,7 +5,7 @@
5
5
  <div class="copy-button" data-lang="<%= lang %>" data-block="<%= config['source'] %>" data-section="code">
6
6
  <%= octicon "clippy", :class => 'top left' %> <span><%= ::I18n.t('.code_snippets.copy_to_clipboard') %></span>
7
7
  </div>
8
- <pre class="highlight <%= lexer.tag %> main-code"><code><%= highlighted_code_source %></code></pre>
8
+ <pre class="language-<%= lexer.tag %> main-code Vlt-prism--dark Vlt-prism--copy-disabled"><code><%= highlighted_code_source %></code></pre>
9
9
 
10
10
  </div>
11
11
 
data/lib/version.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # :nocov:
2
2
  module Nexmo
3
3
  module Markdown
4
- VERSION = '0.1.1'
4
+ VERSION = '0.2.0'
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.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nexmo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-16 00:00:00.000000000 Z
11
+ date: 2020-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: banzai
@@ -329,7 +329,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
329
329
  - !ruby/object:Gem::Version
330
330
  version: '0'
331
331
  requirements: []
332
- rubygems_version: 3.0.0
332
+ rubygems_version: 3.0.3
333
333
  signing_key:
334
334
  specification_version: 4
335
335
  summary: Middleware to render Markdown Documents in Nexmo Developer Platform.