nexmo_markdown_renderer 0.5.0 → 0.7.2
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 +4 -4
- data/lib/nexmo_markdown_renderer/filters/concerns/prism_code_snippet.rb +8 -1
- data/lib/nexmo_markdown_renderer/filters/i18n/frontmatter_filter.rb +13 -2
- data/lib/nexmo_markdown_renderer/filters/i18n/smartling/frontmatter_filter.rb +19 -3
- data/lib/nexmo_markdown_renderer/filters/markdown_filter.rb +4 -2
- data/lib/nexmo_markdown_renderer/filters/snippet_variables_filter.rb +38 -0
- data/lib/nexmo_markdown_renderer/markdown_renderer.rb +1 -0
- data/lib/nexmo_markdown_renderer/models/code_snippet.rb +21 -18
- data/lib/nexmo_markdown_renderer/pipelines/smartling/download.rb +1 -2
- data/lib/nexmo_markdown_renderer/pipelines/smartling/preprocessor.rb +1 -1
- data/lib/version.rb +1 -1
- metadata +3 -3
- data/lib/nexmo_markdown_renderer/filters/i18n/smartling/code_block_filter.rb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd02562cf6db0de1c58951324ee7be71aeee914ea5bee6498ec12af45b78465e
|
4
|
+
data.tar.gz: 2a6ad3f742f90d3714c7a864d8f8a44060f6929ef824bb270251da45882b99b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27b07ba6eebeb8023e0f541a8b99b4790935df5f45e79b691dc419c3f2f86019cdfa50212f0854d2eebec2a7a59d60f7739eb4c860994462b01943cc6be2834c
|
7
|
+
data.tar.gz: a6db2da85020d5661a24f1a33f7bd2217b2475e76d78c320b8eaadd87e066df6d5d3954d0a90d4a3bcf6e21087a1bc21714952a88c1bfa14f3f0cb93d3ab64be
|
@@ -2,9 +2,16 @@ module Nexmo
|
|
2
2
|
module Markdown
|
3
3
|
module Concerns
|
4
4
|
module PrismCodeSnippet
|
5
|
+
include OcticonsHelper
|
6
|
+
|
5
7
|
def code_snippet_body(lexer, body)
|
6
8
|
<<~HEREDOC
|
7
|
-
<
|
9
|
+
<div class="copy-wrapper">
|
10
|
+
<div class="copy-button" data-lang="#{code_language_to_prism(lexer.tag)}" data-section="code">
|
11
|
+
#{octicon "clippy", :class => 'top left'} <span>#{::I18n.t('code_snippets.copy_to_clipboard') }</span>
|
12
|
+
</div>
|
13
|
+
<pre class="#{prism_css_classes(lexer)}"><code>#{body}</code></pre>
|
14
|
+
</div>
|
8
15
|
HEREDOC
|
9
16
|
end
|
10
17
|
|
@@ -4,9 +4,20 @@ module Nexmo
|
|
4
4
|
class FrontmatterFilter < Banzai::Filter
|
5
5
|
def call(input)
|
6
6
|
input.gsub(/\A(---.+?---)/mo) do |frontmatter|
|
7
|
-
frontmatter.gsub(
|
8
|
-
|
7
|
+
output = frontmatter.gsub(/^languages:\n(^\s+- ([a-zA-Z]+)\n)+/) do |languages|
|
8
|
+
languages.gsub(/^\s+- ([a-zA-Z]+)\n+/) do |language|
|
9
|
+
" - ```#{$1}```\n\n"
|
10
|
+
end
|
9
11
|
end
|
12
|
+
output = output.gsub(/^(\w*:)(.*)\n/) do |_key|
|
13
|
+
if $1 == "products:"
|
14
|
+
"```#{$1}#{$2}```\n\n"
|
15
|
+
else
|
16
|
+
"```#{$1}```#{$2}\n\n"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
output
|
10
21
|
end
|
11
22
|
end
|
12
23
|
end
|
@@ -1,17 +1,33 @@
|
|
1
|
-
module Nexmo
|
1
|
+
module Nexmo
|
2
2
|
module Markdown
|
3
3
|
module I18n
|
4
4
|
module Smartling
|
5
5
|
class FrontmatterFilter < Banzai::Filter
|
6
6
|
def call(input)
|
7
|
-
input.gsub(/\A\*\*\* \*\* \* \*\* \*\*\*\n*(
|
8
|
-
front = $1.gsub(/`(.*)
|
7
|
+
input.gsub(/\A\*\*\* \*\* \* \*\* \*\*\*\n*(.*?\n)!?(\*\*\* \*\* \* \*\* \*\*\*|----+)\n*/m) do |_frontmatter|
|
8
|
+
front = $1.gsub(/`products: (.*)`\n\n/) do |products|
|
9
|
+
"products: #{$1}\n\n"
|
10
|
+
end
|
11
|
+
|
12
|
+
front = front.gsub(/`(.*):`(.*)/) do |_config|
|
9
13
|
"#{$1}: #{$2}"
|
10
14
|
end
|
15
|
+
|
16
|
+
front = front.gsub(/languages: \n\n(.*)\n/m) do |_languages|
|
17
|
+
languages = $1.split("\n\n").map do |lang|
|
18
|
+
lang.gsub(/\* `(.*)`/) { |_l| " - #{$1}" }
|
19
|
+
end
|
20
|
+
<<~LANGUAGES
|
21
|
+
languages:
|
22
|
+
#{languages.join("\n")}
|
23
|
+
LANGUAGES
|
24
|
+
end
|
25
|
+
|
11
26
|
<<~FRONTMATTER
|
12
27
|
---
|
13
28
|
#{front}
|
14
29
|
---
|
30
|
+
|
15
31
|
FRONTMATTER
|
16
32
|
end
|
17
33
|
end
|
@@ -91,8 +91,10 @@ module Nexmo
|
|
91
91
|
code.gsub! /^ /, "\t"
|
92
92
|
end
|
93
93
|
|
94
|
-
formatter
|
95
|
-
formatter.format(lexer.lex(code))
|
94
|
+
formatter ||= Rouge::Formatters::HTML.new
|
95
|
+
highlighted_source = formatter.format(lexer.lex(code))
|
96
|
+
|
97
|
+
code_snippet_body(lexer, highlighted_source)
|
96
98
|
end
|
97
99
|
end
|
98
100
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Nexmo
|
2
|
+
module Markdown
|
3
|
+
class SnippetVariablesFilter < Banzai::Filter
|
4
|
+
def call(input)
|
5
|
+
input.gsub(/```snippet_variables(.+?)```/m) do |_s|
|
6
|
+
config = YAML.safe_load(Regexp.last_match(1))
|
7
|
+
|
8
|
+
raise 'No variables provided' unless config
|
9
|
+
raise 'Must provide an array' unless config.is_a?(Array)
|
10
|
+
|
11
|
+
output = <<~HEREDOC
|
12
|
+
Key | Description
|
13
|
+
-- | --
|
14
|
+
HEREDOC
|
15
|
+
config.each do |key|
|
16
|
+
|
17
|
+
details = variables[key]
|
18
|
+
raise "#{key} is not a valid snippet variable" unless details
|
19
|
+
|
20
|
+
# We have some variables in the format TO_NUMBER.SMS etc, and we only want to render the first segment
|
21
|
+
# This can be multiple segments e.g. UUID.MODIFY.VOICE will be rendered as UUID
|
22
|
+
title = key.split('.').first
|
23
|
+
|
24
|
+
output += <<~HEREDOC
|
25
|
+
`#{title}` | #{details}
|
26
|
+
HEREDOC
|
27
|
+
end
|
28
|
+
|
29
|
+
output
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def variables
|
34
|
+
@variables ||= YAML.safe_load(File.read("#{Nexmo::Markdown::Config.docs_base_path}/config/code_snippet_variables.yml"))
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -3,20 +3,20 @@ module Nexmo
|
|
3
3
|
class CodeSnippet
|
4
4
|
include ActiveModel::Model
|
5
5
|
attr_accessor :title, :product, :category, :navigation_weight, :document_path, :url
|
6
|
-
|
6
|
+
|
7
7
|
def self.by_product(product)
|
8
8
|
all.select do |block|
|
9
9
|
block.product == product
|
10
10
|
end
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
def self.all
|
14
14
|
blocks = files.map do |document_path|
|
15
15
|
document = File.read(document_path)
|
16
16
|
product = extract_product(document_path)
|
17
|
-
|
17
|
+
|
18
18
|
frontmatter = YAML.safe_load(document)
|
19
|
-
|
19
|
+
|
20
20
|
Nexmo::Markdown::CodeSnippet.new({
|
21
21
|
title: frontmatter['title'],
|
22
22
|
navigation_weight: frontmatter['navigation_weight'] || 999,
|
@@ -26,47 +26,50 @@ module Nexmo
|
|
26
26
|
url: generate_url(document_path),
|
27
27
|
})
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
blocks.sort_by(&:navigation_weight)
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
def self.generate_url(path)
|
34
34
|
'/' + path.gsub(%r{#{origin}/\w{2}/}, '').gsub('.md', '')
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
def self.extract_product(path)
|
38
38
|
# Remove the prefix
|
39
39
|
path = path.gsub!(%r{#{origin}/\w{2}/}, '')
|
40
|
-
|
40
|
+
|
41
41
|
# Each file is in the form code-snippets/<title>.md, so let's remove everything after code-snippets
|
42
42
|
path = path.gsub(%r{/code-snippets/.*}, '')
|
43
|
-
|
43
|
+
|
44
44
|
path
|
45
45
|
end
|
46
|
-
|
46
|
+
|
47
47
|
def self.extract_category(path)
|
48
48
|
# Remove the prefix
|
49
49
|
path = path.gsub(%r{#{origin}/\w{2}/}, '')
|
50
|
-
|
50
|
+
|
51
51
|
# Each file is in the form code-snippets/<title>.md, so let's capture everything after code-snippets
|
52
52
|
path = path.gsub(%r{.*/code-snippets/(.*)$}, '\1')
|
53
|
-
|
53
|
+
|
54
54
|
parts = path.split('/')
|
55
55
|
parts = parts[0...-1]
|
56
|
-
|
56
|
+
|
57
57
|
return nil if parts.empty?
|
58
|
-
|
58
|
+
|
59
59
|
parts.join('/').tr('-', ' ').humanize
|
60
60
|
end
|
61
|
-
|
61
|
+
|
62
62
|
def self.files
|
63
|
-
|
63
|
+
root = "#{origin}/#{::I18n.default_locale}"
|
64
|
+
Dir.glob("#{root}/**/code-snippets/**/*.md").map do |path|
|
65
|
+
DocFinder.find(root: origin, document: path.gsub(root, ''), language: ::I18n.locale).path
|
66
|
+
end
|
64
67
|
end
|
65
|
-
|
68
|
+
|
66
69
|
def self.origin
|
67
70
|
"#{Nexmo::Markdown::Config.docs_base_path}/_documentation"
|
68
71
|
end
|
69
72
|
end
|
70
|
-
|
73
|
+
|
71
74
|
end
|
72
75
|
end
|
data/lib/version.rb
CHANGED
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.
|
4
|
+
version: 0.7.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nexmo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-12-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: banzai
|
@@ -260,7 +260,6 @@ files:
|
|
260
260
|
- lib/nexmo_markdown_renderer/filters/frontmatter_filter.rb
|
261
261
|
- lib/nexmo_markdown_renderer/filters/heading_filter.rb
|
262
262
|
- lib/nexmo_markdown_renderer/filters/i18n/frontmatter_filter.rb
|
263
|
-
- lib/nexmo_markdown_renderer/filters/i18n/smartling/code_block_filter.rb
|
264
263
|
- lib/nexmo_markdown_renderer/filters/i18n/smartling/escape_filter.rb
|
265
264
|
- lib/nexmo_markdown_renderer/filters/i18n/smartling/frontmatter_filter.rb
|
266
265
|
- lib/nexmo_markdown_renderer/filters/icon_filter.rb
|
@@ -276,6 +275,7 @@ files:
|
|
276
275
|
- lib/nexmo_markdown_renderer/filters/php_inliner_filter.rb
|
277
276
|
- lib/nexmo_markdown_renderer/filters/relative_link_filter.rb
|
278
277
|
- lib/nexmo_markdown_renderer/filters/screenshot_filter.rb
|
278
|
+
- lib/nexmo_markdown_renderer/filters/snippet_variables_filter.rb
|
279
279
|
- lib/nexmo_markdown_renderer/filters/tab_filter.rb
|
280
280
|
- lib/nexmo_markdown_renderer/filters/techio_filter.rb
|
281
281
|
- lib/nexmo_markdown_renderer/filters/tooltip_filter.rb
|
@@ -1,20 +0,0 @@
|
|
1
|
-
module Nexmo
|
2
|
-
module Markdown
|
3
|
-
module I18n
|
4
|
-
module Smartling
|
5
|
-
class CodeBlockFilter < Banzai::Filter
|
6
|
-
def call(input)
|
7
|
-
input.gsub(/\n\n\s{4}(.*?)\n\n/m) do
|
8
|
-
<<~CODE_BLOCK
|
9
|
-
|
10
|
-
````
|
11
|
-
#{$1.split(/\n\s{4}/).join("\n")}
|
12
|
-
````
|
13
|
-
CODE_BLOCK
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|