station 0.1.7 → 0.2.1
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/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 -7
- data/lib/nexmo_developer/app/views/blog/blogpost/index.html.erb +3 -1
- 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 +5 -5
- data/lib/nexmo_developer/app/webpacker/javascript/components/concatenation/character_counter.js +2 -1
- data/lib/nexmo_developer/config/routes.rb +3 -0
- data/lib/nexmo_developer/public/assets/{.sprockets-manifest-683c14488d53559d0bffc83e6a567eab.json → .sprockets-manifest-1977ce42d9df517cc1ce703c08a4ea83.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: 6d2519c6731d3a4b29a298944416694e3886472308e4bae32a88ed63ab4dd946
|
4
|
+
data.tar.gz: f720c5893732362d8606854cf381940ab1813ba44794078a66bbf7db12936055
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e4b28dc42be60e963095e4fef835d192c7f192003c9eb9146c8c84c319dfa67fc05ee634e756a84bf6683335c1615db6a36b930d89ef64b5c1ea1a47fea7bfb6
|
7
|
+
data.tar.gz: b9295b8ce48def5e71ed9264652e75adf415fba77d18923d447b4287b379f31300a2f149b2a498f2dc3bc94f86f5b473465cc86a18cc8649790e9523046bfc9d
|
@@ -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,9 +36,7 @@ class Blog::Blogpost
|
|
36
36
|
|
37
37
|
default_not_found_page(path) unless File.exist?(path)
|
38
38
|
|
39
|
-
document =
|
40
|
-
"#{Blog::Blogpost::CLOUDFRONT_BLOG_URL}blogposts/#{match.gsub('/content/blog/', '')}"
|
41
|
-
end
|
39
|
+
document = clean_document_from_netlify(path)
|
42
40
|
|
43
41
|
blogpost = new(BlogpostParser.build_show_with_locale(path, locale))
|
44
42
|
blogpost.content = Nexmo::Markdown::Renderer.new({}).call(document)
|
@@ -57,7 +55,6 @@ class Blog::Blogpost
|
|
57
55
|
end
|
58
56
|
|
59
57
|
url = Addressable::URI.parse(@thumbnail)
|
60
|
-
|
61
58
|
Net::HTTP.start(url.host, url.port, use_ssl: true) do |http|
|
62
59
|
if http.head(url.request_uri)['Content-Type'].start_with? 'image'
|
63
60
|
@thumbnail
|
@@ -68,9 +65,38 @@ class Blog::Blogpost
|
|
68
65
|
end
|
69
66
|
|
70
67
|
def self.default_not_found_page(path)
|
71
|
-
# TODO: - default not found page
|
72
|
-
# get '*unmatched_route', to: 'application#not_found'
|
73
|
-
# is already taking care of any wrong route
|
74
68
|
"<h1>No such blog</h1><p>#{path}</p>"
|
75
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
|
76
102
|
end
|
@@ -24,7 +24,9 @@
|
|
24
24
|
<% @categories_with_blogposts.each do |category| %>
|
25
25
|
|
26
26
|
<div class="header-separator hr--tall Vlt-text-separator Vlt-text-separator--big">
|
27
|
-
<
|
27
|
+
<a href="<%= blog_category_path(category.slug)%>">
|
28
|
+
<span>< <%= category.plural.upcase %> /></span>
|
29
|
+
</a>
|
28
30
|
</div>
|
29
31
|
|
30
32
|
<div class="my-3col-grid">
|
@@ -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>
|
@@ -32,11 +32,8 @@
|
|
32
32
|
<b><%= t(".#{header.sign_in_text}") %></b>
|
33
33
|
</a>
|
34
34
|
|
35
|
-
<a href=<%= header.sign_up_path %> target="_blank" rel="noopener" class="Vlt-btn--white Vlt-btn--app Vlt-btn--outline Vlt-btn--small" id="signup" data-ab="try_button_v2"
|
36
|
-
|
37
|
-
<%= s %>
|
38
|
-
<% end %>
|
39
|
-
</b>
|
35
|
+
<a href=<%= header.sign_up_path %> target="_blank" rel="noopener" class="Vlt-btn--white Vlt-btn--app Vlt-btn--outline Vlt-btn--small" id="signup" data-ab="try_button_v2">
|
36
|
+
<b>< Sign-up for free /></b>
|
40
37
|
</a>
|
41
38
|
</nav>
|
42
39
|
</header>
|
@@ -70,6 +67,9 @@
|
|
70
67
|
<div class="Vlt-topmenu__item">
|
71
68
|
<a href="/extend"><p><b class="Vlt-white">Integrations</b></p></a>
|
72
69
|
</div>
|
70
|
+
<div class="Vlt-topmenu__item">
|
71
|
+
<a href="/changelogs"><p><b class="Vlt-white">Changelogs</b></p></a>
|
72
|
+
</div>
|
73
73
|
</div>
|
74
74
|
</div>
|
75
75
|
</li>
|
@@ -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-07T16:12:23+00:00","size":2,"digest":"75a11da44c802486bc6f65640aa48a730f0f684c5c07a42ba3cd1735eb3fb070","integrity":"sha256-daEdpEyAJIa8b2VkCqSKcw8PaExcB6Qro80XNes/sHA="},"application-aa88b3c7bd34ec529f43849541752fda7c9c202aa9fff905be578ef88d103b46.js":{"logical_path":"application.js","mtime":"2022-04-07T16:12:23+00:00","size":3172,"digest":"67f1fd16f949c2794341a44cf839e5436bbef74436e043ead39890d1c3b2e583","integrity":"sha256-Z/H9FvlJwnlDQaRM+DnlQ2u+90Q24EPq05iQ0cOy5YM="},"application-e3c324ace3db5c0bf10139460f7f1efb017f04bbeb729bd8d34b308de0852c20.css":{"logical_path":"application.css","mtime":"2022-04-07T16:12:23+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
|