From 46db900dab9c0e6fcd9d227f10a32fb24f5c8bd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Fri, 12 Jan 2018 18:06:35 +0100 Subject: [PATCH] resource: Implement Resources.ByPrefix Fixes #4266 --- resource/resource.go | 37 +++++++++++++++++++++++++++---------- resource/resource_test.go | 3 +++ 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/resource/resource.go b/resource/resource.go index 4a535889d..bb84aed79 100644 --- a/resource/resource.go +++ b/resource/resource.go @@ -72,22 +72,39 @@ func (r Resources) ByType(tp string) Resources { 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 { *helpers.PathSpec mimeTypes media.Types diff --git a/resource/resource_test.go b/resource/resource_test.go index fbc66af8f..73d98d62a 100644 --- a/resource/resource_test.go +++ b/resource/resource_test.go @@ -126,4 +126,7 @@ func TestResourcesGetByPrefix(t *testing.T) { 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"))) + }