Работа над валидацией полей, работа над выполнением действий
This commit is contained in:
parent
e37cabadcc
commit
dc263b76bf
8 changed files with 220 additions and 23 deletions
|
|
@ -1,6 +1,7 @@
|
|||
package setup
|
||||
|
||||
import (
|
||||
"bubble/setup/utils"
|
||||
"bubble/types"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
|
@ -174,6 +175,45 @@ func Recompute(app *types.PackageApplication) {
|
|||
}
|
||||
}
|
||||
|
||||
func ValidateCheckField(fieldName, variableName string, validations []types.FieldValidate, app *types.PackageApplication) types.BoolValidateFunc {
|
||||
if len(validations) == 0 {
|
||||
return nil
|
||||
}
|
||||
return func(checked bool) error {
|
||||
env := ParamsForCompute(app)
|
||||
env[variableName] = checked
|
||||
options := append([]expr.Option{
|
||||
expr.Env(env),
|
||||
expr.AllowUndefinedVariables(),
|
||||
}, DefineExprCustomFunctions()...)
|
||||
for _, validate := range validations {
|
||||
program, err := expr.Compile(validate.Rule, options...)
|
||||
prefix := fmt.Sprintf("Валидация поля %s,", fieldName)
|
||||
if err != nil {
|
||||
msg := fmt.Errorf("ошибка компиляции правила: %s, err: %v", validate.Rule, err)
|
||||
logrus.Errorf("%s %v", prefix, msg)
|
||||
return msg
|
||||
}
|
||||
result, err := expr.Run(program, env)
|
||||
if err != nil {
|
||||
msg := fmt.Errorf("ошибка выполнения правила: %s, err: %v", validate.Rule, err)
|
||||
logrus.Errorf("%s %v", prefix, msg)
|
||||
return msg
|
||||
}
|
||||
if boolValue, ok := result.(bool); ok && !boolValue {
|
||||
return fmt.Errorf("%s", validate.Message)
|
||||
} else if !ok {
|
||||
msg := fmt.Errorf("возвращаемое значение правила: %s не булево", validate.Rule)
|
||||
logrus.Errorf("%s %v", prefix, msg)
|
||||
return msg
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// ValidateField создает функцию типа textinput.ValidateFunc для проверки значения полей
|
||||
func ValidateField(fieldName, variableName string, validations []types.FieldValidate, app *types.PackageApplication) textinput.ValidateFunc {
|
||||
if len(validations) == 0 {
|
||||
|
|
@ -181,7 +221,7 @@ func ValidateField(fieldName, variableName string, validations []types.FieldVali
|
|||
}
|
||||
return func(text string) error {
|
||||
env := ParamsForCompute(app)
|
||||
env[variableName] = text //todo text это строка, если использовать функцию типа textinput.ValidateFunc, то словим ошибку типов
|
||||
env[variableName] = text
|
||||
options := append([]expr.Option{
|
||||
expr.Env(env),
|
||||
expr.AllowUndefinedVariables(),
|
||||
|
|
@ -396,3 +436,27 @@ func GetSystemUsers() []string {
|
|||
}
|
||||
return users
|
||||
}
|
||||
|
||||
func ExecuteAction(action *types.SectionAction, application *types.PackageApplication) error {
|
||||
vars := ParamsForCondition(application)
|
||||
switch action.Type {
|
||||
case "command":
|
||||
cmdStr, cmdErr := utils.RenderTemplate(action.Command, vars)
|
||||
if cmdErr != nil {
|
||||
return fmt.Errorf("ошибка создания шаблона команды: %v", cmdErr)
|
||||
}
|
||||
return utils.RunCommand(cmdStr, action.RunAs)
|
||||
case "file_template":
|
||||
source, sourceErr := utils.RenderTemplate(action.FileSource, vars)
|
||||
if sourceErr != nil {
|
||||
return fmt.Errorf("ошибка создания шаблона файла источника: %v", sourceErr)
|
||||
}
|
||||
target, targetErr := utils.RenderTemplate(action.FileTarget, vars)
|
||||
if targetErr != nil {
|
||||
return fmt.Errorf("ошибка создания шаблона файла цели: %v", targetErr)
|
||||
}
|
||||
return utils.RenderFileTemplate(source, target, vars)
|
||||
default:
|
||||
return fmt.Errorf("неизвестный тип действия")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue