diff --git a/docs/content/functions/scratch.md b/docs/content/functions/scratch.md index a827db543..b8fc0e59c 100644 --- a/docs/content/functions/scratch.md +++ b/docs/content/functions/scratch.md @@ -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. * `SetInMap` takes a `key`, `mapKey` and `value` * `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. @@ -69,6 +70,11 @@ The usage is best illustrated with some samples: {{ $.Scratch.SetInMap "a3" "c" "CC" }} {{ $.Scratch.SetInMap "a3" "b" "BB" }} {{ $.Scratch.GetSortedMapValues "a3" }} {{/* => []interface {}{"AA", "BB", "CC"} */}} + +{{ $.Scratch.Add "a" 1 }} +{{ $.Scratch.Delete "a" }} +{{ $.Scratch.Add "a" 2 }} +{{ $.Scratch.Get "a" }} {{/* => 2 */}} ``` {{% note %}} diff --git a/hugolib/scratch.go b/hugolib/scratch.go index ca2c9d6a8..37ed5df35 100644 --- a/hugolib/scratch.go +++ b/hugolib/scratch.go @@ -73,6 +73,14 @@ func (c *Scratch) Set(key string, value interface{}) string { 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 func (c *Scratch) Get(key string) interface{} { c.mu.RLock() diff --git a/hugolib/scratch_test.go b/hugolib/scratch_test.go index f65c2ddfe..5ec2b89c8 100644 --- a/hugolib/scratch_test.go +++ b/hugolib/scratch_test.go @@ -87,6 +87,15 @@ func TestScratchSet(t *testing.T) { 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 func TestScratchInParallel(t *testing.T) { var wg sync.WaitGroup