rubocop autofixed formatting
parent
18e8eac2ab
commit
4f54124519
65
app.rb
65
app.rb
|
|
@ -1,9 +1,12 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require 'roda'
|
require 'roda'
|
||||||
require 'securerandom'
|
require 'securerandom'
|
||||||
require 'json'
|
require 'json'
|
||||||
require 'sequel'
|
require 'sequel'
|
||||||
require 'open-uri'
|
require 'open-uri'
|
||||||
|
|
||||||
|
# URL Shortener App class
|
||||||
class App < Roda
|
class App < Roda
|
||||||
plugin :sessions, secret: ENV.delete('APP_SESSION_SECRET')
|
plugin :sessions, secret: ENV.delete('APP_SESSION_SECRET')
|
||||||
plugin :render, escape: true
|
plugin :render, escape: true
|
||||||
|
|
@ -11,92 +14,92 @@ class App < Roda
|
||||||
plugin :json_parser
|
plugin :json_parser
|
||||||
plugin :request_headers
|
plugin :request_headers
|
||||||
|
|
||||||
DB = Sequel.sqlite("db/#{ENV['DB_NAME']}")
|
DB = Sequel.sqlite("db/#{ENV.fetch('DB_NAME', nil)}")
|
||||||
links = DB[:links]
|
links = DB[:links]
|
||||||
|
|
||||||
route do |r|
|
route do |r|
|
||||||
r.root do
|
r.root do
|
||||||
@message = flash['message'] || "Enter a URL"
|
@message = flash['message'] || 'Enter a URL'
|
||||||
view :home
|
view :home
|
||||||
end
|
end
|
||||||
|
|
||||||
r.get String do | url_code |
|
r.get String do |url_code|
|
||||||
link = links.filter(:code => url_code)
|
link = links.filter(code: url_code)
|
||||||
r.redirect link.first[:url] unless link.first.nil?
|
r.redirect link.first[:url] unless link.first.nil?
|
||||||
@message = "Link #{url_code} doesn't exist"
|
@message = "Link #{url_code} doesn't exist"
|
||||||
response.status = 404
|
response.status = 404
|
||||||
view :home
|
view :home
|
||||||
end
|
end
|
||||||
|
|
||||||
r.post "create" do
|
r.post 'create' do
|
||||||
url = r.params['url']
|
url = r.params['url']
|
||||||
if url.nil? or url.empty?
|
if url.nil? || url.empty?
|
||||||
flash['message'] = "Please enter a valid URL";
|
flash['message'] = 'Please enter a valid URL'
|
||||||
r.redirect '/'
|
r.redirect '/'
|
||||||
end
|
end
|
||||||
|
|
||||||
begin
|
begin
|
||||||
OpenURI.open_uri(url)
|
OpenURI.open_uri(url)
|
||||||
rescue URI::BadURIError
|
rescue URI::BadURIError
|
||||||
flash['message'] = "Invalid URL"
|
flash['message'] = 'Invalid URL'
|
||||||
r.redirect '/'
|
r.redirect '/'
|
||||||
rescue OpenURI::HTTPError
|
rescue OpenURI::HTTPError
|
||||||
flash['message'] = "URL not found"
|
flash['message'] = 'URL not found'
|
||||||
r.redirect '/'
|
r.redirect '/'
|
||||||
rescue SocketError => e
|
rescue SocketError
|
||||||
flash['message'] = "URL does not resolve"
|
flash['message'] = 'URL does not resolve'
|
||||||
r.redirect '/'
|
r.redirect '/'
|
||||||
end
|
end
|
||||||
|
|
||||||
if links.filter(:url => url).first.nil?
|
if links.filter(url:).first.nil?
|
||||||
code = SecureRandom.urlsafe_base64 4
|
code = SecureRandom.urlsafe_base64 4
|
||||||
links.insert(url: url, code: code)
|
links.insert(url:, code:)
|
||||||
@message = "Link created"
|
@message = 'Link created'
|
||||||
end
|
end
|
||||||
code = links.filter(:url => url).first[:code]
|
code = links.filter(url:).first[:code]
|
||||||
@message ||= "Link exists"
|
@message ||= 'Link exists'
|
||||||
@new_link = 'http://' + request.env['HTTP_HOST'] + '/' + code
|
@new_link = "http://#{request.env['HTTP_HOST']}/#{code}"
|
||||||
view :create
|
view :create
|
||||||
end
|
end
|
||||||
r.on "links" do
|
r.on 'links' do
|
||||||
r.post do
|
r.post do
|
||||||
if 'application/json' != r.headers['CONTENT_TYPE']
|
if r.headers['CONTENT_TYPE'] != 'application/json'
|
||||||
response.status = 400
|
response.status = 400
|
||||||
return {message: "not a valid json request"}.to_json
|
return { message: 'not a valid json request' }.to_json
|
||||||
end
|
end
|
||||||
|
|
||||||
url = r.params['url']
|
url = r.params['url']
|
||||||
if url.nil?
|
if url.nil?
|
||||||
response.status = 400
|
response.status = 400
|
||||||
return {message: "missing url parameter"}.to_json
|
return { message: 'missing url parameter' }.to_json
|
||||||
end
|
end
|
||||||
|
|
||||||
if url.empty?
|
if url.empty?
|
||||||
response.status = 400
|
response.status = 400
|
||||||
return {message: "invalid url parameter"}.to_json
|
return { message: 'invalid url parameter' }.to_json
|
||||||
end
|
end
|
||||||
|
|
||||||
begin
|
begin
|
||||||
OpenURI.open_uri(url)
|
OpenURI.open_uri(url)
|
||||||
rescue URI::BadURIError
|
rescue URI::BadURIError
|
||||||
response.status = 400
|
response.status = 400
|
||||||
return {message: "invalid url parameter"}.to_json
|
return { message: 'invalid url parameter' }.to_json
|
||||||
rescue OpenURI::HTTPError
|
rescue OpenURI::HTTPError
|
||||||
response.status = 400
|
response.status = 400
|
||||||
return {message: "url not found"}.to_json
|
return { message: 'url not found' }.to_json
|
||||||
rescue SocketError => e
|
rescue SocketError
|
||||||
response.status = 400
|
response.status = 400
|
||||||
return {message: "url does not resolve"}.to_json
|
return { message: 'url does not resolve' }.to_json
|
||||||
end
|
end
|
||||||
|
|
||||||
if links.filter(:url => url).first.nil?
|
if links.filter(url:).first.nil?
|
||||||
code = SecureRandom.urlsafe_base64 4
|
code = SecureRandom.urlsafe_base64 4
|
||||||
links.insert(url: url, code: code)
|
links.insert(url:, code:)
|
||||||
end
|
end
|
||||||
|
|
||||||
code = links.filter(:url => url).first[:code]
|
code = links.filter(url:).first[:code]
|
||||||
@new_link = 'http://' + request.env['HTTP_HOST'] + '/' + code
|
@new_link = "http://#{request.env['HTTP_HOST']}/#{code}"
|
||||||
return {url: url, code: code, link: @new_link}.to_json
|
return { url:, code:, link: @new_link }.to_json
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue