Permalink
Browse files

resource: Implement Resources.ByPrefix

Fixes #4266
  • Loading branch information...
bep committed Jan 12, 2018
1 parent 60c9f3b commit 46db900dab9c0e6fcd9d227f10a32fb24f5c8bd9
Showing with 30 additions and 10 deletions.
  1. +27 −10 resource/resource.go
  2. +3 −0 resource/resource_test.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
@@ -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")))
}

0 comments on commit 46db900

Please sign in to comment.