Browse code

engine: allow registering a "catchall" handler which receives all commands

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)

Solomon Hykes authored on 2014/04/24 16:36:21
Showing 1 changed files
... ...
@@ -43,6 +43,7 @@ func unregister(name string) {
43 43
 // containers by executing *jobs*.
44 44
 type Engine struct {
45 45
 	handlers map[string]Handler
46
+	catchall Handler
46 47
 	hack     Hack // data for temporary hackery (see hack.go)
47 48
 	id       string
48 49
 	Stdout   io.Writer
... ...
@@ -60,6 +61,10 @@ func (eng *Engine) Register(name string, handler Handler) error {
60 60
 	return nil
61 61
 }
62 62
 
63
+func (eng *Engine) RegisterCatchall(catchall Handler) {
64
+	eng.catchall = catchall
65
+}
66
+
63 67
 // New initializes a new engine.
64 68
 func New() *Engine {
65 69
 	eng := &Engine{
... ...
@@ -113,9 +118,13 @@ func (eng *Engine) Job(name string, args ...string) *Job {
113 113
 	if eng.Logging {
114 114
 		job.Stderr.Add(utils.NopWriteCloser(eng.Stderr))
115 115
 	}
116
-	handler, exists := eng.handlers[name]
117
-	if exists {
118
-		job.handler = handler
116
+	if eng.catchall != nil {
117
+		job.handler = eng.catchall
118
+	} else {
119
+		handler, exists := eng.handlers[name]
120
+		if exists {
121
+			job.handler = handler
122
+		}
119 123
 	}
120 124
 	return job
121 125
 }