summaryrefslogtreecommitdiffstats
path: root/lib/puppet/network/rest_server.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/network/rest_server.rb')
-rw-r--r--lib/puppet/network/rest_server.rb37
1 files changed, 36 insertions, 1 deletions
diff --git a/lib/puppet/network/rest_server.rb b/lib/puppet/network/rest_server.rb
index e415e8bcb..d1206928c 100644
--- a/lib/puppet/network/rest_server.rb
+++ b/lib/puppet/network/rest_server.rb
@@ -1,2 +1,37 @@
-class Puppet::Network::RESTServer # :nodoc:
+class Puppet::Network::RESTServer
+ attr_reader :server
+
+ def initialize(args = {})
+ raise(ArgumentError, "requires :server to be specified") unless args[:server]
+ @routes = {}
+ @listening = false
+ @server = args[:server]
+ end
+
+ def register(*indirections)
+ raise ArgumentError, "indirection names are required" if indirections.empty?
+ indirections.flatten.each { |i| @routes[i.to_sym] = true }
+ end
+
+ def unregister(*indirections)
+ indirections = @routes.keys if indirections.empty?
+ indirections.flatten.each do |i|
+ raise(ArgumentError, "indirection [%s] is not known" % i) unless @routes[i.to_sym]
+ @routes.delete(i.to_sym)
+ end
+ end
+
+ def listening?
+ @listening
+ end
+
+ def listen
+ raise "Cannot listen -- already listening" if listening?
+ @listening = true
+ end
+
+ def unlisten
+ raise "Cannot unlisten -- not currently listening" unless listening?
+ @listening = false
+ end
end