Skip to content

Commit

Permalink
Add '-' ignore
Browse files Browse the repository at this point in the history
  • Loading branch information
KevinJoiner committed Jun 27, 2024
1 parent 87cbf63 commit dcb9667
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 2 deletions.
8 changes: 6 additions & 2 deletions config_loader.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"os"
"reflect"
"strconv"
"strings"

"github.com/pkg/errors"
"gopkg.in/yaml.v3"
Expand Down Expand Up @@ -51,15 +52,18 @@ func loadFromEnvVars[S any](settings S) error {
for i := 0; i < valueOfConfig.NumField(); i++ {
field := valueOfConfig.Field(i)
fieldYamlName := typeOfT.Field(i).Tag.Get("yaml")

if fieldYamlName == "-" {
continue
}
if field.Kind() == reflect.Struct {
// iterate through the fields - like above, prepend fieldYamlName
for i := 0; i < field.NumField(); i++ {
subField := field.Field(i)
subFieldYamlName := field.Type().Field(i).Tag.Get("yaml")
if fieldYamlName != ",inline" {
if !strings.HasSuffix(fieldYamlName, ",inline") {
subFieldYamlName = fieldYamlName + "_" + subFieldYamlName
}

err = matchEnvVarToField(subFieldYamlName, subField)
}
} else {
Expand Down
5 changes: 5 additions & 0 deletions config_loader_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ ENV: dev
REDIS:
URL: redis.bobby
INLINE_URL: inline.bobby
IGNORE: ignoreme
`
settings, err := loadFromYaml[TestSettings]([]byte(data))
assert.NoError(t, err, "no error expected")
Expand All @@ -24,6 +25,7 @@ INLINE_URL: inline.bobby
assert.Equal(t, "dev", settings.Env)
assert.Equal(t, "redis.bobby", settings.Redis.URL)
assert.Equal(t, "inline.bobby", settings.Inline.URL)
assert.Equal(t, "", settings.Ignore)
}

func Test_loadFromEnvVars(t *testing.T) {
Expand All @@ -37,6 +39,7 @@ func Test_loadFromEnvVars(t *testing.T) {
t.Setenv("PORT", "5000")
t.Setenv("REDIS_URL", "redis.bobby")
t.Setenv("INLINE_URL", "inline.bobby")
t.Setenv("IGNORE", "ignoreme")

err := loadFromEnvVars(&settings) // b/c of type inference we don't need to specify the type
assert.NoError(t, err)
Expand All @@ -46,6 +49,7 @@ func Test_loadFromEnvVars(t *testing.T) {
assert.Equal(t, "mydb.aws.net", settings.DbConnectString)
assert.Equal(t, "redis.bobby", settings.Redis.URL)
assert.Equal(t, "inline.bobby", settings.Inline.URL)
assert.Equal(t, "", settings.Ignore)
}

func Test_loadFromEnvVars_errIfNotPointer(t *testing.T) {
Expand Down Expand Up @@ -74,6 +78,7 @@ type TestSettings struct {
Env string `yaml:"ENV"`
Redis RedisSubProp `yaml:"REDIS"`
Inline InlineSubProp `yaml:",inline"`
Ignore string `yaml:"-"`
}

type RedisSubProp struct {
Expand Down

0 comments on commit dcb9667

Please sign in to comment.