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.

Methods

delete   get   new   post   process   put  

Attributes

view_store  [RW]  The underlying document store

Public Class methods

Initialize the handler with the given view store.

[Source]

    # File lib/rddb/server/view_handler.rb, line 11
11:       def initialize(view_store)
12:         @view_store = view_store
13:       end

Public Instance methods

Process the HTTP request

[Source]

    # 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

Protected Instance methods

Implementation of the DELETE method.

[Source]

     # 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.

[Source]

    # 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).

[Source]

    # 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.

[Source]

    # 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

[Validate]