30 lines
655 B
Ruby
30 lines
655 B
Ruby
require 'roda'
|
|
require 'securerandom'
|
|
require 'json'
|
|
require 'sequel'
|
|
require 'logger'
|
|
|
|
class App < Roda
|
|
DB = Sequel.sqlite('db/url_shortener.db')
|
|
links = DB[:links]
|
|
plugin :render, escape: true
|
|
route do |r|
|
|
r.root do
|
|
view :home
|
|
end
|
|
|
|
r.get String do | url_code |
|
|
link = links.filter(:code => url_code).first[:url]
|
|
r.redirect link
|
|
end
|
|
|
|
r.post "create" do
|
|
url = r.params['url']
|
|
code = SecureRandom.urlsafe_base64 4
|
|
links.insert(url: url, code: code)
|
|
@new_link = 'http://' + request.env['HTTP_HOST'] + '/' + links.filter(:url => url).first[:code]
|
|
view :create
|
|
end
|
|
end
|
|
end
|