diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-05-29 18:50:12 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-05-29 19:51:49 +0200 |
commit | 2919a6a503f7b369154d6eb787023a1fe58a9ad4 (patch) | |
tree | d2d1a4a73d67471a5ae62b394f6055aa5288f601 | |
parent | 432885c499849efb29d3e50196f377fe0e908333 (diff) |
common/maps: Add Scratch.Values
Fixes #7335
-rw-r--r-- | common/maps/scratch.go | 11 | ||||
-rw-r--r-- | common/maps/scratch_test.go | 3 | ||||
-rw-r--r-- | docs/content/en/functions/scratch.md | 5 |
3 files changed, 18 insertions, 1 deletions
diff --git a/common/maps/scratch.go b/common/maps/scratch.go index 4acd10c6c..7a3cd3748 100644 --- a/common/maps/scratch.go +++ b/common/maps/scratch.go @@ -107,6 +107,15 @@ func (c *Scratch) Get(key string) interface{} { return val } +// Values returns the raw backing map. Note that you should just use +// this method on the locally scoped Scratch instances you obtain via newScratch, not +// .Page.Scratch etc., as that will lead to concurrency issues. +func (c *Scratch) Values() map[string]interface{} { + c.mu.RLock() + defer c.mu.RUnlock() + return c.values +} + // SetInMap stores a value to a map with the given key in the Node context. // This map can later be retrieved with GetSortedMapValues. func (c *Scratch) SetInMap(key string, mapKey string, value interface{}) string { @@ -147,7 +156,7 @@ func (c *Scratch) GetSortedMapValues(key string) interface{} { return sortedArray } -// NewScratch returns a new instance Scratch. +// NewScratch returns a new instance of Scratch. func NewScratch() *Scratch { return &Scratch{values: make(map[string]interface{})} } diff --git a/common/maps/scratch_test.go b/common/maps/scratch_test.go index c2c436e40..40df3bb6b 100644 --- a/common/maps/scratch_test.go +++ b/common/maps/scratch_test.go @@ -47,6 +47,9 @@ func TestScratchAdd(t *testing.T) { scratch.Add("scratch", scratch) _, err := scratch.Add("scratch", scratch) + m := scratch.Values() + c.Assert(m, qt.HasLen, 5) + if err == nil { t.Errorf("Expected error from invalid arithmetic") } diff --git a/docs/content/en/functions/scratch.md b/docs/content/en/functions/scratch.md index 1a64bb2e3..10623b2cb 100644 --- a/docs/content/en/functions/scratch.md +++ b/docs/content/en/functions/scratch.md @@ -113,6 +113,11 @@ Removes the given key {{ .Scratch.Delete "greetings" }} ``` +#### .Values + +`Values` returns the raw backing map. Note that you should just use this method on the locally scoped `Scratch` instances you obtain via `newScratch`, not + `.Page.Scratch` etc., as that will lead to concurrency issues. + ## Scope The scope of the backing data is global for the given `Page` or `Shortcode`, and spans partial and shortcode includes. |