-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontrollers.rb
90 lines (73 loc) · 1.65 KB
/
controllers.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
require './models'
module Controllers
class NotFoundException < Exception; end
class Controller
attr_accessor :request
def initialize(request)
@request = request
end
def route
collection_pattern = /\/#{resource_name}$/
member_pattern = /\/#{resource_name}\/([a-z0-9\-]+)/
#collection actions
if request.path =~ collection_pattern
if request.get?
return index
elsif request.post?
return create
else
return [405, ""]
end
end
#member actions
if request.path =~ member_pattern
request.params["id"] = request.path.match(member_pattern)[1]
if request.get?
# show <=> read
return show
elsif request.put?
return update
elsif request.delete?
return destroy
else
return [405, ""]
end
end
#a not implemented path was requested
return [501, ""]
end
def dispatch
begin
route
rescue NotFoundException
[404, ""]
rescue
[500, ""]
end
end
end
class QuotesController < Controller
include Models
def resource_name
"quotes"
end
def index
[200, Quote.all.map(&:as_text).join("\n")]
end
def show
quote = Quote.find(request.params["id"])
if quote
[200, quote.as_text]
else
raise NotFoundException
end
end
def create
quote = Quote.create(
content: request.params["content"],
author: request.params["author"]
)
[201, quote.as_text]
end
end
end