resource: Make resource counters for name and title independent
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Mon, 29 Jan 2018 09:44:09 +0000 (10:44 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Mon, 29 Jan 2018 09:44:09 +0000 (10:44 +0100)
This is the most flexible with the current syntax, and probably what most people would expcect.

Updates #4335

resource/resource.go
resource/resource_test.go

index dfda1ae7a901cb5a63959ed3722755cedc0ce317..da62db65cb834d61df2c930dd54d7f9dfaf5c641 100644 (file)
@@ -464,10 +464,10 @@ func AssignMetadata(metadata []map[string]interface{}, resources ...Resource) er
                }
 
                var (
-                       nameSet, titleSet bool
-                       currentCounter    = 0
-                       counterFound      bool
-                       resourceSrcKey    = strings.ToLower(r.Name())
+                       nameSet, titleSet                   bool
+                       nameCounter, titleCounter           = 0, 0
+                       nameCounterFound, titleCounterFound bool
+                       resourceSrcKey                      = strings.ToLower(r.Name())
                )
 
                ma := r.(metaAssigner)
@@ -491,15 +491,16 @@ func AssignMetadata(metadata []map[string]interface{}, resources ...Resource) er
                                        name, found := meta["name"]
                                        if found {
                                                name := cast.ToString(name)
-                                               if !counterFound {
-                                                       counterFound = strings.Contains(name, counterPlaceHolder)
+                                               if !nameCounterFound {
+                                                       nameCounterFound = strings.Contains(name, counterPlaceHolder)
                                                }
-                                               if counterFound && currentCounter == 0 {
-                                                       currentCounter = counters[srcKey] + 1
-                                                       counters[srcKey] = currentCounter
+                                               if nameCounterFound && nameCounter == 0 {
+                                                       counterKey := "name_" + srcKey
+                                                       nameCounter = counters[counterKey] + 1
+                                                       counters[counterKey] = nameCounter
                                                }
 
-                                               ma.setName(replaceResourcePlaceholders(name, currentCounter))
+                                               ma.setName(replaceResourcePlaceholders(name, nameCounter))
                                                nameSet = true
                                        }
                                }
@@ -508,14 +509,15 @@ func AssignMetadata(metadata []map[string]interface{}, resources ...Resource) er
                                        title, found := meta["title"]
                                        if found {
                                                title := cast.ToString(title)
-                                               if !counterFound {
-                                                       counterFound = strings.Contains(title, counterPlaceHolder)
+                                               if !titleCounterFound {
+                                                       titleCounterFound = strings.Contains(title, counterPlaceHolder)
                                                }
-                                               if counterFound && currentCounter == 0 {
-                                                       currentCounter = counters[srcKey] + 1
-                                                       counters[srcKey] = currentCounter
+                                               if titleCounterFound && titleCounter == 0 {
+                                                       counterKey := "title_" + srcKey
+                                                       titleCounter = counters[counterKey] + 1
+                                                       counters[counterKey] = titleCounter
                                                }
-                                               ma.setTitle((replaceResourcePlaceholders(title, currentCounter)))
+                                               ma.setTitle((replaceResourcePlaceholders(title, titleCounter)))
                                                titleSet = true
                                        }
                                }
index fc6416e6aad43c9afa12342bf5a60ae0c766df1c..1ff97984633e6b72398b42a82c0a368afb9420de 100644 (file)
@@ -280,14 +280,14 @@ func TestAssignMetadata(t *testing.T) {
                        },
                }, func(err error) {
                        assert.NoError(err)
-                       assert.Equal("Resource #1", logo2.Title())
+                       assert.Equal("Resource #2", logo2.Title())
                        assert.Equal("Logo Name #1", logo2.Name())
-                       assert.Equal("Resource #2", logo1.Title())
+                       assert.Equal("Resource #4", logo1.Title())
                        assert.Equal("Logo Name #2", logo1.Name())
                        assert.Equal("Resource #1", foo2.Title())
-                       assert.Equal("Resource #2", foo1.Title())
+                       assert.Equal("Resource #3", foo1.Title())
                        assert.Equal("Name #2", foo1.Name())
-                       assert.Equal("Resource #3", foo3.Title())
+                       assert.Equal("Resource #5", foo3.Title())
 
                        assert.Equal(logo2, resources.GetByPrefix("logo name #1"))
 
@@ -305,15 +305,13 @@ func TestAssignMetadata(t *testing.T) {
                }, func(err error) {
                        assert.NoError(err)
                        assert.Equal("Third Logo #1", logo3.Title())
-                       assert.Equal("Name #1", logo3.Name())
+                       assert.Equal("Name #3", logo3.Name())
                        assert.Equal("Other Logo #1", logo2.Title())
                        assert.Equal("Name #1", logo2.Name())
                        assert.Equal("Other Logo #2", logo1.Title())
                        assert.Equal("Name #2", logo1.Name())
 
                }},
-               // Start counting first time :counter is used
-               // See https://github.com/gohugoio/hugo/issues/4335
                {[]map[string]interface{}{
                        map[string]interface{}{
                                "title": "Third Logo",