nexmo_markdown_renderer 0.3.0 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
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.