-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathidea.rb
105 lines (90 loc) · 1.93 KB
/
idea.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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
require 'sinatra'
require 'data_mapper'
require 'rdiscount'
DataMapper::Logger.new($stdout, :debug)
DataMapper.setup(:default, ENV.fetch('DATABASE_URL', "sqlite3://#{Dir.pwd}/data.db"))
configure do
enable :static
end
class Idea
include DataMapper::Resource
property :id, Serial
property :title, String, :length => 255
property :text, Text
property :complete, Boolean
property :completion_time, DateTime
property :created, DateTime
property :karma, Integer, :default => 1
end
DataMapper.finalize.auto_upgrade!
get '/' do
@ideas = Idea.all :order => [ :karma.desc, :id.desc ]
@title = "List"
erb :ideas
end
post '/' do
@idea = Idea.create(
:title => params[:title],
:text => params[:ideatext],
:created => Time.now
)
redirect '/'
end
get '/:id' do
lidea = Idea.get params[:id]
if lidea == nil
redirect '/'
end
@idea = lidea
@title = "Idea: " + lidea.title
erb :permalink
end
post '/:id' do
idea = Idea.get params[:id]
return "Idea ##{params[:id]} not found." if not idea
idea.update(
:title => params[:title],
:text => params[:ideatext],
)
redirect '/'
end
get '/:id/upvote' do
idea = Idea.get params[:id]
redirect '/' if not idea
idea.karma += 1
idea.save!
redirect back
end
get '/:id/downvote' do
idea = Idea.get params[:id]
redirect '/' if not idea
idea.karma -= 1
idea.save!
redirect back
end
get '/:id/complete' do
idea = Idea.get params[:id]
redirect '/' if not idea
idea.complete = true
idea.completion_time = Time.now
idea.save!
redirect back
end
get '/:id/uncomplete' do
idea = Idea.get params[:id]
redirect '/' if not idea
idea.complete = false
idea.completion_time = nil
idea.save!
redirect back
end
get '/:id/delete' do
@idea = Idea.get params[:id]
@title = "Deleting " + @idea.title
erb :delete
end
delete '/:id' do
idea = Idea.get params[:id]
idea.destroy || "Could not find an idea with that title."
redirect '/'
end