shithub: hugo

Download patch

ref: 46db900dab9c0e6fcd9d227f10a32fb24f5c8bd9
parent: 60c9f3b1c34b69771e25a66906f150f460d73223
author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
date: Fri Jan 12 13:06:35 EST 2018

resource: Implement Resources.ByPrefix

Fixes #4266

--- a/resource/resource.go
+++ b/resource/resource.go
@@ -72,20 +72,37 @@
 func (r Resources) GetByPrefix(prefix string) Resource {
 	prefix = strings.ToLower(prefix)
 	for _, resource := range r {
-		var name string
-		f, ok := resource.(source.File)
-		if ok {
-			name = f.BaseFileName()
-		} else {
-			_, name = filepath.Split(resource.RelPermalink())
-		}
-		name = strings.ToLower(name)
-
-		if strings.HasPrefix(name, prefix) {
+		if matchesPrefix(resource, prefix) {
 			return resource
 		}
 	}
 	return nil
+}
+
+// ByPrefix gets all resources matching the given base filename prefix, e.g
+// "logo" will match logo.png.
+func (r Resources) ByPrefix(prefix string) Resources {
+	var matches Resources
+	prefix = strings.ToLower(prefix)
+	for _, resource := range r {
+		if matchesPrefix(resource, prefix) {
+			matches = append(matches, resource)
+		}
+	}
+	return matches
+}
+
+func matchesPrefix(r Resource, prefix string) bool {
+	var name string
+	f, ok := r.(source.File)
+	if ok {
+		name = f.BaseFileName()
+	} else {
+		_, name = filepath.Split(r.RelPermalink())
+	}
+	name = strings.ToLower(name)
+
+	return strings.HasPrefix(name, prefix)
 }
 
 type Spec struct {
--- a/resource/resource_test.go
+++ b/resource/resource_test.go
@@ -126,4 +126,7 @@
 	assert.Equal("/foo1.css", resources.GetByPrefix("foo1").RelPermalink())
 	assert.Nil(resources.GetByPrefix("asdfasdf"))
 
+	assert.Equal(2, len(resources.ByPrefix("logo")))
+	assert.Equal(1, len(resources.ByPrefix("logo2")))
+
 }