station 0.1.8 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/nexmo_developer/Gemfile +1 -1
- data/lib/nexmo_developer/Gemfile.lock +16 -16
- data/lib/nexmo_developer/app/controllers/changelogs_controller.rb +33 -0
- data/lib/nexmo_developer/app/helpers/changelogs_helper.rb +13 -0
- data/lib/nexmo_developer/app/models/blog/blogpost.rb +33 -13
- data/lib/nexmo_developer/app/views/changelogs/index.html.erb +33 -0
- data/lib/nexmo_developer/app/views/changelogs/show.html.erb +1 -0
- data/lib/nexmo_developer/app/views/layouts/partials/_header.html.erb +3 -0
- data/lib/nexmo_developer/app/views/static/default_landing/partials/_events.html.erb +1 -1
- data/lib/nexmo_developer/app/webpacker/javascript/components/concatenation/character_counter.js +2 -1
- data/lib/nexmo_developer/config/redirects.yml +1 -0
- data/lib/nexmo_developer/config/routes.rb +3 -0
- data/lib/nexmo_developer/public/assets/{.sprockets-manifest-e633f0c6fdf58e70e8d4fbb080ee72da.json → .sprockets-manifest-5b1e9dd93472be2fecf31501eea3c181.json} +1 -1
- data/lib/nexmo_developer/public/assets/application-aa88b3c7bd34ec529f43849541752fda7c9c202aa9fff905be578ef88d103b46.js.gz +0 -0
- data/lib/nexmo_developer/public/assets/application-e3c324ace3db5c0bf10139460f7f1efb017f04bbeb729bd8d34b308de0852c20.css.gz +0 -0
- data/lib/nexmo_developer/public/assets/manifest-b4bf6e57a53c2bdb55b8998cc94cd00883793c1c37c5e5aea3ef6749b4f6d92b.js.gz +0 -0
- data/lib/nexmo_developer/public/packs/js/application-5c16497c83b8cfb5b2fc.chunk.js +2 -0
- data/lib/nexmo_developer/public/packs/js/application-5c16497c83b8cfb5b2fc.chunk.js.br +0 -0
- data/lib/nexmo_developer/public/packs/js/application-5c16497c83b8cfb5b2fc.chunk.js.gz +0 -0
- data/lib/nexmo_developer/public/packs/js/application-5c16497c83b8cfb5b2fc.chunk.js.map +1 -0
- data/lib/nexmo_developer/public/packs/js/application-5c16497c83b8cfb5b2fc.chunk.js.map.br +0 -0
- data/lib/nexmo_developer/public/packs/js/application-5c16497c83b8cfb5b2fc.chunk.js.map.gz +0 -0
- data/lib/nexmo_developer/public/packs/manifest.json +4 -4
- data/lib/nexmo_developer/public/packs/manifest.json.br +0 -0
- data/lib/nexmo_developer/public/packs/manifest.json.gz +0 -0
- data/lib/nexmo_developer/version.rb +1 -1
- metadata +13 -9
- data/lib/nexmo_developer/public/packs/js/application-636c6954b185aeed5c79.chunk.js +0 -2
- data/lib/nexmo_developer/public/packs/js/application-636c6954b185aeed5c79.chunk.js.br +0 -0
- data/lib/nexmo_developer/public/packs/js/application-636c6954b185aeed5c79.chunk.js.gz +0 -0
- data/lib/nexmo_developer/public/packs/js/application-636c6954b185aeed5c79.chunk.js.map +0 -1
- data/lib/nexmo_developer/public/packs/js/application-636c6954b185aeed5c79.chunk.js.map.br +0 -0
- data/lib/nexmo_developer/public/packs/js/application-636c6954b185aeed5c79.chunk.js.map.gz +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f899bb0a94f3e4e1843b757ff0c317e0e343a4df17873287b6e9aac8221d504a
|
4
|
+
data.tar.gz: 06c76ea641a6c8ca5f56d9612559de82cd8f67daaa0f49f17aa79cbc457ce4b6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1abf3eac0d8a2ac7c3d9a361709bf19c4000bfb06ab23a39cd89661eab3f5e292798bd955eba281c02c6e7ae9cf53cd2f0aedca379e03b7b25a31b7dee01ccdd
|
7
|
+
data.tar.gz: 18799c05a8b8269074ec8ad883062c8e1e31b7470ed9db854977e812f968e3dc3aa71e082c7d5a066bfb8fd2601ed9527deaa4c5a113d26c0789f33cf97f01c2
|
data/lib/nexmo_developer/Gemfile
CHANGED
@@ -140,7 +140,7 @@ GEM
|
|
140
140
|
execjs
|
141
141
|
coffee-script-source (1.12.2)
|
142
142
|
colorize (0.8.1)
|
143
|
-
concurrent-ruby (1.1.
|
143
|
+
concurrent-ruby (1.1.10)
|
144
144
|
countries (3.1.0)
|
145
145
|
i18n_data (~> 0.11.0)
|
146
146
|
sixarm_ruby_unaccent (~> 1.1)
|
@@ -252,7 +252,7 @@ GEM
|
|
252
252
|
mime-types (~> 3.0)
|
253
253
|
multi_xml (>= 0.5.2)
|
254
254
|
httpclient (2.8.3)
|
255
|
-
i18n (1.
|
255
|
+
i18n (1.10.0)
|
256
256
|
concurrent-ruby (~> 1.0)
|
257
257
|
i18n_data (0.11.0)
|
258
258
|
icalendar (2.7.1)
|
@@ -291,7 +291,7 @@ GEM
|
|
291
291
|
activesupport (>= 4)
|
292
292
|
railties (>= 4)
|
293
293
|
request_store (~> 1.0)
|
294
|
-
loofah (2.
|
294
|
+
loofah (2.16.0)
|
295
295
|
crass (~> 1.0.2)
|
296
296
|
nokogiri (>= 1.5.9)
|
297
297
|
lumberjack (1.2.8)
|
@@ -306,8 +306,8 @@ GEM
|
|
306
306
|
nokogiri (~> 1)
|
307
307
|
rake
|
308
308
|
mini_mime (1.1.0)
|
309
|
-
mini_portile2 (2.
|
310
|
-
minitest (5.
|
309
|
+
mini_portile2 (2.8.0)
|
310
|
+
minitest (5.15.0)
|
311
311
|
msgpack (1.4.2)
|
312
312
|
msgpack (1.4.2-java)
|
313
313
|
multi_json (1.15.0)
|
@@ -334,7 +334,7 @@ GEM
|
|
334
334
|
sass (~> 3.1)
|
335
335
|
shotgun (~> 0.9)
|
336
336
|
sinatra (~> 2.0)
|
337
|
-
nexmo_markdown_renderer (0.9.
|
337
|
+
nexmo_markdown_renderer (0.9.2)
|
338
338
|
actionview (~> 6.0)
|
339
339
|
activemodel (~> 6.0)
|
340
340
|
banzai (~> 0.1.2)
|
@@ -344,14 +344,14 @@ GEM
|
|
344
344
|
rouge (~> 2.0.7)
|
345
345
|
nio4r (2.5.7)
|
346
346
|
nio4r (2.5.7-java)
|
347
|
-
nokogiri (1.
|
348
|
-
mini_portile2 (~> 2.
|
347
|
+
nokogiri (1.13.4)
|
348
|
+
mini_portile2 (~> 2.8.0)
|
349
349
|
racc (~> 1.4)
|
350
|
-
nokogiri (1.
|
350
|
+
nokogiri (1.13.4-java)
|
351
351
|
racc (~> 1.4)
|
352
|
-
nokogiri (1.
|
352
|
+
nokogiri (1.13.4-x64-mingw32)
|
353
353
|
racc (~> 1.4)
|
354
|
-
nokogiri (1.
|
354
|
+
nokogiri (1.13.4-x86-mingw32)
|
355
355
|
racc (~> 1.4)
|
356
356
|
notiffany (0.1.3)
|
357
357
|
nenv (~> 0.1)
|
@@ -385,8 +385,8 @@ GEM
|
|
385
385
|
nio4r (~> 2.0)
|
386
386
|
puma (5.3.2-java)
|
387
387
|
nio4r (~> 2.0)
|
388
|
-
racc (1.
|
389
|
-
racc (1.
|
388
|
+
racc (1.6.0)
|
389
|
+
racc (1.6.0-java)
|
390
390
|
rack (2.2.3)
|
391
391
|
rack-protection (2.1.0)
|
392
392
|
rack
|
@@ -416,7 +416,7 @@ GEM
|
|
416
416
|
rails-dom-testing (2.0.3)
|
417
417
|
activesupport (>= 4.2.0)
|
418
418
|
nokogiri (>= 1.6)
|
419
|
-
rails-html-sanitizer (1.
|
419
|
+
rails-html-sanitizer (1.4.2)
|
420
420
|
loofah (~> 2.3)
|
421
421
|
railties (6.1.4)
|
422
422
|
actionpack (= 6.1.4)
|
@@ -610,7 +610,7 @@ GEM
|
|
610
610
|
woothee (1.11.1)
|
611
611
|
xpath (3.2.0)
|
612
612
|
nokogiri (~> 1.8)
|
613
|
-
zeitwerk (2.4
|
613
|
+
zeitwerk (2.5.4)
|
614
614
|
|
615
615
|
PLATFORMS
|
616
616
|
java
|
@@ -657,7 +657,7 @@ DEPENDENCIES
|
|
657
657
|
neatjson
|
658
658
|
newrelic_rpm
|
659
659
|
nexmo-oas-renderer (~> 2.7)
|
660
|
-
nexmo_markdown_renderer (~> 0.9)
|
660
|
+
nexmo_markdown_renderer (~> 0.9.2)
|
661
661
|
nokogiri (>= 1.11.4)
|
662
662
|
octokit
|
663
663
|
pg (~> 1.2)
|
@@ -0,0 +1,33 @@
|
|
1
|
+
class ChangelogsController < ApplicationController
|
2
|
+
def index
|
3
|
+
return if ENV['CHANGELOGS_PATH'].blank?
|
4
|
+
|
5
|
+
@titles = Dir.glob("#{ENV['CHANGELOGS_PATH']}/**")
|
6
|
+
.select { |e| File.directory? e }
|
7
|
+
.map do |folder_path|
|
8
|
+
{
|
9
|
+
title: File.basename(folder_path),
|
10
|
+
files: Dir.glob("#{folder_path}/*.md").map do |md_file|
|
11
|
+
{
|
12
|
+
file_title: File.basename(md_file, '.md'),
|
13
|
+
frontmatter: File.read(md_file).match(/\A(---.+?---)/mo) ? YAML.safe_load(File.read(md_file)) : {},
|
14
|
+
}
|
15
|
+
end,
|
16
|
+
}
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def show
|
21
|
+
page_title = params[:name]
|
22
|
+
folder_name = params[:folder]
|
23
|
+
|
24
|
+
if File.exist?("#{ENV['CHANGELOGS_PATH']}/#{folder_name}/#{page_title}.md")
|
25
|
+
page = Dir.glob("#{ENV['CHANGELOGS_PATH']}/#{folder_name}/#{page_title}.md").first
|
26
|
+
document = File.read(page).gsub(/\A(---.+?---)/mo, '')
|
27
|
+
else
|
28
|
+
document = "<h3>Sorry, this file doesn't exist!</h3><code><strong>/_changelogs/#{folder_name}/#{page_title}.md</strong></code>"
|
29
|
+
end
|
30
|
+
|
31
|
+
@content = Nexmo::Markdown::Renderer.new({}).call(document)
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module ChangelogsHelper
|
2
|
+
def build_volta_icon(element)
|
3
|
+
return '' unless element
|
4
|
+
|
5
|
+
if element.scan(/vonage-(\w+)-sdk/).present?
|
6
|
+
element.scan(/vonage-(\w+)-sdk/).flatten.first.downcase
|
7
|
+
elsif element.scan(/(\w+) SDK/).present?
|
8
|
+
element.scan(/(\w+) SDK/).flatten.first.downcase
|
9
|
+
elsif element.scan(/(\w+)-cli/).present?
|
10
|
+
element.scan(/(\w+)-cli/).flatten.first.downcase
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -36,16 +36,7 @@ class Blog::Blogpost
|
|
36
36
|
|
37
37
|
default_not_found_page(path) unless File.exist?(path)
|
38
38
|
|
39
|
-
|
40
|
-
document = File.read(path).gsub('/content/blog/') do |match|
|
41
|
-
"#{Blog::Blogpost::CLOUDFRONT_BLOG_URL}blogposts/#{match.gsub('/content/blog/', '')}"
|
42
|
-
end
|
43
|
-
|
44
|
-
# gsub Netlify - embedded YOUTUBE Video
|
45
|
-
document = document.gsub(%r{<youtube id="(\w+)"></youtube>}) do |match|
|
46
|
-
youtube_id = match[/(?<=").*(?=")/]
|
47
|
-
"<center class='video'><br><iframe width='448' height='252' src='https://www.youtube-nocookie.com/embed/#{youtube_id}' frameborder='0' allow='accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture' allowfullscreen></iframe><br><br></center>"
|
48
|
-
end
|
39
|
+
document = clean_document_from_netlify(path)
|
49
40
|
|
50
41
|
blogpost = new(BlogpostParser.build_show_with_locale(path, locale))
|
51
42
|
blogpost.content = Nexmo::Markdown::Renderer.new({}).call(document)
|
@@ -74,9 +65,38 @@ class Blog::Blogpost
|
|
74
65
|
end
|
75
66
|
|
76
67
|
def self.default_not_found_page(path)
|
77
|
-
# TODO: - default not found page
|
78
|
-
# get '*unmatched_route', to: 'application#not_found'
|
79
|
-
# is already taking care of any wrong route
|
80
68
|
"<h1>No such blog</h1><p>#{path}</p>"
|
81
69
|
end
|
70
|
+
|
71
|
+
def self.clean_document_from_netlify(path)
|
72
|
+
# Netlify - Imgage urls to S3 Bucket
|
73
|
+
document = File.read(path).gsub('/content/blog/') { |match| "#{Blog::Blogpost::CLOUDFRONT_BLOG_URL}blogposts/#{match.gsub('/content/blog/', '')}" }
|
74
|
+
|
75
|
+
# Netlify - SIGN UP Banner
|
76
|
+
document = document.gsub(%r{<sign-up></sign-up>}, "#{banner_text}#{build_image_tag}")
|
77
|
+
|
78
|
+
# Netlify - SIGN UP Banner + Number
|
79
|
+
document = document.gsub(%r{<sign-up number></sign-up>}) do |_match|
|
80
|
+
"#{banner_text}<p>This tutorial also uses a virtual phone number. To purchase one, go to <em>Numbers > Buy Numbers</em> and search for one that meets your needs.</p>#{build_image_tag}"
|
81
|
+
end
|
82
|
+
|
83
|
+
# Netlify - Embedded YOUTUBE Video
|
84
|
+
document.gsub(%r{<youtube id="(\w+)"></youtube>}) do |match|
|
85
|
+
youtube_id = match[/(?<=").*(?=")/]
|
86
|
+
"<center class='video'><br><iframe width='448' height='252' src='https://www.youtube-nocookie.com/embed/#{youtube_id}' frameborder='0' allow='accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture' allowfullscreen></iframe><br><br></center>"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# NETLIFY Helpers
|
91
|
+
def self.s3_banner_image
|
92
|
+
'https://s3.eu-west-1.amazonaws.com/developer.vonage.com/blog/signup_banner/sign_up_banner.png'
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.build_image_tag
|
96
|
+
"<p></p><figure><img src='#{s3_banner_image}' alt='Screenshot of new Meetings API session in progress'><figcaption class='Vlt-center'><em>Start developing in minutes with free credits on us. No credit card required!</em></figcaption></figure><p></p>"
|
97
|
+
end
|
98
|
+
|
99
|
+
def self.banner_text
|
100
|
+
"<h3 class='Vlt-title--icon'>Vonage API Account</h3><p>To complete this tutorial, you will need a <a href='https://dashboard.nexmo.com/sign-up' target='_blank'>Vonage API account</a>. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the <a href='https://dashboard.nexmo.com/sign-up' target='_blank'>Vonage API Dashboard</a>.</p>"
|
101
|
+
end
|
82
102
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<h1>Changelogs</h1>
|
2
|
+
|
3
|
+
<% @titles.each do |title| %>
|
4
|
+
<div class="header-separator hr--tall Vlt-text-separator Vlt-text-separator--big">
|
5
|
+
<span>< <%= title[:title].upcase %> /></span>
|
6
|
+
</div>
|
7
|
+
|
8
|
+
<div class="my-3col-grid">
|
9
|
+
<% title[:files].each do |file| %>
|
10
|
+
<%= link_to changelog_path(folder: title[:title], name: file[:file_title]), class: 'Vlt-card Vlt-card--clickable' do%>
|
11
|
+
|
12
|
+
<div class="Vlt-card__header">
|
13
|
+
|
14
|
+
<svg class="Vlt-icon Vlt-grey">
|
15
|
+
<use xlink:href="/symbol/volta-brand-icons.svg#Brand-icon-<%= build_volta_icon(file[:file_title]) %>-color" />
|
16
|
+
</svg>
|
17
|
+
|
18
|
+
<h3><%= file[:file_title] %></h3>
|
19
|
+
|
20
|
+
<% if ["version", "release"].all? {|k| file[:frontmatter].key?(k)} %>
|
21
|
+
<p style="position: relative; top: 20px;">
|
22
|
+
<code><%= "v#{file[:frontmatter]["version"]}" %></code> released on <%= "#{file[:frontmatter]["release"]}" %>
|
23
|
+
</p>
|
24
|
+
<% end %>
|
25
|
+
|
26
|
+
</div>
|
27
|
+
|
28
|
+
<% end %>
|
29
|
+
<% end %>
|
30
|
+
</div>
|
31
|
+
|
32
|
+
|
33
|
+
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<div class="raw_blopost_content"><%= raw @content %></div>
|
@@ -67,6 +67,9 @@
|
|
67
67
|
<div class="Vlt-topmenu__item">
|
68
68
|
<a href="/extend"><p><b class="Vlt-white">Integrations</b></p></a>
|
69
69
|
</div>
|
70
|
+
<div class="Vlt-topmenu__item">
|
71
|
+
<a href="/changelogs"><p><b class="Vlt-white">Changelogs</b></p></a>
|
72
|
+
</div>
|
70
73
|
</div>
|
71
74
|
</div>
|
72
75
|
</li>
|
@@ -50,7 +50,7 @@
|
|
50
50
|
|
51
51
|
|
52
52
|
<div id="community-events" class="Vlt-grid">
|
53
|
-
<% @upcoming_events.
|
53
|
+
<% @upcoming_events.each do |event| %>
|
54
54
|
<div class="Vlt-col Vlt-col--1of3">
|
55
55
|
<div class="Vlt-card">
|
56
56
|
<h3><%= link_to event.title, event.url, target: '_blank' %></h3>
|
@@ -278,3 +278,4 @@
|
|
278
278
|
"/dispatch/tutorials/sending-facebook-message-with-failover": "/dispatch/tutorials/send-facebook-message-with-failover"
|
279
279
|
"/task/sending-facebook-message-with-failover": "/dispatch/tutorials/send-facebook-message-with-failover"
|
280
280
|
"/concepts/guides/webhook": "/concepts/guides/webhooks"
|
281
|
+
"/messages/concepts/whatsapp-hosting": "/messages/concepts/whatsapp#whatsapp-number-hosting"
|
@@ -108,6 +108,9 @@ Rails.application.routes.draw do
|
|
108
108
|
get '/tags/:slug', to: 'tags#show', as: 'tag'
|
109
109
|
end
|
110
110
|
|
111
|
+
get '/changelogs', to: 'changelogs#index'
|
112
|
+
get '/changelogs/:folder/:name', to: 'changelogs#show', as: 'changelog'
|
113
|
+
|
111
114
|
get '*unmatched_route', to: 'application#not_found'
|
112
115
|
|
113
116
|
root 'static#landing'
|
@@ -1 +1 @@
|
|
1
|
-
{"files":{"manifest-b4bf6e57a53c2bdb55b8998cc94cd00883793c1c37c5e5aea3ef6749b4f6d92b.js":{"logical_path":"manifest.js","mtime":"2022-
|
1
|
+
{"files":{"manifest-b4bf6e57a53c2bdb55b8998cc94cd00883793c1c37c5e5aea3ef6749b4f6d92b.js":{"logical_path":"manifest.js","mtime":"2022-04-14T14:58:50+00:00","size":2,"digest":"75a11da44c802486bc6f65640aa48a730f0f684c5c07a42ba3cd1735eb3fb070","integrity":"sha256-daEdpEyAJIa8b2VkCqSKcw8PaExcB6Qro80XNes/sHA="},"application-aa88b3c7bd34ec529f43849541752fda7c9c202aa9fff905be578ef88d103b46.js":{"logical_path":"application.js","mtime":"2022-04-14T14:58:50+00:00","size":3172,"digest":"67f1fd16f949c2794341a44cf839e5436bbef74436e043ead39890d1c3b2e583","integrity":"sha256-Z/H9FvlJwnlDQaRM+DnlQ2u+90Q24EPq05iQ0cOy5YM="},"application-e3c324ace3db5c0bf10139460f7f1efb017f04bbeb729bd8d34b308de0852c20.css":{"logical_path":"application.css","mtime":"2022-04-14T14:58:50+00:00","size":16653,"digest":"7bba29977bdaa394d9d33788c5c59026cebf41f7290009d61391a0a645e2272b","integrity":"sha256-e7opl3vao5TZ0zeIxcWQJs6/QfcpAAnWE5GgpkXiJys="}},"assets":{"manifest.js":"manifest-b4bf6e57a53c2bdb55b8998cc94cd00883793c1c37c5e5aea3ef6749b4f6d92b.js","application.js":"application-aa88b3c7bd34ec529f43849541752fda7c9c202aa9fff905be578ef88d103b46.js","application.css":"application-e3c324ace3db5c0bf10139460f7f1efb017f04bbeb729bd8d34b308de0852c20.css"}}
|
Binary file
|
Binary file
|