url-shortener/app.rb

46 lines
1.1 KiB
Ruby

require 'roda'
require 'securerandom'
require 'json'
require 'sequel'
class App < Roda
plugin :sessions, secret: ENV.delete('APP_SESSION_SECRET')
plugin :render, escape: true
plugin :flash
DB = Sequel.sqlite("db/#{ENV['DB_NAME']}")
links = DB[:links]
route do |r|
r.root do
@message = flash['message'] || "Enter a URL"
view :home
end
r.get String do | url_code |
link = links.filter(:code => url_code)
if link.first.nil?
flash['message'] = "Link #{url_code} doesn't exist"
r.redirect '/'
end
r.redirect link.first[:url]
end
r.post "create" do
url = r.params['url']
if url.empty?
flash['message'] = "Please enter a valid URL";
r.redirect '/'
end
if nil == links.filter(:url => url).first
code = SecureRandom.urlsafe_base64 4
links.insert(url: url, code: code)
@message = "Link created"
end
@message ||= "Link exists"
@new_link = 'http://' + request.env['HTTP_HOST'] + '/' + links.filter(:url => url).first[:code]
view :create
end
end
end