summaryrefslogtreecommitdiffstats
path: root/lib/puppet
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet')
-rw-r--r--lib/puppet/network/controller.rb30
-rw-r--r--lib/puppet/network/http/mongrel/rest.rb45
2 files changed, 42 insertions, 33 deletions
diff --git a/lib/puppet/network/controller.rb b/lib/puppet/network/controller.rb
deleted file mode 100644
index 7e4cca643..000000000
--- a/lib/puppet/network/controller.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-class Puppet::Network::Controller
- def initialize(args = {})
- raise ArgumentError, ":indirection is required" unless args[:indirection]
- @indirection = args[:indirection]
- @klass = model_class_from_indirection_name(@indirection)
- end
-
- def find(args = {})
- @klass.find(args)
- end
-
- def destroy(args = {})
- @klass.destroy(args)
- end
-
- def search(args = {})
- @klass.search(args)
- end
-
- def save(args = {})
- instance = @klass.new(args)
- instance.save
- end
-
- private
-
- def model_class_from_indirection_name
- Class.new # TODO : FIXME make this the indirection class
- end
-end
diff --git a/lib/puppet/network/http/mongrel/rest.rb b/lib/puppet/network/http/mongrel/rest.rb
index 452dafa85..f9a6e3796 100644
--- a/lib/puppet/network/http/mongrel/rest.rb
+++ b/lib/puppet/network/http/mongrel/rest.rb
@@ -5,16 +5,55 @@ class Puppet::Network::HTTP::MongrelREST
register_handler
end
+ # handle an HTTP request coming from Mongrel
+ def process(request, response)
+ return @model.find if get?(request) and singular?(request)
+ return @model.search if get?(request) and plural?(request)
+ return @model.destroy if delete?(request) and singular?(request)
+ return @model.new.save if put?(request) and singular?(request)
+ raise ArgumentError, "Did not understand HTTP #{http_method(request)} request for '#{path(request)}'"
+ # TODO: here, raise an exception, or do some defaulting or something
+ end
+
private
+ def find_model_for_handler(handler)
+ Puppet::Indirector::Indirection.model(handler) ||
+ raise(ArgumentError, "Cannot locate indirection [#{handler}].")
+ end
+
+ def get?(request)
+ http_method(request) == 'GET'
+ end
+
+ def put?(request)
+ http_method(request) == 'PUT'
+ end
+
+ def delete?(request)
+ http_method(request) == 'DELETE'
+ end
+
+ def singular?(request)
+ %r{/#{@handler.to_s}$}.match(path(request))
+ end
+
+ def plural?(request)
+ %r{/#{@handler.to_s}s$}.match(path(request))
+ end
+
def register_handler
@model = find_model_for_handler(@handler)
@server.register('/' + @handler.to_s, self)
@server.register('/' + @handler.to_s + 's', self)
end
- def find_model_for_handler(handler)
- Puppet::Indirector::Indirection.model(handler) ||
- raise(ArgumentError, "Cannot locate indirection [#{handler}].")
+ def http_method(request)
+ request.params[Mongrel::Const::REQUEST_METHOD]
end
+
+ def path(request)
+ request.params[Mongrel::Const::REQUEST_PATH]
+ end
+
end