station 0.1.7 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/lib/nexmo_developer/app/controllers/changelogs_controller.rb +33 -0
  3. data/lib/nexmo_developer/app/helpers/changelogs_helper.rb +13 -0
  4. data/lib/nexmo_developer/app/models/blog/blogpost.rb +33 -7
  5. data/lib/nexmo_developer/app/views/blog/blogpost/index.html.erb +3 -1
  6. data/lib/nexmo_developer/app/views/changelogs/index.html.erb +33 -0
  7. data/lib/nexmo_developer/app/views/changelogs/show.html.erb +1 -0
  8. data/lib/nexmo_developer/app/views/layouts/partials/_header.html.erb +5 -5
  9. data/lib/nexmo_developer/app/webpacker/javascript/components/concatenation/character_counter.js +2 -1
  10. data/lib/nexmo_developer/config/routes.rb +3 -0
  11. data/lib/nexmo_developer/public/assets/{.sprockets-manifest-683c14488d53559d0bffc83e6a567eab.json → .sprockets-manifest-1977ce42d9df517cc1ce703c08a4ea83.json} +1 -1
  12. data/lib/nexmo_developer/public/assets/application-aa88b3c7bd34ec529f43849541752fda7c9c202aa9fff905be578ef88d103b46.js.gz +0 -0
  13. data/lib/nexmo_developer/public/assets/application-e3c324ace3db5c0bf10139460f7f1efb017f04bbeb729bd8d34b308de0852c20.css.gz +0 -0
  14. data/lib/nexmo_developer/public/assets/manifest-b4bf6e57a53c2bdb55b8998cc94cd00883793c1c37c5e5aea3ef6749b4f6d92b.js.gz +0 -0
  15. data/lib/nexmo_developer/public/packs/js/application-5c16497c83b8cfb5b2fc.chunk.js +2 -0
  16. data/lib/nexmo_developer/public/packs/js/application-5c16497c83b8cfb5b2fc.chunk.js.br +0 -0
  17. data/lib/nexmo_developer/public/packs/js/application-5c16497c83b8cfb5b2fc.chunk.js.gz +0 -0
  18. data/lib/nexmo_developer/public/packs/js/application-5c16497c83b8cfb5b2fc.chunk.js.map +1 -0
  19. data/lib/nexmo_developer/public/packs/js/application-5c16497c83b8cfb5b2fc.chunk.js.map.br +0 -0
  20. data/lib/nexmo_developer/public/packs/js/application-5c16497c83b8cfb5b2fc.chunk.js.map.gz +0 -0
  21. data/lib/nexmo_developer/public/packs/manifest.json +4 -4
  22. data/lib/nexmo_developer/public/packs/manifest.json.br +0 -0
  23. data/lib/nexmo_developer/public/packs/manifest.json.gz +0 -0
  24. data/lib/nexmo_developer/version.rb +1 -1
  25. metadata +13 -9
  26. data/lib/nexmo_developer/public/packs/js/application-636c6954b185aeed5c79.chunk.js +0 -2
  27. data/lib/nexmo_developer/public/packs/js/application-636c6954b185aeed5c79.chunk.js.br +0 -0
  28. data/lib/nexmo_developer/public/packs/js/application-636c6954b185aeed5c79.chunk.js.gz +0 -0
  29. data/lib/nexmo_developer/public/packs/js/application-636c6954b185aeed5c79.chunk.js.map +0 -1
  30. data/lib/nexmo_developer/public/packs/js/application-636c6954b185aeed5c79.chunk.js.map.br +0 -0
  31. 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: 3f52441c4793c6a4a40e32f56f59fac5d0056ca26277588cb85c44ea3bbf40c7
4
- data.tar.gz: e0966675087217d48473f172025d00c1ab8307b7a161f3d3780e53ff10c988ff
3
+ metadata.gz: 6d2519c6731d3a4b29a298944416694e3886472308e4bae32a88ed63ab4dd946
4
+ data.tar.gz: f720c5893732362d8606854cf381940ab1813ba44794078a66bbf7db12936055
5
5
  SHA512:
6
- metadata.gz: c491c053235bf8fac668ed6f0c4f426163b8ebde171b654a7061b753455996256ab557f38d33b1ee881120a570df20638c99859258c25b0153cd6ac0fb6fe246
7
- data.tar.gz: 46513c3f548e0f37a1dbd4197730268dacfcde1308e0c5f2864c6cf3ed4592f44d463459bcd07d8246163108788b05183df27e25e7172fd3f4d56938b3795463
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 = File.read(path).gsub('/content/blog/') do |match| # gsub Netlify img urls
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
- <span>< <%= category.plural.upcase %> /></span>
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"><b>
36
- <% ab_test(:try_button_v2, header.sign_up_text.map { |s| ["{ #{t(".#{s}")} }", "< #{t(".#{s}")} />"] }.flatten) do |s| %>
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>
@@ -26,7 +26,8 @@ const GSM_STANDARD_CHARS = [
26
26
  '§', 'o', 'à', 'Δ', 'Φ',
27
27
  'Γ', 'Λ', 'Ω', 'Π', 'Ψ',
28
28
  'Σ', 'Θ', 'Ξ', 'Ö', 'Ä',
29
- 'Ü', 'ø', ' ', '\r', '\n'
29
+ 'Ü', 'ø', ' ', '\r', '\n',
30
+ '¤', '&'
30
31
  ]
31
32
 
32
33
  const GSM_EXTENDED_CHARS = [
@@ -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-03-28T14:51:57+00:00","size":2,"digest":"75a11da44c802486bc6f65640aa48a730f0f684c5c07a42ba3cd1735eb3fb070","integrity":"sha256-daEdpEyAJIa8b2VkCqSKcw8PaExcB6Qro80XNes/sHA="},"application-aa88b3c7bd34ec529f43849541752fda7c9c202aa9fff905be578ef88d103b46.js":{"logical_path":"application.js","mtime":"2022-03-28T14:51:57+00:00","size":3172,"digest":"67f1fd16f949c2794341a44cf839e5436bbef74436e043ead39890d1c3b2e583","integrity":"sha256-Z/H9FvlJwnlDQaRM+DnlQ2u+90Q24EPq05iQ0cOy5YM="},"application-e3c324ace3db5c0bf10139460f7f1efb017f04bbeb729bd8d34b308de0852c20.css":{"logical_path":"application.css","mtime":"2022-03-28T14:51:57+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"}}
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"}}