[#125] node: Add new option WithEnvPrefix

Signed-off-by: Anton Nikiforov <an.nikiforov@yadro.com>
This commit is contained in:
Anton Nikiforov 2023-04-20 12:17:03 +03:00
parent ee01275d25
commit b2123bfd1a
4 changed files with 20 additions and 7 deletions

View file

@ -45,15 +45,17 @@ type Prm struct{}
func New(_ Prm, opts ...Option) *Config {
v := viper.New()
v.SetEnvPrefix(EnvPrefix)
v.AutomaticEnv()
v.SetEnvKeyReplacer(strings.NewReplacer(separator, EnvSeparator))
o := defaultOpts()
for i := range opts {
opts[i](o)
}
if o.envPrefix != "" {
v.SetEnvPrefix(o.envPrefix)
v.AutomaticEnv()
v.SetEnvKeyReplacer(strings.NewReplacer(separator, EnvSeparator))
}
if o.path != "" {
v.SetConfigFile(o.path)

View file

@ -3,6 +3,7 @@ package config
type opts struct {
path string
configDir string
envPrefix string
}
func defaultOpts() *opts {
@ -27,3 +28,11 @@ func WithConfigDir(path string) Option {
o.configDir = path
}
}
// WithEnvPrefix returns an option to defines
// a prefix that ENVIRONMENT variables will use.
func WithEnvPrefix(envPrefix string) Option {
return func(o *opts) {
o.envPrefix = envPrefix
}
}

View file

@ -25,7 +25,7 @@ func fromEnvFile(t testing.TB, path string) *config.Config {
loadEnv(t, path) // github.com/joho/godotenv can do that as well
return config.New(p)
return config.New(p, config.WithEnvPrefix(config.EnvPrefix))
}
func forEachFile(paths []string, f func(*config.Config)) {
@ -53,7 +53,7 @@ func ForEnvFileType(t testing.TB, pref string, f func(*config.Config)) {
func EmptyConfig() *config.Config {
var p config.Prm
return config.New(p)
return config.New(p, config.WithEnvPrefix(config.EnvPrefix))
}
// loadEnv reads .env file, parses `X=Y` records and sets OS ENVs.

View file

@ -46,7 +46,9 @@ func main() {
os.Exit(SuccessReturnCode)
}
appCfg := config.New(config.Prm{}, config.WithConfigFile(*configFile), config.WithConfigDir(*configDir))
appCfg := config.New(config.Prm{},
config.WithConfigFile(*configFile), config.WithConfigDir(*configDir),
config.WithEnvPrefix(config.EnvPrefix))
err := validateConfig(appCfg)
fatalOnErr(err)