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).first[:url] r.redirect link 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