From da513c322191274b2443deafded9feb1bef1f1f4 Mon Sep 17 00:00:00 2001 From: pjvds Date: Sat, 13 Jul 2013 20:43:52 +0200 Subject: [PATCH 1/9] Adds GetAll method GetAll returns all stored values for the request as a map. --- context.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/context.go b/context.go index 12accb1..4547242 100644 --- a/context.go +++ b/context.go @@ -48,6 +48,16 @@ func GetOk(r *http.Request, key interface{}) (interface{}, bool) { return nil, false } +// GetAll returns all stored values for the request as a map. +func GetAll(r *http.Request) (map[interface{}]interface{}, bool) { + mutex.Lock() + defer mutex.Unlock() + if all, ok := data[r]; ok { + return all, ok + } + return nil, false +} + // Delete removes a value stored for a given key in a given request. func Delete(r *http.Request, key interface{}) { mutex.Lock() From fac5866e50388a49ba64cdbf9706d343514ad93b Mon Sep 17 00:00:00 2001 From: Pieter Joost van de Sande Date: Sat, 13 Jul 2013 21:04:36 +0200 Subject: [PATCH 2/9] Adds test for GetAll for existing request --- context_test.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/context_test.go b/context_test.go index ff9e2ad..b1b433b 100644 --- a/context_test.go +++ b/context_test.go @@ -51,6 +51,11 @@ func TestContext(t *testing.T) { assertEqual(value, nil) assertEqual(ok, true) + // GetAll() + values, ok := GetAll(r) + assertEqual(ok, true) + assertEqual(len(values), 3) + // Delete() Delete(r, key1) assertEqual(Get(r, key1), nil) From 6405b672ffe015cd83adf52c56bc95fab7854dce Mon Sep 17 00:00:00 2001 From: Pieter Joost van de Sande Date: Sat, 13 Jul 2013 21:06:50 +0200 Subject: [PATCH 3/9] Adds test for GetAll for empty request --- context_test.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/context_test.go b/context_test.go index b1b433b..817a749 100644 --- a/context_test.go +++ b/context_test.go @@ -24,6 +24,7 @@ func TestContext(t *testing.T) { } r, _ := http.NewRequest("GET", "http://localhost:8080/", nil) + emptyR, _ := http.NewRequest("GET", "http://localhost:8080/", nil) // Get() assertEqual(Get(r, key1), nil) @@ -56,6 +57,10 @@ func TestContext(t *testing.T) { assertEqual(ok, true) assertEqual(len(values), 3) + // GetAll() for empty request + values, ok = GetAll(emptyR) + assertEqual(ok, false) + // Delete() Delete(r, key1) assertEqual(Get(r, key1), nil) From 3e810b0ccc2a40ffaae9b422318df29732c84c2e Mon Sep 17 00:00:00 2001 From: Pieter Joost van de Sande Date: Sat, 13 Jul 2013 21:17:06 +0200 Subject: [PATCH 4/9] Return empty map when there are no values --- context.go | 9 ++++----- context_test.go | 7 +++---- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/context.go b/context.go index 4547242..095b16d 100644 --- a/context.go +++ b/context.go @@ -49,13 +49,12 @@ func GetOk(r *http.Request, key interface{}) (interface{}, bool) { } // GetAll returns all stored values for the request as a map. -func GetAll(r *http.Request) (map[interface{}]interface{}, bool) { +func GetAll(r *http.Request) map[interface{}]interface{} { mutex.Lock() defer mutex.Unlock() - if all, ok := data[r]; ok { - return all, ok - } - return nil, false + + context, _ := data[r] + return context } // Delete removes a value stored for a given key in a given request. diff --git a/context_test.go b/context_test.go index 817a749..ddbf3c7 100644 --- a/context_test.go +++ b/context_test.go @@ -53,13 +53,12 @@ func TestContext(t *testing.T) { assertEqual(ok, true) // GetAll() - values, ok := GetAll(r) - assertEqual(ok, true) + values := GetAll(r) assertEqual(len(values), 3) // GetAll() for empty request - values, ok = GetAll(emptyR) - assertEqual(ok, false) + values = GetAll(emptyR) + assertEqual(len(values), 0) // Delete() Delete(r, key1) From 77bafb62fdfb308442391933e5a0577f1f14d4f4 Mon Sep 17 00:00:00 2001 From: Pieter Joost van de Sande Date: Sun, 14 Jul 2013 10:51:35 +0200 Subject: [PATCH 5/9] Adds GetAllOk --- context.go | 10 ++++++++++ context_test.go | 10 ++++++++++ 2 files changed, 20 insertions(+) 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) From 08e2e8a9bc63e56764888f6519b58c2485b13b47 Mon Sep 17 00:00:00 2001 From: Pieter Joost van de Sande Date: Mon, 15 Jul 2013 17:28:51 +0200 Subject: [PATCH 6/9] Remove GetAllOk method and GetAll now returns nil for invalid request --- context.go | 10 ++++++---- context_test.go | 16 ++++------------ 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/context.go b/context.go index 8908d3f..f6f0117 100644 --- a/context.go +++ b/context.go @@ -48,13 +48,15 @@ func GetOk(r *http.Request, key interface{}) (interface{}, bool) { return nil, false } -// GetAll returns all stored values for the request as a map. -func GetAll(r *http.Request) map[interface{}]interface{} { +// GetAll returns all stored values for the request as a map. Nil is returned for invalid requests. +func GetAll(r *http.Request) *map[interface{}]interface{} { mutex.Lock() defer mutex.Unlock() - context, _ := data[r] - return context + if context, ok := data[r]; ok { + return &context + } + return nil } // GetAll returns all stored values for the request as a map. It returns not ok diff --git a/context_test.go b/context_test.go index 9f05974..0742c81 100644 --- a/context_test.go +++ b/context_test.go @@ -54,21 +54,13 @@ func TestContext(t *testing.T) { // GetAll() values := GetAll(r) - assertEqual(len(values), 3) + assertEqual(len(*values), 3) // GetAll() for empty request 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) + if values != nil { + t.Error("GetAll didn't return nil value for invalid request") + } // Delete() Delete(r, key1) From b680aaae68ec431913ded5e13f81c7929acc6615 Mon Sep 17 00:00:00 2001 From: Pieter Joost van de Sande Date: Mon, 15 Jul 2013 19:29:56 +0200 Subject: [PATCH 7/9] Return map instead of pointer value As kisielk just [told me](https://github.com/pjvds/context/commit/709e005f84167f4206737b8ba6c560d1ebb18b85#commitcomment-3636470), maps can be nil --- context.go | 4 ++-- context_test.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/context.go b/context.go index f6f0117..e5374db 100644 --- a/context.go +++ b/context.go @@ -49,12 +49,12 @@ func GetOk(r *http.Request, key interface{}) (interface{}, bool) { } // GetAll returns all stored values for the request as a map. Nil is returned for invalid requests. -func GetAll(r *http.Request) *map[interface{}]interface{} { +func GetAll(r *http.Request) map[interface{}]interface{} { mutex.Lock() defer mutex.Unlock() if context, ok := data[r]; ok { - return &context + return context } return nil } diff --git a/context_test.go b/context_test.go index 0742c81..68f25e9 100644 --- a/context_test.go +++ b/context_test.go @@ -54,7 +54,7 @@ func TestContext(t *testing.T) { // GetAll() values := GetAll(r) - assertEqual(len(*values), 3) + assertEqual(len(values), 3) // GetAll() for empty request values = GetAll(emptyR) From 8b602e76415dbfe4d6ef80cdbc49aaecc7155be4 Mon Sep 17 00:00:00 2001 From: Adam Mckaig Date: Thu, 6 Mar 2014 12:27:42 -0500 Subject: [PATCH 8/9] Fix docstring --- context.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/context.go b/context.go index e5374db..bcc3faa 100644 --- a/context.go +++ b/context.go @@ -59,8 +59,8 @@ func GetAll(r *http.Request) map[interface{}]interface{} { return nil } -// GetAll returns all stored values for the request as a map. It returns not ok -// if the request was never registered. +// GetAllOk 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() From 116fc839c218f1d5177797304d62acb8dcaa9e52 Mon Sep 17 00:00:00 2001 From: Adam Mckaig Date: Thu, 6 Mar 2014 12:31:25 -0500 Subject: [PATCH 9/9] Add tests for GetAllOk --- context_test.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/context_test.go b/context_test.go index 68f25e9..e1dca3b 100644 --- a/context_test.go +++ b/context_test.go @@ -62,6 +62,16 @@ func TestContext(t *testing.T) { t.Error("GetAll didn't return nil value for invalid request") } + // GetAllOk() + values, ok = GetAllOk(r) + assertEqual(len(values), 3) + assertEqual(ok, true) + + // GetAllOk() for empty request + values, ok = GetAllOk(emptyR) + assertEqual(value, nil) + assertEqual(ok, false) + // Delete() Delete(r, key1) assertEqual(Get(r, key1), nil)