diff --git a/context.go b/context.go index 095b16d..8908d3f 100644 --- a/context.go +++ b/context.go @@ -57,6 +57,16 @@ func GetAll(r *http.Request) map[interface{}]interface{} { return context } +// GetAll returns all stored values for the request as a map. It returns not ok +// if the request was never registered. +func GetAllOk(r *http.Request) (map[interface{}]interface{}, bool) { + mutex.Lock() + defer mutex.Unlock() + + context, ok := data[r] + return context, ok +} + // Delete removes a value stored for a given key in a given request. func Delete(r *http.Request, key interface{}) { mutex.Lock() diff --git a/context_test.go b/context_test.go index ddbf3c7..9f05974 100644 --- a/context_test.go +++ b/context_test.go @@ -60,6 +60,16 @@ func TestContext(t *testing.T) { values = GetAll(emptyR) assertEqual(len(values), 0) + // GetAllOk() + values, ok = GetAllOk(r) + assertEqual(ok, true) + assertEqual(len(values), 3) + + // GetAllOk() for empty request + values, ok = GetAllOk(emptyR) + assertEqual(ok, false) + assertEqual(len(values), 0) + // Delete() Delete(r, key1) assertEqual(Get(r, key1), nil)