| Class | Rddb::Server::ViewHandler |
| In: |
lib/rddb/server/view_handler.rb
|
| Parent: | Mongrel::HttpHandler |
ViewHandler is a mongrel HTTP handler that is used for retrieving and storing view descriptions via a REST interface.
| view_store | [RW] | The underlying document store |
Initialize the handler with the given view store.
# File lib/rddb/server/view_handler.rb, line 11
11: def initialize(view_store)
12: @view_store = view_store
13: end
Process the HTTP request
# File lib/rddb/server/view_handler.rb, line 16
16: def process(request, response)
17: #puts "Received #{request.method} request of type #{request.content_type} for #{request.host}:#{request.port}#{request.path}"
18: case request.method
19: when 'GET'
20: get(request, response)
21: when 'POST'
22: post(request, response)
23: when 'PUT'
24: put(request, response)
25: when 'DELETE'
26: delete(request, response)
27: else
28: response.start(405) do |head, out|
29: out.write("Unsupported method: #{request.method}.\n")
30: end
31: end
32: end
Implementation of the DELETE method.
# File lib/rddb/server/view_handler.rb, line 98
98: def delete(request, response)
99: view_name = request.path[0..-1]
100: begin
101: if view_store.exists?(view_name)
102: view_store.delete(view_name)
103: response.start(200) do |head, out|
104: out.write("The view #{view_name} was deleted.\n")
105: end
106: else
107: response.start(404) do |head, out|
108: out.write("The view #{view_name} does not exist.\n")
109: end
110: end
111: rescue => e
112: server_error(e, request, response)
113: end
114: end
Implementation of the GET method.
# File lib/rddb/server/view_handler.rb, line 36
36: def get(request, response)
37: view_name = request.path[0..-1]
38: begin
39: if view_name.empty?
40: response.start(403) do |head, out|
41: out.write("The root path is not allowed.\n")
42: return
43: end
44: end
45: view = view_store.find(view_name)
46: if view
47: response.start(200) do |head, out|
48: #head['Content-Type'] = ''
49: out.write(view)
50: end
51: else
52: response.start(404) do |head, out|
53: out.write("The view #{view_name} was not found.\n")
54: end
55: end
56: rescue => e
57: server_error(e, request, response)
58: end
59: end
Implementation of the POST method (will always return 403).
# File lib/rddb/server/view_handler.rb, line 62
62: def post(request, response)
63: begin
64: response.start(403) do |head, out|
65: out.write("The POST method is not allowed.\n")
66: end
67: rescue => e
68: server_error(e, request, response)
69: end
70: end
Implementation of the PUT method. This method will return 200 if the view already exists and is updated, or 201 if the view does not exist and is created.
# File lib/rddb/server/view_handler.rb, line 75
75: def put(request, response)
76: view_name = request.path[0..-1]
77: view_body = request.body.read
78: begin
79: if view_store.exists?(view_name)
80: view_store.store(view_name, view_body)
81: response.start(200) do |head, out|
82: head['Location'] = "/#{view_name}"
83: out.write("The view was updated.\n")
84: end
85: else
86: view_store.store(view_name, view_body)
87: response.start(201) do |head, out|
88: head['Location'] = "/#{view_name}"
89: out.write("The view was created.\n")
90: end
91: end
92: rescue => e
93: server_error(e, request, response)
94: end
95: end