From 27e13f14f4dba71b417ea530bfe035adbd8f0a93 Mon Sep 17 00:00:00 2001 From: Mikhail Osipov Date: Thu, 27 Feb 2020 01:51:55 +0300 Subject: add config file support --- pkg/server/env/env.go | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'pkg/server/env/env.go') diff --git a/pkg/server/env/env.go b/pkg/server/env/env.go index fe8af25..237c0c5 100644 --- a/pkg/server/env/env.go +++ b/pkg/server/env/env.go @@ -3,6 +3,7 @@ package env import ( "errors" "regexp" + "sort" "sync" ) @@ -18,7 +19,7 @@ type Env struct { const namePattern = "[a-zA-Z][a-zA-Z0-9.]*" var isNamePattern = regexp.MustCompile("^" + namePattern + "$").MatchString -var namePatternRe = regexp.MustCompile("@" + namePattern) +var namePatternRe = regexp.MustCompile("@(" + namePattern + "|{" + namePattern + "})") var errBadVariable = errors.New("bad variable name") @@ -93,11 +94,19 @@ func (e *env) Del(key string) bool { } func (e *env) Each(f func(string, string) bool) { + var keys []string + e.Lock() defer e.Unlock() - for k, v := range e.m { - if !f(k, v) { + for k := range e.m { + keys = append(keys, k) + } + + sort.Strings(keys) + + for _, k := range keys { + if !f(k, e.m[k]) { break } } @@ -115,7 +124,12 @@ func (e *env) Eval(s string) string { defer e.Unlock() repl := func(v string) string { - if v, ok := e.m[v[1:]]; ok { + key := v[1:] + if key[0] == '{' { + key = key[1 : len(key)-1] + } + + if v, ok := e.m[key]; ok { return v } return "" -- cgit v1.2.3-70-g09d2