nexmo-oas-renderer 0.7.1 → 0.8.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 +4 -4
- data/CHANGELOG.md +7 -0
- data/Gemfile.lock +16 -7
- data/lib/nexmo/oas/renderer/app.rb +2 -4
- data/lib/nexmo/oas/renderer/presenters/api_specification.rb +1 -1
- data/lib/nexmo/oas/renderer/presenters/open_api_specification.rb +1 -1
- data/lib/nexmo/oas/renderer/public/assets/stylesheets/nexmo-oas-renderer.css +1 -1
- data/lib/nexmo/oas/renderer/version.rb +1 -1
- data/lib/nexmo/oas/renderer/views/open_api/_model.erb +1 -1
- data/lib/nexmo/oas/renderer/views/open_api/_parameter_groups.erb +7 -37
- data/lib/nexmo/oas/renderer/views/open_api/_tabbed_parameters.erb +53 -0
- data/nexmo-oas-renderer.gemspec +1 -0
- metadata +17 -53
- data/lib/nexmo/oas/renderer/filters/anchor.rb +0 -17
- data/lib/nexmo/oas/renderer/filters/audio.rb +0 -21
- data/lib/nexmo/oas/renderer/filters/block_escape.rb +0 -24
- data/lib/nexmo/oas/renderer/filters/break.rb +0 -13
- data/lib/nexmo/oas/renderer/filters/code.rb +0 -64
- data/lib/nexmo/oas/renderer/filters/code_snippet.rb +0 -194
- data/lib/nexmo/oas/renderer/filters/code_snippet_list.rb +0 -33
- data/lib/nexmo/oas/renderer/filters/code_snippets.rb +0 -158
- data/lib/nexmo/oas/renderer/filters/collapsible.rb +0 -27
- data/lib/nexmo/oas/renderer/filters/columns.rb +0 -50
- data/lib/nexmo/oas/renderer/filters/concept_list.rb +0 -33
- data/lib/nexmo/oas/renderer/filters/dynamic_content.rb +0 -30
- data/lib/nexmo/oas/renderer/filters/external_link.rb +0 -32
- data/lib/nexmo/oas/renderer/filters/frontmatter.rb +0 -14
- data/lib/nexmo/oas/renderer/filters/heading.rb +0 -61
- data/lib/nexmo/oas/renderer/filters/icon.rb +0 -22
- data/lib/nexmo/oas/renderer/filters/indent.rb +0 -20
- data/lib/nexmo/oas/renderer/filters/inline_escape.rb +0 -17
- data/lib/nexmo/oas/renderer/filters/js_sequence_diagram.rb +0 -21
- data/lib/nexmo/oas/renderer/filters/label.rb +0 -32
- data/lib/nexmo/oas/renderer/filters/language.rb +0 -15
- data/lib/nexmo/oas/renderer/filters/markdown.rb +0 -85
- data/lib/nexmo/oas/renderer/filters/modal.rb +0 -41
- data/lib/nexmo/oas/renderer/filters/partial.rb +0 -28
- data/lib/nexmo/oas/renderer/filters/php_inliner.rb +0 -15
- data/lib/nexmo/oas/renderer/filters/screenshot.rb +0 -26
- data/lib/nexmo/oas/renderer/filters/tab.rb +0 -250
- data/lib/nexmo/oas/renderer/filters/techio.rb +0 -24
- data/lib/nexmo/oas/renderer/filters/tooltip.rb +0 -22
- data/lib/nexmo/oas/renderer/filters/tutorial_link.rb +0 -27
- data/lib/nexmo/oas/renderer/filters/tutorials.rb +0 -28
- data/lib/nexmo/oas/renderer/filters/unfreeze.rb +0 -20
- data/lib/nexmo/oas/renderer/filters/user_personalization.rb +0 -43
- data/lib/nexmo/oas/renderer/lib/core_ext/string.rb +0 -14
- data/lib/nexmo/oas/renderer/lib/redcarpet.rb +0 -14
- data/lib/nexmo/oas/renderer/models/code_snippet.rb +0 -75
- data/lib/nexmo/oas/renderer/models/tutorial.rb +0 -83
- data/lib/nexmo/oas/renderer/pipelines/markdown_pipeline.rb +0 -52
- data/lib/nexmo/oas/renderer/services/code_language_api.rb +0 -98
- data/lib/nexmo/oas/renderer/views/code_snippets/_application_messages_dispatch.html.erb +0 -9
- data/lib/nexmo/oas/renderer/views/code_snippets/_application_rtc.html.erb +0 -41
- data/lib/nexmo/oas/renderer/views/code_snippets/_application_voice.html.erb +0 -24
- data/lib/nexmo/oas/renderer/views/code_snippets/_code_only.html.erb +0 -6
- data/lib/nexmo/oas/renderer/views/code_snippets/_configure_client.html.erb +0 -20
- data/lib/nexmo/oas/renderer/views/code_snippets/_dependencies.html.erb +0 -11
- data/lib/nexmo/oas/renderer/views/code_snippets/_write_code.html.erb +0 -13
- data/lib/nexmo/oas/renderer/views/code_snippets/list/plain.html.erb +0 -10
- data/lib/nexmo/oas/renderer/views/tutorials/_index.html.erb +0 -32
- data/lib/nexmo/oas/renderer/views/tutorials/index.html.erb +0 -7
- data/lib/nexmo/oas/renderer/views/tutorials/list/plain.html.erb +0 -5
- data/lib/nexmo/oas/renderer/views/tutorials/show.html.erb +0 -8
@@ -1,27 +0,0 @@
|
|
1
|
-
module Nexmo
|
2
|
-
module OAS
|
3
|
-
module Renderer
|
4
|
-
module Filters
|
5
|
-
class Collapsible < Banzai::Filter
|
6
|
-
def call(input)
|
7
|
-
input.gsub(/^\|\s(\#{1,6})(\s)?(.+?)\n^\|\n(.+?)\n\n/m) do |_s|
|
8
|
-
heading = $3
|
9
|
-
body = $4.gsub(/^\|\n/, "\n")
|
10
|
-
body = body.gsub(/^\|\s/, '')
|
11
|
-
parsed_body = MarkdownPipeline.new.call(body)
|
12
|
-
|
13
|
-
<<~HEREDOC
|
14
|
-
<div class="Vlt-accordion Vlt-box Vlt-box--lesspadding Nxd-accordion-emphasis">
|
15
|
-
<h5 class="Vlt-accordion__trigger" tabindex="0">#{heading}</h5>
|
16
|
-
<div class="Vlt-accordion__content Vlt-accordion__content--noborder">
|
17
|
-
#{parsed_body}
|
18
|
-
</div>
|
19
|
-
</div>
|
20
|
-
HEREDOC
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
module Nexmo
|
2
|
-
module OAS
|
3
|
-
module Renderer
|
4
|
-
module Filters
|
5
|
-
class Columns < Banzai::Filter
|
6
|
-
def call(input)
|
7
|
-
input.gsub!(%r{{column\:([1-4])\/([1-4])}\n(.+?){end}}m) do
|
8
|
-
s = []
|
9
|
-
s << row_start if $1 == '1'
|
10
|
-
s << column_start($2)
|
11
|
-
s << $3
|
12
|
-
s << column_end
|
13
|
-
s << row_end if $1 == $2
|
14
|
-
s.join('')
|
15
|
-
end
|
16
|
-
|
17
|
-
input
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
def row_start
|
23
|
-
"FREEZESTART#{Base64.urlsafe_encode64('<div class="row">')}FREEZEEND\n"
|
24
|
-
end
|
25
|
-
|
26
|
-
def row_end
|
27
|
-
close_tag
|
28
|
-
end
|
29
|
-
|
30
|
-
def close_tag
|
31
|
-
"FREEZESTART#{Base64.urlsafe_encode64('</div>')}FREEZEEND"
|
32
|
-
end
|
33
|
-
|
34
|
-
def column_start(columns)
|
35
|
-
html = "<div class='column small-12 medium-#{part_size(columns)}'>"
|
36
|
-
"FREEZESTART#{Base64.urlsafe_encode64(html)}FREEZEEND\n"
|
37
|
-
end
|
38
|
-
|
39
|
-
def column_end
|
40
|
-
"FREEZESTART#{Base64.urlsafe_encode64('</div>')}FREEZEEND\n"
|
41
|
-
end
|
42
|
-
|
43
|
-
def part_size(columns)
|
44
|
-
12 / Integer(columns)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module Nexmo
|
2
|
-
module OAS
|
3
|
-
module Renderer
|
4
|
-
module Filters
|
5
|
-
class ConceptList < Banzai::Filter
|
6
|
-
def call(input)
|
7
|
-
input.gsub(/```concept_list(.+?)```/m) do |_s|
|
8
|
-
config = YAML.safe_load($1)
|
9
|
-
|
10
|
-
raise 'concept_list filter takes a YAML config' if config.nil?
|
11
|
-
raise "concept_list filter requires 'product' or 'concepts' key" unless config['product'] || config['concepts']
|
12
|
-
|
13
|
-
if config['product']
|
14
|
-
@product = config['product']
|
15
|
-
@concepts = Concept.by_product(@product)
|
16
|
-
elsif config['concepts']
|
17
|
-
@concepts = Concept.by_name(config['concepts'])
|
18
|
-
end
|
19
|
-
|
20
|
-
@concepts.reject!(&:ignore_in_list)
|
21
|
-
|
22
|
-
return '' if @concepts.empty?
|
23
|
-
|
24
|
-
erb = File.read("#{API.root}/views/concepts/list/plain.html.erb")
|
25
|
-
html = ERB.new(erb).result(binding)
|
26
|
-
"FREEZESTART#{Base64.urlsafe_encode64(html)}FREEZEEND"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module Nexmo
|
2
|
-
module OAS
|
3
|
-
module Renderer
|
4
|
-
module Filters
|
5
|
-
class DynamicContent < Banzai::Filter
|
6
|
-
def call(input)
|
7
|
-
input.gsub(/(\s|^)\[\~(.+?)\~\](\s|$)/) do
|
8
|
-
content = environment_value($2) || config_value($2) || "VALUE NOT SET: #{$2}"
|
9
|
-
"#{$1}#{content}#{$3}"
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
private
|
14
|
-
|
15
|
-
def environment_value(key)
|
16
|
-
return nil unless ENV['DYNAMIC_CONTENT']
|
17
|
-
@environment_dynamic_content ||= YAML.safe_load(ENV['DYNAMIC_CONTENT'])
|
18
|
-
@environment_dynamic_content ||= YAML.safe_load(temp)
|
19
|
-
@environment_dynamic_content[key]
|
20
|
-
end
|
21
|
-
|
22
|
-
def config_value(key)
|
23
|
-
@config_dynamic_content ||= YAML.load_file("#{API.root}/config/dynamic_content.yml")
|
24
|
-
@config_dynamic_content[key]
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
module Nexmo
|
2
|
-
module OAS
|
3
|
-
module Renderer
|
4
|
-
module Filters
|
5
|
-
class ExternalLink < Banzai::Filter
|
6
|
-
def call(input)
|
7
|
-
@input = input
|
8
|
-
|
9
|
-
document.css('a').each_with_index do |link, _index|
|
10
|
-
if link['href']&.start_with?('http') && link['class'] && !link['class'].include?('no-external-marker')
|
11
|
-
link['target'] = '_blank'
|
12
|
-
if link.css('svg').empty?
|
13
|
-
link.add_child <<~HEREDOC
|
14
|
-
<svg class="Vlt-icon Vlt-icon--smaller Vlt-icon--text-bottom Vlt-blue-dark"><use xlink:href="/assets/symbol/volta-icons.svg#Vlt-icon-open"></use></svg>
|
15
|
-
HEREDOC
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
@document.to_html
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def document
|
26
|
-
@document ||= Nokogiri::HTML::DocumentFragment.parse(@input)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
module Nexmo
|
2
|
-
module OAS
|
3
|
-
module Renderer
|
4
|
-
module Filters
|
5
|
-
class Heading < Banzai::Filter
|
6
|
-
def call(input)
|
7
|
-
@input = input
|
8
|
-
@headings = []
|
9
|
-
|
10
|
-
heading_tag_list = %w[h1 h2 h3 h4 h5 h6]
|
11
|
-
headings = document.children.select do |child|
|
12
|
-
heading_tag_list.include? child.name
|
13
|
-
end
|
14
|
-
|
15
|
-
headings.each do |heading|
|
16
|
-
parameterized_heading = parameterized_heading_without_collision(heading)
|
17
|
-
heading['id'] = parameterized_heading
|
18
|
-
heading['data-id'] = SecureRandom.hex
|
19
|
-
heading['class'] = heading[:class]
|
20
|
-
heading['class'] += ' Vlt-title--icon'
|
21
|
-
|
22
|
-
heading.prepend_child <<~HEREDOC
|
23
|
-
<a href="##{parameterized_heading}" class="heading-permalink">
|
24
|
-
<svg class="Vlt-grey"><use xlink:href=\"/assets/symbol/volta-icons.svg#Vlt-icon-link\" /></svg>
|
25
|
-
</a>
|
26
|
-
HEREDOC
|
27
|
-
end
|
28
|
-
|
29
|
-
@document.to_html
|
30
|
-
end
|
31
|
-
|
32
|
-
private
|
33
|
-
|
34
|
-
def document
|
35
|
-
@document ||= Nokogiri::HTML::DocumentFragment.parse(@input)
|
36
|
-
end
|
37
|
-
|
38
|
-
def parameterized_heading_without_collision(heading)
|
39
|
-
parameterized_heading = nil
|
40
|
-
index = nil
|
41
|
-
|
42
|
-
loop do
|
43
|
-
if index
|
44
|
-
parameterized_heading = "#{heading.text.parameterize}-#{index}"
|
45
|
-
index += 1
|
46
|
-
else
|
47
|
-
parameterized_heading = heading.text.parameterize
|
48
|
-
index = 2
|
49
|
-
end
|
50
|
-
|
51
|
-
break if @headings.exclude? parameterized_heading
|
52
|
-
end
|
53
|
-
|
54
|
-
@headings << parameterized_heading
|
55
|
-
parameterized_heading
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
module Nexmo
|
2
|
-
module OAS
|
3
|
-
module Renderer
|
4
|
-
module Filters
|
5
|
-
class Icon < Banzai::Filter
|
6
|
-
def call(input)
|
7
|
-
input.gsub!('✅', '<svg class="Vlt-green Vlt-icon Vlt-icon--small"><use xlink:href="/assets/symbol/volta-icons.svg#Vlt-icon-check" /></svg>')
|
8
|
-
input.gsub!('❌', '<svg class="Vlt-red Vlt-icon Vlt-icon--small"><use xlink:href="/assets/symbol/volta-icons.svg#Vlt-icon-cross" /></svg>')
|
9
|
-
|
10
|
-
input.gsub!(/\[icon="(.+?)"\]/) do
|
11
|
-
<<~HEREDOC
|
12
|
-
<svg class="Vlt-green Vlt-icon Vlt-icon--small"><use xlink:href="/assets/symbol/volta-icons.svg#Vlt-icon-#{$1}" /></svg>
|
13
|
-
HEREDOC
|
14
|
-
end
|
15
|
-
|
16
|
-
input
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
module Nexmo
|
2
|
-
module OAS
|
3
|
-
module Renderer
|
4
|
-
module Filters
|
5
|
-
class Indent < Banzai::Filter
|
6
|
-
def call(input)
|
7
|
-
input.gsub(/^^\s{4}\-\>\s(.+?)$/) do
|
8
|
-
body = MarkdownPipeline.new.call($1)
|
9
|
-
<<~HEREDOC
|
10
|
-
<div class="indent">
|
11
|
-
#{body}
|
12
|
-
</div>
|
13
|
-
HEREDOC
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module Nexmo
|
2
|
-
module OAS
|
3
|
-
module Renderer
|
4
|
-
module Filters
|
5
|
-
class InlineEscape < Banzai::Filter
|
6
|
-
def call(input)
|
7
|
-
# Freeze to prevent Markdown formatting
|
8
|
-
input.gsub(/``(.+?)``/) do |_s|
|
9
|
-
frozen_code = Base64.urlsafe_encode64("<code>#{$1}</code>")
|
10
|
-
"FREEZESTART#{frozen_code}FREEZEEND"
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module Nexmo
|
2
|
-
module OAS
|
3
|
-
module Renderer
|
4
|
-
module Filters
|
5
|
-
class JsSequenceDiagram < Banzai::Filter
|
6
|
-
def call(input)
|
7
|
-
input.gsub(/```js_sequence_diagram(.+?)```/m) do |_s|
|
8
|
-
diagram = <<~HEREDOC
|
9
|
-
<div class="js-diagram">
|
10
|
-
#{$1}
|
11
|
-
</div>
|
12
|
-
HEREDOC
|
13
|
-
|
14
|
-
"FREEZESTART#{Base64.urlsafe_encode64(diagram)}FREEZEEND"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
module Nexmo
|
2
|
-
module OAS
|
3
|
-
module Renderer
|
4
|
-
module Filters
|
5
|
-
class Label < Banzai::Filter
|
6
|
-
def call(input)
|
7
|
-
input.gsub(/\[(GET|POST|PUT|DELETE|OPTIONS)\]/i) do |_s|
|
8
|
-
"<span class='Vlt-badge #{class_name($1)}'>#{$1}</span> "
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
private
|
13
|
-
|
14
|
-
def class_name(text)
|
15
|
-
case text
|
16
|
-
when 'POST'
|
17
|
-
'Vlt-badge--green'
|
18
|
-
when 'GET'
|
19
|
-
'Vlt-badge--blue'
|
20
|
-
when 'DELETE'
|
21
|
-
'Vlt-badge--red'
|
22
|
-
when 'PUT'
|
23
|
-
'Vlt-badge--yellow'
|
24
|
-
when 'OPTIONS'
|
25
|
-
'Vlt-badge--grey'
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module Nexmo
|
2
|
-
module OAS
|
3
|
-
module Renderer
|
4
|
-
module Filters
|
5
|
-
class Language < Banzai::Filter
|
6
|
-
def call(input)
|
7
|
-
input.gsub(/\[(.+?)\]\(lang:.+?(?:'(.+?)'|"(.+?)")\)/) do |_s|
|
8
|
-
"<span lang='#{$2}'>#{$1}</span>"
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,85 +0,0 @@
|
|
1
|
-
require_relative '../lib/redcarpet'
|
2
|
-
|
3
|
-
module Nexmo
|
4
|
-
module OAS
|
5
|
-
module Renderer
|
6
|
-
module Filters
|
7
|
-
class Markdown < Banzai::Filter
|
8
|
-
def call(input)
|
9
|
-
markdown.render(input)
|
10
|
-
end
|
11
|
-
|
12
|
-
private
|
13
|
-
|
14
|
-
def renderer
|
15
|
-
@renderer ||= VoltaRender.new(options)
|
16
|
-
end
|
17
|
-
|
18
|
-
def markdown
|
19
|
-
@markdown ||= Redcarpet::Markdown.new(renderer, {
|
20
|
-
no_intra_emphasis: true,
|
21
|
-
tables: true,
|
22
|
-
strikethrough: true,
|
23
|
-
superscript: true,
|
24
|
-
underline: true,
|
25
|
-
highlight: true,
|
26
|
-
fenced_code_blocks: true,
|
27
|
-
disable_indented_code_blocks: true,
|
28
|
-
start_inline: true,
|
29
|
-
})
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
class VoltaRender < HTML
|
34
|
-
def initialize(options)
|
35
|
-
@options = options
|
36
|
-
super(options)
|
37
|
-
end
|
38
|
-
|
39
|
-
def paragraph(text)
|
40
|
-
return text if @options[:skip_paragraph_surround]
|
41
|
-
"<p>#{text}</p>"
|
42
|
-
end
|
43
|
-
|
44
|
-
def table(header, body)
|
45
|
-
'<div class="Vlt-table Vlt-table--data Vlt-table--bordered">' \
|
46
|
-
'<table>' \
|
47
|
-
"<thead>#{header}</thead>" \
|
48
|
-
"<tbody>#{body}</tbody>" \
|
49
|
-
'</table>' \
|
50
|
-
'</div>'
|
51
|
-
end
|
52
|
-
|
53
|
-
def block_quote(quote)
|
54
|
-
'<div class="Vlt-callout Vlt-callout--tip">' \
|
55
|
-
'<i></i>' \
|
56
|
-
'<div class="Vlt-callout__content">' \
|
57
|
-
"#{quote}" \
|
58
|
-
'</div>' \
|
59
|
-
'</div>'
|
60
|
-
end
|
61
|
-
|
62
|
-
def image(link, _title, _alt_text)
|
63
|
-
'<figure>' \
|
64
|
-
'<img src="'\
|
65
|
-
"#{link}"\
|
66
|
-
'" alt="#{alt_text}">' \
|
67
|
-
'</figure>'
|
68
|
-
end
|
69
|
-
|
70
|
-
def list(contents, list_type)
|
71
|
-
if "#{list_type}" == 'unordered'
|
72
|
-
'<ul class="Vlt-list Vlt-list--simple">' \
|
73
|
-
"#{contents}" \
|
74
|
-
'</ul>'
|
75
|
-
else
|
76
|
-
'<ol class="Vlt-list Vlt-list--simple">' \
|
77
|
-
"#{contents}" \
|
78
|
-
'</ol>' \
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|