hugolib: Add Reset method to delete key from Scratch

This commit is contained in:
cmal 2018-03-17 00:13:23 +01:00 committed by Bjørn Erik Pedersen
parent 10fef32de6
commit e46ab29bd2
3 changed files with 23 additions and 0 deletions

View file

@ -32,6 +32,7 @@ See [this Go issue](https://github.com/golang/go/issues/10608) for the main moti
* `Get` returns the `value` for the `key` given. * `Get` returns the `value` for the `key` given.
* `SetInMap` takes a `key`, `mapKey` and `value` * `SetInMap` takes a `key`, `mapKey` and `value`
* `GetSortedMapValues` returns array of values from `key` sorted by `mapKey` * `GetSortedMapValues` returns array of values from `key` sorted by `mapKey`
* `Delete` takes a `key` to remove
`Set` and `SetInMap` can store values of any type. `Set` and `SetInMap` can store values of any type.
@ -69,6 +70,11 @@ The usage is best illustrated with some samples:
{{ $.Scratch.SetInMap "a3" "c" "CC" }} {{ $.Scratch.SetInMap "a3" "c" "CC" }}
{{ $.Scratch.SetInMap "a3" "b" "BB" }} {{ $.Scratch.SetInMap "a3" "b" "BB" }}
{{ $.Scratch.GetSortedMapValues "a3" }} {{/* => []interface {}{"AA", "BB", "CC"} */}} {{ $.Scratch.GetSortedMapValues "a3" }} {{/* => []interface {}{"AA", "BB", "CC"} */}}
{{ $.Scratch.Add "a" 1 }}
{{ $.Scratch.Delete "a" }}
{{ $.Scratch.Add "a" 2 }}
{{ $.Scratch.Get "a" }} {{/* => 2 */}}
``` ```
{{% note %}} {{% note %}}

View file

@ -73,6 +73,14 @@ func (c *Scratch) Set(key string, value interface{}) string {
return "" return ""
} }
// Reset deletes the given key
func (c *Scratch) Delete(key string) string {
c.mu.Lock()
delete(c.values, key)
c.mu.Unlock()
return ""
}
// Get returns a value previously set by Add or Set // Get returns a value previously set by Add or Set
func (c *Scratch) Get(key string) interface{} { func (c *Scratch) Get(key string) interface{} {
c.mu.RLock() c.mu.RLock()

View file

@ -87,6 +87,15 @@ func TestScratchSet(t *testing.T) {
assert.Equal(t, "val", scratch.Get("key")) assert.Equal(t, "val", scratch.Get("key"))
} }
func TestScratchDelete(t *testing.T) {
t.Parallel()
scratch := newScratch()
scratch.Set("key", "val")
scratch.Delete("key")
scratch.Add("key", "Lucy Parsons")
assert.Equal(t, "Lucy Parsons", scratch.Get("key"))
}
// Issue #2005 // Issue #2005
func TestScratchInParallel(t *testing.T) { func TestScratchInParallel(t *testing.T) {
var wg sync.WaitGroup var wg sync.WaitGroup