-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathapp.rb
executable file
·89 lines (75 loc) · 2.04 KB
/
app.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
require "date"
require "cuba"
require "rack/protection"
require "rack/csrf"
require "cuba/render"
Cuba.use Rack::Static, urls: %w(/stylesheets /images), root: "public"
Cuba.use Rack::ShowExceptions
Cuba.use Rack::Session::Cookie
Cuba.use Rack::Protection
Cuba.use Rack::Protection::RemoteReferrer
Cuba.use Rack::Csrf, raise: true
Cuba.plugin Cuba::Render
require_relative "models/user"
require_relative "models/task"
require_relative "lib/authenticated_system"
require_relative "lib/view_helper"
require_relative "lib/date_helper"
require_relative "lib/string_ext"
include AuthenticatedSystem
include ViewHelper
include DateHelper
Cuba.define do
on get do
on root do
_render "index"
end
on "login" do
_render "session/new"
end
on "seed" do
login_required
Task.delete_all
system "cd #{File.dirname __FILE__} && rake db:seed"
res.write "done."
end
on "tasks/(\\d{1,2})/(\\d{1,2})/(\\d{2,4})" do |day, month, year|
login_required
due_date = parse_date(day, month, year)
if due_date
tasks = Task.due_on(due_date)
_render "tasks/index", {tasks: tasks, due_date: due_date}
else
res.redirect "/tasks"
end
end
on "tasks" do
login_required
due_date = Date.today
tasks = Task.due_on(due_date)
_render "tasks/index", {tasks: tasks, due_date: due_date}
end
end
on post do
on "session" do
on root do
on param("email"), param("password") do |email, password|
user = User.find_by_email(email)
if user && user.authenticated_by?(password)
session["email"] = email
res.redirect "/tasks"
else
_render "session/new", {}, error: "Invalid email or password"
end
end
on true do
_render "session/new", {}, error: "Email or password missing"
end
end
on "destroy" do
session["email"] = nil
res.redirect "/"
end
end
end
end