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 +}