minor refactoring to make api a bit easier to debug

This commit is contained in:
grambbledook
2026-01-12 16:30:41 +01:00
parent 0def06e393
commit eb67e05029
3 changed files with 34 additions and 33 deletions
@@ -230,10 +230,7 @@ func makeFlags(tt struct {
}
config := map[string]memprovider.InMemoryFlag{
tt.name: {
Key: tt.name,
Variants: map[string]any{"": tt.configValue},
},
tt.name: setting.NewInMemoryFlag(tt.name, tt.configValue),
}
return config, []FeatureFlag{orig}
+12 -8
View File
@@ -13,7 +13,7 @@ import (
)
// DefaultVariantName a placeholder name for config-based Feature Flags
const DefaultVariantName = ""
const DefaultVariantName = "default"
// Deprecated: should use `featuremgmt.FeatureToggles`
func (cfg *Cfg) readFeatureToggles(iniFile *ini.File) error {
@@ -42,7 +42,7 @@ func ReadFeatureTogglesFromInitFile(featureTogglesSection *ini.Section) (map[str
// parse the comma separated list in `enable`.
featuresTogglesStr := valueAsString(featureTogglesSection, "enable", "")
for _, feature := range util.SplitString(featuresTogglesStr) {
featureToggles[feature] = memprovider.InMemoryFlag{Key: feature, Variants: map[string]any{DefaultVariantName: true}}
featureToggles[feature] = memprovider.InMemoryFlag{Key: feature, DefaultVariant: DefaultVariantName, Variants: map[string]any{DefaultVariantName: true}}
}
// read all other settings under [feature_toggles]. If a toggle is
@@ -66,19 +66,23 @@ func ParseFlag(name, value string) (memprovider.InMemoryFlag, error) {
var structure map[string]any
if integer, err := strconv.Atoi(value); err == nil {
return memprovider.InMemoryFlag{Key: name, Variants: map[string]any{DefaultVariantName: integer}}, nil
return NewInMemoryFlag(name, integer), nil
}
if float, err := strconv.ParseFloat(value, 64); err == nil {
return memprovider.InMemoryFlag{Key: name, Variants: map[string]any{DefaultVariantName: float}}, nil
return NewInMemoryFlag(name, float), nil
}
if err := json.Unmarshal([]byte(value), &structure); err == nil {
return memprovider.InMemoryFlag{Key: name, Variants: map[string]any{DefaultVariantName: structure}}, nil
return NewInMemoryFlag(name, structure), nil
}
if boolean, err := strconv.ParseBool(value); err == nil {
return memprovider.InMemoryFlag{Key: name, Variants: map[string]any{DefaultVariantName: boolean}}, nil
return NewInMemoryFlag(name, boolean), nil
}
return memprovider.InMemoryFlag{Key: name, Variants: map[string]any{DefaultVariantName: value}}, nil
return NewInMemoryFlag(name, value), nil
}
func NewInMemoryFlag(name string, value any) memprovider.InMemoryFlag {
return memprovider.InMemoryFlag{Key: name, DefaultVariant: DefaultVariantName, Variants: map[string]any{DefaultVariantName: value}}
}
func AsStringMap(m map[string]memprovider.InMemoryFlag) map[string]string {
@@ -90,7 +94,7 @@ func AsStringMap(m map[string]memprovider.InMemoryFlag) map[string]string {
}
func serializeFlagValue(flag memprovider.InMemoryFlag) string {
value, _ := flag.Variants[DefaultVariantName]
value, _ := flag.Variants[flag.DefaultVariant]
switch castedValue := value.(type) {
case bool:
+21 -21
View File
@@ -22,8 +22,8 @@ func TestFeatureToggles(t *testing.T) {
"enable": "feature1,feature2",
},
expectedToggles: map[string]memprovider.InMemoryFlag{
"feature1": {Key: "feature1", Variants: map[string]any{"": true}},
"feature2": {Key: "feature2", Variants: map[string]any{"": true}},
"feature1": NewInMemoryFlag("feature1", true),
"feature2": NewInMemoryFlag("feature2", true),
},
},
{
@@ -33,9 +33,9 @@ func TestFeatureToggles(t *testing.T) {
"feature3": "true",
},
expectedToggles: map[string]memprovider.InMemoryFlag{
"feature1": {Key: "feature1", Variants: map[string]any{"": true}},
"feature2": {Key: "feature2", Variants: map[string]any{"": true}},
"feature3": {Key: "feature3", Variants: map[string]any{"": true}},
"feature1": NewInMemoryFlag("feature1", true),
"feature2": NewInMemoryFlag("feature2", true),
"feature3": NewInMemoryFlag("feature3", true),
},
},
{
@@ -45,8 +45,8 @@ func TestFeatureToggles(t *testing.T) {
"feature2": "false",
},
expectedToggles: map[string]memprovider.InMemoryFlag{
"feature1": {Key: "feature1", Variants: map[string]any{"": true}},
"feature2": {Key: "feature2", Variants: map[string]any{"": false}},
"feature1": NewInMemoryFlag("feature1", true),
"feature2": NewInMemoryFlag("feature2", false),
},
},
{
@@ -57,12 +57,12 @@ func TestFeatureToggles(t *testing.T) {
"feature5": "t", "feature6": "T",
},
expectedToggles: map[string]memprovider.InMemoryFlag{
"feature1": {Key: "feature1", Variants: map[string]any{"": 1}},
"feature2": {Key: "feature2", Variants: map[string]any{"": 1.0}},
"feature3": {Key: "feature3", Variants: map[string]any{"": map[string]any{"foo": "bar"}}},
"feature4": {Key: "feature4", Variants: map[string]any{"": "bar"}},
"feature5": {Key: "feature5", Variants: map[string]any{"": true}},
"feature6": {Key: "feature6", Variants: map[string]any{"": true}},
"feature1": NewInMemoryFlag("feature1", 1),
"feature2": NewInMemoryFlag("feature2", 1.0),
"feature3": NewInMemoryFlag("feature3", map[string]any{"foo": "bar"}),
"feature4": NewInMemoryFlag("feature4", "bar"),
"feature5": NewInMemoryFlag("feature5", true),
"feature6": NewInMemoryFlag("feature6", true),
},
},
}
@@ -88,14 +88,14 @@ func TestFeatureToggles(t *testing.T) {
func TestFlagValueSerialization(t *testing.T) {
testCases := []memprovider.InMemoryFlag{
{Key: "int", Variants: map[string]any{"": 1}},
{Key: "1.0f", Variants: map[string]any{"": 1.0}},
{Key: "1.01f", Variants: map[string]any{"": 1.01}},
{Key: "1.10f", Variants: map[string]any{"": 1.10}},
{Key: "struct", Variants: map[string]any{"": map[string]any{"foo": "bar"}}},
{Key: "string", Variants: map[string]any{"": "bar"}},
{Key: "true", Variants: map[string]any{"": true}},
{Key: "false", Variants: map[string]any{"": false}},
NewInMemoryFlag("int", 1),
NewInMemoryFlag("1.0f", 1.0),
NewInMemoryFlag("1.01f", 1.01),
NewInMemoryFlag("1.10f", 1.10),
NewInMemoryFlag("struct", map[string]any{"foo": "bar"}),
NewInMemoryFlag("string", "bar"),
NewInMemoryFlag("true", true),
NewInMemoryFlag("false", false),
}
for _, tt := range testCases {