common/maps: Add Scratch.Values

Fixes #7335
This commit is contained in:
Bjørn Erik Pedersen 2020-05-29 18:50:12 +02:00
parent 432885c499
commit 2919a6a503
3 changed files with 18 additions and 1 deletions

View file

@ -107,6 +107,15 @@ func (c *Scratch) Get(key string) interface{} {
return val 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. // SetInMap stores a value to a map with the given key in the Node context.
// This map can later be retrieved with GetSortedMapValues. // This map can later be retrieved with GetSortedMapValues.
func (c *Scratch) SetInMap(key string, mapKey string, value interface{}) string { func (c *Scratch) SetInMap(key string, mapKey string, value interface{}) string {
@ -147,7 +156,7 @@ func (c *Scratch) GetSortedMapValues(key string) interface{} {
return sortedArray return sortedArray
} }
// NewScratch returns a new instance Scratch. // NewScratch returns a new instance of Scratch.
func NewScratch() *Scratch { func NewScratch() *Scratch {
return &Scratch{values: make(map[string]interface{})} return &Scratch{values: make(map[string]interface{})}
} }

View file

@ -47,6 +47,9 @@ func TestScratchAdd(t *testing.T) {
scratch.Add("scratch", scratch) scratch.Add("scratch", scratch)
_, err := scratch.Add("scratch", scratch) _, err := scratch.Add("scratch", scratch)
m := scratch.Values()
c.Assert(m, qt.HasLen, 5)
if err == nil { if err == nil {
t.Errorf("Expected error from invalid arithmetic") t.Errorf("Expected error from invalid arithmetic")
} }

View file

@ -113,6 +113,11 @@ Removes the given key
{{ .Scratch.Delete "greetings" }} {{ .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 ## Scope
The scope of the backing data is global for the given `Page` or `Shortcode`, and spans partial and shortcode includes. The scope of the backing data is global for the given `Page` or `Shortcode`, and spans partial and shortcode includes.