nexmo_markdown_renderer 0.3.0 → 0.4.3

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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/config/code_languages.yml +9 -0
  3. data/config/locales/en.yml +1 -0
  4. data/lib/nexmo_markdown_renderer.rb +11 -0
  5. data/lib/nexmo_markdown_renderer/filters/block_escape_filter.rb +3 -3
  6. data/lib/nexmo_markdown_renderer/filters/code_filter.rb +17 -17
  7. data/lib/nexmo_markdown_renderer/filters/code_snippet/binding.rb +41 -0
  8. data/lib/nexmo_markdown_renderer/filters/code_snippet/create_application.rb +61 -0
  9. data/lib/nexmo_markdown_renderer/filters/code_snippet/import_dependencies.rb +38 -0
  10. data/lib/nexmo_markdown_renderer/filters/code_snippet/initialize_dependencies.rb +41 -0
  11. data/lib/nexmo_markdown_renderer/filters/code_snippet/install_dependencies.rb +39 -0
  12. data/lib/nexmo_markdown_renderer/filters/code_snippet/instructions.rb +46 -0
  13. data/lib/nexmo_markdown_renderer/filters/code_snippet/renderable.rb +64 -0
  14. data/lib/nexmo_markdown_renderer/filters/code_snippet/run.rb +29 -0
  15. data/lib/nexmo_markdown_renderer/filters/code_snippet_filter.rb +22 -159
  16. data/lib/nexmo_markdown_renderer/filters/code_snippets_filter.rb +2 -1
  17. data/lib/nexmo_markdown_renderer/filters/concerns/prism_code_snippet.rb +22 -0
  18. data/lib/nexmo_markdown_renderer/filters/markdown_filter.rb +13 -10
  19. data/lib/nexmo_markdown_renderer/filters/partial_filter.rb +1 -1
  20. data/lib/nexmo_markdown_renderer/filters/screenshot_filter.rb +1 -1
  21. data/lib/nexmo_markdown_renderer/filters/tab_filter.rb +73 -70
  22. data/lib/nexmo_markdown_renderer/filters/utils.rb +50 -0
  23. data/lib/nexmo_markdown_renderer/models/code_language.rb +7 -3
  24. data/lib/nexmo_markdown_renderer/models/tutorial.rb +1 -1
  25. data/lib/nexmo_markdown_renderer/services/code_snippet_renderer/android.rb +1 -1
  26. data/lib/nexmo_markdown_renderer/services/code_snippet_renderer/curl.rb +1 -1
  27. data/lib/nexmo_markdown_renderer/services/code_snippet_renderer/dotnet.rb +1 -1
  28. data/lib/nexmo_markdown_renderer/services/code_snippet_renderer/go.rb +23 -0
  29. data/lib/nexmo_markdown_renderer/services/code_snippet_renderer/java.rb +4 -3
  30. data/lib/nexmo_markdown_renderer/services/code_snippet_renderer/javascript.rb +1 -1
  31. data/lib/nexmo_markdown_renderer/services/code_snippet_renderer/kotlin.rb +1 -1
  32. data/lib/nexmo_markdown_renderer/services/code_snippet_renderer/objective_c.rb +1 -1
  33. data/lib/nexmo_markdown_renderer/services/code_snippet_renderer/php.rb +1 -1
  34. data/lib/nexmo_markdown_renderer/services/code_snippet_renderer/python.rb +1 -1
  35. data/lib/nexmo_markdown_renderer/services/code_snippet_renderer/ruby.rb +1 -1
  36. data/lib/nexmo_markdown_renderer/services/doc_finder.rb +2 -2
  37. data/lib/nexmo_markdown_renderer/views/code_snippets/_application_rtc.html.erb +1 -1
  38. data/lib/nexmo_markdown_renderer/views/code_snippets/_application_voice.html.erb +1 -1
  39. data/lib/nexmo_markdown_renderer/views/code_snippets/_configure_client.html.erb +2 -2
  40. data/lib/nexmo_markdown_renderer/views/code_snippets/_import_dependencies.html.erb +18 -0
  41. data/lib/version.rb +1 -1
  42. metadata +16 -3
@@ -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
@@ -63,7 +63,7 @@ module Nexmo
63
63
  end
64
64
 
65
65
  def first_step
66
- subtasks.first.name
66
+ subtasks.first&.name
67
67
  end
68
68
 
69
69
  def prerequisite?
@@ -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.0'
4
+ VERSION = '0.4.3'
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.0
4
+ version: 0.4.3
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-15 00:00:00.000000000 Z
11
+ date: 2020-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: banzai
@@ -240,12 +240,21 @@ 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
246
254
  - lib/nexmo_markdown_renderer/filters/collapsible_filter.rb
247
255
  - lib/nexmo_markdown_renderer/filters/columns_filter.rb
248
256
  - lib/nexmo_markdown_renderer/filters/concept_list_filter.rb
257
+ - lib/nexmo_markdown_renderer/filters/concerns/prism_code_snippet.rb
249
258
  - lib/nexmo_markdown_renderer/filters/dynamic_content_filter.rb
250
259
  - lib/nexmo_markdown_renderer/filters/external_link_filter.rb
251
260
  - lib/nexmo_markdown_renderer/filters/frontmatter_filter.rb
@@ -270,6 +279,7 @@ files:
270
279
  - lib/nexmo_markdown_renderer/filters/tooltip_filter.rb
271
280
  - lib/nexmo_markdown_renderer/filters/unfreeze_filter.rb
272
281
  - lib/nexmo_markdown_renderer/filters/use_case_list_filter.rb
282
+ - lib/nexmo_markdown_renderer/filters/utils.rb
273
283
  - lib/nexmo_markdown_renderer/initializers/doc_finder.rb
274
284
  - lib/nexmo_markdown_renderer/initializers/i18n.rb
275
285
  - lib/nexmo_markdown_renderer/initializers/redcarpet.rb
@@ -287,6 +297,7 @@ files:
287
297
  - lib/nexmo_markdown_renderer/services/code_snippet_renderer/base.rb
288
298
  - lib/nexmo_markdown_renderer/services/code_snippet_renderer/curl.rb
289
299
  - lib/nexmo_markdown_renderer/services/code_snippet_renderer/dotnet.rb
300
+ - lib/nexmo_markdown_renderer/services/code_snippet_renderer/go.rb
290
301
  - lib/nexmo_markdown_renderer/services/code_snippet_renderer/java.rb
291
302
  - lib/nexmo_markdown_renderer/services/code_snippet_renderer/javascript.rb
292
303
  - lib/nexmo_markdown_renderer/services/code_snippet_renderer/kotlin.rb
@@ -303,6 +314,7 @@ files:
303
314
  - lib/nexmo_markdown_renderer/views/code_snippets/_code_only.html.erb
304
315
  - lib/nexmo_markdown_renderer/views/code_snippets/_configure_client.html.erb
305
316
  - lib/nexmo_markdown_renderer/views/code_snippets/_dependencies.html.erb
317
+ - lib/nexmo_markdown_renderer/views/code_snippets/_import_dependencies.html.erb
306
318
  - lib/nexmo_markdown_renderer/views/code_snippets/_write_code.html.erb
307
319
  - lib/nexmo_markdown_renderer/views/code_snippets/list/plain.html.erb
308
320
  - lib/nexmo_markdown_renderer/views/concepts/list/plain.html.erb
@@ -333,7 +345,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
333
345
  - !ruby/object:Gem::Version
334
346
  version: '0'
335
347
  requirements: []
336
- rubygems_version: 3.0.3
348
+ rubyforge_project:
349
+ rubygems_version: 2.7.6.2
337
350
  signing_key:
338
351
  specification_version: 4
339
352
  summary: Middleware to render Markdown Documents in Nexmo Developer Platform.