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

fix

parent 18fb53a8
Branches
Tags
No related merge requests found
...@@ -13,13 +13,12 @@ import ( ...@@ -13,13 +13,12 @@ import (
"git.perx.ru/perxis/perxis-go/pkg/spaces" "git.perx.ru/perxis/perxis-go/pkg/spaces"
) )
type Executor[T any] interface { type Template interface {
Parse(text string) (T, error)
Execute(w io.Writer, data any) error Execute(w io.Writer, data any) error
} }
type Builder[T Executor[T]] struct { type Builder struct {
template func(string) T parseFunc func(text string) (Template, error)
ctx context.Context ctx context.Context
cnt *content.Content cnt *content.Content
...@@ -34,48 +33,48 @@ type Builder[T Executor[T]] struct { ...@@ -34,48 +33,48 @@ type Builder[T Executor[T]] struct {
collection *collections.Collection collection *collections.Collection
} }
func NewBuilder(cnt *content.Content, space, env, col string) Builder[*templtext.Template] { func NewBuilder(cnt *content.Content, space, env, col string) Builder {
b := Builder[*templtext.Template]{ b := Builder{
ctx: context.Background(), ctx: context.Background(),
cnt: cnt, cnt: cnt,
SpaceID: space, SpaceID: space,
EnvID: env, EnvID: env,
CollID: col, CollID: col,
} }
b.template = func(name string) *templtext.Template { b.parseFunc = func(text string) (Template, error) {
return templtext.New(name).Funcs(b.getFuncs()) return templtext.New("main_text").Funcs(b.getFuncs()).Parse(text)
} }
return b return b
} }
func NewHTMLBuilder(cnt *content.Content, space, env, col string) Builder[*templhtml.Template] { func NewHTMLBuilder(cnt *content.Content, space, env, col string) Builder {
b := Builder[*templhtml.Template]{ b := Builder{
ctx: context.Background(), ctx: context.Background(),
cnt: cnt, cnt: cnt,
SpaceID: space, SpaceID: space,
EnvID: env, EnvID: env,
CollID: col, CollID: col,
} }
b.template = func(name string) *templhtml.Template { b.parseFunc = func(text string) (Template, error) {
return templhtml.New(name).Funcs(b.getFuncs()) return templhtml.New("main_html").Funcs(b.getFuncs()).Parse(text)
} }
return b return b
} }
func (b *Builder[T]) getFuncs() map[string]any { func (b *Builder) getFuncs() map[string]any {
return map[string]any{ return map[string]any{
"lookup": getLookup(b), "lookup": getLookup(b),
"system": getSystem(b), "system": getSystem(b),
} }
} }
func (b *Builder[T]) WithData(data map[string]interface{}) *Builder[T] { func (b *Builder) WithData(data map[string]interface{}) *Builder {
bld := *b bld := *b
bld.data = data bld.data = data
return &bld return &bld
} }
func (b *Builder[T]) WithKV(kv ...any) *Builder[T] { func (b *Builder) WithKV(kv ...any) *Builder {
bld := *b bld := *b
if bld.data == nil { if bld.data == nil {
bld.data = make(map[string]interface{}, 10) bld.data = make(map[string]interface{}, 10)
...@@ -90,31 +89,30 @@ func (b *Builder[T]) WithKV(kv ...any) *Builder[T] { ...@@ -90,31 +89,30 @@ func (b *Builder[T]) WithKV(kv ...any) *Builder[T] {
return &bld return &bld
} }
func (b *Builder[T]) GetData() map[string]interface{} { func (b *Builder) GetData() map[string]interface{} {
return b.data return b.data
} }
func (b *Builder[T]) WithSpace(space, env string) *Builder[T] { func (b *Builder) WithSpace(space, env string) *Builder {
bld := *b bld := *b
bld.SpaceID = space bld.SpaceID = space
bld.EnvID = env bld.EnvID = env
return &bld return &bld
} }
func (b *Builder[T]) WithContext(ctx context.Context) *Builder[T] { func (b *Builder) WithContext(ctx context.Context) *Builder {
bld := *b bld := *b
bld.ctx = ctx bld.ctx = ctx
return &bld return &bld
} }
func (b *Builder[T]) Context() context.Context { func (b *Builder) Context() context.Context {
return b.ctx return b.ctx
} }
func (b *Builder[T]) Execute(str string, data ...any) (string, error) { func (b *Builder) Execute(str string, data ...any) (string, error) {
t := b.template("main")
buf := new(bytes.Buffer) buf := new(bytes.Buffer)
t, err := t.Parse(str) t, err := b.parseFunc(str)
if err != nil { if err != nil {
return "", err return "", err
} }
...@@ -124,15 +122,14 @@ func (b *Builder[T]) Execute(str string, data ...any) (string, error) { ...@@ -124,15 +122,14 @@ func (b *Builder[T]) Execute(str string, data ...any) (string, error) {
return buf.String(), nil return buf.String(), nil
} }
func (b *Builder[T]) ExecuteList(str []string, data ...any) ([]string, error) { func (b *Builder) ExecuteList(str []string, data ...any) ([]string, error) {
t := b.template("main")
result := make([]string, len(str)) result := make([]string, len(str))
buffer := new(bytes.Buffer) buffer := new(bytes.Buffer)
for i, tmpl := range str { for i, tmpl := range str {
if tmpl == "" { if tmpl == "" {
continue continue
} }
t, err := t.Parse(tmpl) t, err := b.parseFunc(tmpl)
if err != nil { if err != nil {
return []string{}, err return []string{}, err
} }
...@@ -145,7 +142,7 @@ func (b *Builder[T]) ExecuteList(str []string, data ...any) ([]string, error) { ...@@ -145,7 +142,7 @@ func (b *Builder[T]) ExecuteList(str []string, data ...any) ([]string, error) {
return result, nil return result, nil
} }
func (b *Builder[T]) ExecuteMap(str map[string]interface{}, data ...any) (map[string]interface{}, error) { func (b *Builder) ExecuteMap(str map[string]interface{}, data ...any) (map[string]interface{}, error) {
result := make(map[string]interface{}, len(str)) result := make(map[string]interface{}, len(str))
for k, v := range str { for k, v := range str {
switch t := v.(type) { switch t := v.(type) {
...@@ -173,7 +170,7 @@ func (b *Builder[T]) ExecuteMap(str map[string]interface{}, data ...any) (map[st ...@@ -173,7 +170,7 @@ func (b *Builder[T]) ExecuteMap(str map[string]interface{}, data ...any) (map[st
return result, nil return result, nil
} }
func (b *Builder[T]) getData(data ...any) any { func (b *Builder) getData(data ...any) any {
if len(data) == 0 { if len(data) == 0 {
return b.data return b.data
} }
......
...@@ -6,23 +6,23 @@ import ( ...@@ -6,23 +6,23 @@ import (
"git.perx.ru/perxis/perxis-go/pkg/spaces" "git.perx.ru/perxis/perxis-go/pkg/spaces"
) )
type System[T Executor[T]] struct { type System struct {
builder *Builder[T] builder *Builder
} }
func (s *System[T]) SpaceID() string { func (s *System) SpaceID() string {
return s.builder.SpaceID return s.builder.SpaceID
} }
func (s *System[T]) EnvID() string { func (s *System) EnvID() string {
return s.builder.EnvID return s.builder.EnvID
} }
func (s *System[T]) CollectionID() string { func (s *System) CollectionID() string {
return s.builder.CollID return s.builder.CollID
} }
func (s *System[T]) Space() (*spaces.Space, error) { func (s *System) Space() (*spaces.Space, error) {
if s.builder.space != nil { if s.builder.space != nil {
return s.builder.space, nil return s.builder.space, nil
} }
...@@ -32,7 +32,7 @@ func (s *System[T]) Space() (*spaces.Space, error) { ...@@ -32,7 +32,7 @@ func (s *System[T]) Space() (*spaces.Space, error) {
return s.builder.space, err return s.builder.space, err
} }
func (s *System[T]) Environment() (*environments.Environment, error) { func (s *System) Environment() (*environments.Environment, error) {
if s.builder.environment != nil { if s.builder.environment != nil {
return s.builder.environment, nil return s.builder.environment, nil
} }
...@@ -42,7 +42,7 @@ func (s *System[T]) Environment() (*environments.Environment, error) { ...@@ -42,7 +42,7 @@ func (s *System[T]) Environment() (*environments.Environment, error) {
return s.builder.environment, err return s.builder.environment, err
} }
func (s *System[T]) Collection() (*collections.Collection, error) { func (s *System) Collection() (*collections.Collection, error) {
if s.builder.collection != nil { if s.builder.collection != nil {
return s.builder.collection, nil return s.builder.collection, nil
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment