From c6b5fd7eeb863d26f590d65326d77f552c368389 Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Fri, 6 Dec 2024 00:12:50 -0500 Subject: [PATCH] providers: Add provider for URL functions --- providers/all.go | 2 ++ providers/url/url.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 providers/url/url.go diff --git a/providers/all.go b/providers/all.go index 412b4bf..a0c8a0e 100644 --- a/providers/all.go +++ b/providers/all.go @@ -2,6 +2,7 @@ package providers import "git.tebibyte.media/sashakoshka/step" import fpos "git.tebibyte.media/sashakoshka/step/providers/os" +import fpurl "git.tebibyte.media/sashakoshka/step/providers/url" import fpsprig "git.tebibyte.media/sashakoshka/step/providers/sprig" import fpmarkdown "git.tebibyte.media/sashakoshka/step/providers/markdown" @@ -9,6 +10,7 @@ import fpmarkdown "git.tebibyte.media/sashakoshka/step/providers/markdown" func All () []step.FuncProvider { return []step.FuncProvider { new(fpos.Provider), + new(fpurl.Provider), new(fpsprig.Provider), fpmarkdown.Default(), } diff --git a/providers/url/url.go b/providers/url/url.go new file mode 100644 index 0000000..e1b617d --- /dev/null +++ b/providers/url/url.go @@ -0,0 +1,30 @@ +package url + +import "net/url" +import "html/template" +import "git.tebibyte.media/sashakoshka/step" + +var _ step.FuncProvider = new(Provider) + +// Provider provides URL functions. +type Provider struct { + +} + +// FuncMap fulfills the step.FuncProvider interface. +func (this *Provider) FuncMap () template.FuncMap { + return template.FuncMap { + "parseQuery": funcParseQuery, + } +} + +func funcParseQuery (query string) url.Values { + // wrapped here because the query might contain all sorts of nonsense, + // and returning an error in a template function causes everything to + // stop rather ungracefully + values, err := url.ParseQuery(query) + if err != nil { + values = make(url.Values) + } + return values +}