Skip to content
Snippets Groups Projects
Commit ca8ad03a authored by Semyon Krestyaninov's avatar Semyon Krestyaninov :dog2:
Browse files

wip

parent 1b720b49
No related branches found
No related tags found
No related merge requests found
......@@ -29,17 +29,17 @@ func (opt CollectionFilter) GetName() string {
func (opt CollectionFilter) Execute(exec Executor, fld *field.Field) error {
var err error
opt.ID, err = exec.ExecuteList(opt.ID)
if err != nil && !exec.IsCanceled() {
if err != nil {
return err
}
opt.Name, err = exec.ExecuteList(opt.Name)
if err != nil && !exec.IsCanceled() {
if err != nil {
return err
}
opt.Tag, err = exec.ExecuteList(opt.Tag)
if err != nil && !exec.IsCanceled() {
if err != nil {
return err
}
......
......@@ -27,7 +27,7 @@ func (opt ItemFilter) GetName() string {
func (opt ItemFilter) Execute(exec Executor, fld *field.Field) error {
var err error
opt.Query, err = exec.ExecuteList(opt.Query)
if err != nil && !exec.IsCanceled() {
if err != nil {
return err
}
......
......@@ -7,7 +7,6 @@ import (
type Executor interface {
Execute(input string, data ...any) (string, error)
ExecuteList(inputs []string, data ...any) ([]string, error)
IsCanceled() bool
}
type Executable interface {
......
......@@ -7,6 +7,8 @@ import (
"git.perx.ru/perxis/perxis-go/pkg/errors"
)
var errExecutionFailed = errors.New("execution failed")
type testExecutor struct {
data map[string]any
}
......@@ -26,6 +28,9 @@ func (exec *testExecutor) Execute(input string, _ ...any) (string, error) {
var buf bytes.Buffer
err = templ.Execute(&buf, exec.data)
if err != nil {
if errors.Is(err, errExecutionFailed) {
return "", nil
}
return "", err
}
......@@ -52,6 +57,9 @@ func (exec *testExecutor) ExecuteList(inputs []string, _ ...any) ([]string, erro
buf.Reset()
err = t.Execute(&buf, exec.data)
if err != nil {
if errors.Is(err, errExecutionFailed) {
return nil, nil
}
return nil, err
}
......@@ -66,11 +74,6 @@ func (exec *testExecutor) ExecuteList(inputs []string, _ ...any) ([]string, erro
return result, nil
}
func (exec *testExecutor) IsCanceled() bool {
_, ok := exec.data["Error"]
return ok
}
func (exec *testExecutor) template() *template.Template {
return template.New("test_executor").Funcs(template.FuncMap{
"error": func(text string) (string, error) {
......@@ -78,7 +81,7 @@ func (exec *testExecutor) template() *template.Template {
exec.data = make(map[string]any)
}
exec.data["Error"] = text
return "", errors.New(text)
return "", errExecutionFailed
},
})
}
......@@ -9,6 +9,7 @@ import (
"git.perx.ru/perxis/perxis-go/pkg/collections"
"git.perx.ru/perxis/perxis-go/pkg/content"
"git.perx.ru/perxis/perxis-go/pkg/environments"
"git.perx.ru/perxis/perxis-go/pkg/errors"
"git.perx.ru/perxis/perxis-go/pkg/spaces"
)
......@@ -118,7 +119,11 @@ func (b *Builder) Execute(str string, data ...any) (string, error) {
buf := getBuffer()
defer releaseBuffer(buf)
if err = t.Execute(buf, b.getData(data...)); err != nil {
err = t.Execute(buf, b.getData(data...))
if err != nil {
if errors.Is(err, errExecutionFailed) {
return "", nil
}
return "", err
}
......@@ -147,7 +152,11 @@ func (b *Builder) ExecuteList(str []string, data ...any) ([]string, error) {
}
buf.Reset()
if err = t.Execute(buf, b.getData(data...)); err != nil {
err = t.Execute(buf, b.getData(data...))
if err != nil {
if errors.Is(err, errExecutionFailed) {
return []string{}, nil
}
return []string{}, err
}
......@@ -190,13 +199,6 @@ func (b *Builder) ExecuteMap(str map[string]interface{}, data ...any) (map[strin
return result, nil
}
// IsCanceled возвращает true, если в процессе выполнения шаблона была вызвана
// шаблонная функция error.
func (b *Builder) IsCanceled() bool {
_, ok := b.data["Error"]
return ok
}
func (b *Builder) getData(data ...any) any {
if len(data) == 0 {
return b.data
......
......@@ -6,6 +6,8 @@ import (
"git.perx.ru/perxis/perxis-go/pkg/errors"
)
var errExecutionFailed = errors.New("execution failed")
// getLookup возвращает функцию для шаблонизатора для получения значений из записи коллекции
// name указывается в виде "<collection id>.<item id>.<field>"
// Использование в шаблонах: {{ lookup "secrets.key.value" }}
......@@ -50,6 +52,6 @@ func getErrorFunc(b *Builder) func(string) (string, error) {
b.data = make(map[string]any)
}
b.data["Error"] = text
return "", errors.New(text)
return "", errExecutionFailed
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment