diff --git a/core/pkg/eval/fractional_evaluation.go b/core/pkg/evaluator/fractional.go similarity index 92% rename from core/pkg/eval/fractional_evaluation.go rename to core/pkg/evaluator/fractional.go index e8aeff216..90d8ac0ca 100644 --- a/core/pkg/eval/fractional_evaluation.go +++ b/core/pkg/evaluator/fractional.go @@ -1,4 +1,4 @@ -package eval +package evaluator import ( "errors" @@ -11,7 +11,7 @@ import ( const FractionEvaluationName = "fractional" -type FractionalEvaluator struct { +type Fractional struct { Logger *logger.Logger } @@ -20,11 +20,11 @@ type fractionalEvaluationDistribution struct { percentage int } -func NewFractionalEvaluator(logger *logger.Logger) *FractionalEvaluator { - return &FractionalEvaluator{Logger: logger} +func NewFractional(logger *logger.Logger) *Fractional { + return &Fractional{Logger: logger} } -func (fe *FractionalEvaluator) FractionalEvaluation(values, data any) any { +func (fe *Fractional) Evaluate(values, data any) any { valueToDistribute, feDistributions, err := parseFractionalEvaluationData(values, data) if err != nil { fe.Logger.Error(fmt.Sprintf("parse fractional evaluation data: %v", err)) diff --git a/core/pkg/eval/fractional_evaluation_test.go b/core/pkg/evaluator/fractional_test.go similarity index 98% rename from core/pkg/eval/fractional_evaluation_test.go rename to core/pkg/evaluator/fractional_test.go index a5cb50cde..c7153baea 100644 --- a/core/pkg/eval/fractional_evaluation_test.go +++ b/core/pkg/evaluator/fractional_test.go @@ -1,4 +1,4 @@ -package eval +package evaluator import ( "testing" @@ -323,12 +323,12 @@ func TestFractionalEvaluation(t *testing.T) { for name, tt := range tests { t.Run(name, func(t *testing.T) { log := logger.NewLogger(nil, false) - je := NewJSONEvaluator( + je := NewJSON( log, store.NewFlags(), WithEvaluator( FractionEvaluationName, - NewFractionalEvaluator(log).FractionalEvaluation, + NewFractional(log).Evaluate, ), ) je.store.Flags = tt.flags.Flags @@ -457,12 +457,12 @@ func BenchmarkFractionalEvaluation(b *testing.B) { for name, tt := range tests { b.Run(name, func(b *testing.B) { log := logger.NewLogger(nil, false) - je := NewJSONEvaluator( + je := NewJSON( log, &store.Flags{Flags: tt.flags.Flags}, WithEvaluator( FractionEvaluationName, - NewFractionalEvaluator(log).FractionalEvaluation, + NewFractional(log).Evaluate, ), ) for i := 0; i < b.N; i++ { diff --git a/core/pkg/eval/ievaluator.go b/core/pkg/evaluator/ievaluator.go similarity index 99% rename from core/pkg/eval/ievaluator.go rename to core/pkg/evaluator/ievaluator.go index 937855fb9..a0638c9a4 100644 --- a/core/pkg/eval/ievaluator.go +++ b/core/pkg/evaluator/ievaluator.go @@ -1,4 +1,4 @@ -package eval +package evaluator import ( "context" diff --git a/core/pkg/eval/ievaluator_test.go b/core/pkg/evaluator/ievaluator_test.go similarity index 95% rename from core/pkg/eval/ievaluator_test.go rename to core/pkg/evaluator/ievaluator_test.go index b24b9d038..ed8ffefb2 100644 --- a/core/pkg/eval/ievaluator_test.go +++ b/core/pkg/evaluator/ievaluator_test.go @@ -1,4 +1,4 @@ -package eval +package evaluator import ( "fmt" diff --git a/core/pkg/eval/json_evaluator.go b/core/pkg/evaluator/json.go similarity index 92% rename from core/pkg/eval/json_evaluator.go rename to core/pkg/evaluator/json.go index 30da42b9c..3540587a2 100644 --- a/core/pkg/eval/json_evaluator.go +++ b/core/pkg/evaluator/json.go @@ -1,4 +1,4 @@ -package eval +package evaluator import ( "bytes" @@ -50,7 +50,7 @@ func init() { type variantEvaluator func(string, string, map[string]any) ( variant string, variants map[string]interface{}, reason string, metadata map[string]interface{}, error error) -type JSONEvaluator struct { +type JSON struct { store *store.Flags Logger *logger.Logger jsonEvalTracer trace.Tracer @@ -64,16 +64,16 @@ const ( Disabled = "DISABLED" ) -type JSONEvaluatorOption func(je *JSONEvaluator) +type JSONEvaluatorOption func(je *JSON) func WithEvaluator(name string, evalFunc func(interface{}, interface{}) interface{}) JSONEvaluatorOption { - return func(_ *JSONEvaluator) { + return func(_ *JSON) { jsonlogic.AddOperator(name, evalFunc) } } -func NewJSONEvaluator(logger *logger.Logger, s *store.Flags, opts ...JSONEvaluatorOption) *JSONEvaluator { - ev := JSONEvaluator{ +func NewJSON(logger *logger.Logger, s *store.Flags, opts ...JSONEvaluatorOption) *JSON { + ev := JSON{ Logger: logger.WithFields( zap.String("component", "evaluator"), zap.String("evaluator", "json"), @@ -89,7 +89,7 @@ func NewJSONEvaluator(logger *logger.Logger, s *store.Flags, opts ...JSONEvaluat return &ev } -func (je *JSONEvaluator) GetState() (string, error) { +func (je *JSON) GetState() (string, error) { s, err := je.store.String() if err != nil { return "", fmt.Errorf("unable to fetch evaluator state: %w", err) @@ -97,7 +97,7 @@ func (je *JSONEvaluator) GetState() (string, error) { return s, nil } -func (je *JSONEvaluator) SetState(payload sync.DataSync) (map[string]interface{}, bool, error) { +func (je *JSON) SetState(payload sync.DataSync) (map[string]interface{}, bool, error) { _, span := je.jsonEvalTracer.Start( context.Background(), "flagSync", @@ -136,7 +136,7 @@ func (je *JSONEvaluator) SetState(payload sync.DataSync) (map[string]interface{} return events, reSync, nil } -func (je *JSONEvaluator) ResolveAllValues(ctx context.Context, reqID string, context map[string]any) []AnyValue { +func (je *JSON) ResolveAllValues(ctx context.Context, reqID string, context map[string]any) []AnyValue { _, span := je.jsonEvalTracer.Start(ctx, "resolveAll") defer span.End() @@ -192,7 +192,7 @@ func (je *JSONEvaluator) ResolveAllValues(ctx context.Context, reqID string, con return values } -func (je *JSONEvaluator) ResolveBooleanValue( +func (je *JSON) ResolveBooleanValue( ctx context.Context, reqID string, flagKey string, context map[string]any) ( value bool, variant string, @@ -207,7 +207,7 @@ func (je *JSONEvaluator) ResolveBooleanValue( return resolve[bool](reqID, flagKey, context, je.evaluateVariant) } -func (je *JSONEvaluator) ResolveStringValue( +func (je *JSON) ResolveStringValue( ctx context.Context, reqID string, flagKey string, context map[string]any) ( value string, variant string, @@ -222,7 +222,7 @@ func (je *JSONEvaluator) ResolveStringValue( return resolve[string](reqID, flagKey, context, je.evaluateVariant) } -func (je *JSONEvaluator) ResolveFloatValue( +func (je *JSON) ResolveFloatValue( ctx context.Context, reqID string, flagKey string, context map[string]any) ( value float64, variant string, @@ -238,7 +238,7 @@ func (je *JSONEvaluator) ResolveFloatValue( return } -func (je *JSONEvaluator) ResolveIntValue(ctx context.Context, reqID string, flagKey string, context map[string]any) ( +func (je *JSON) ResolveIntValue(ctx context.Context, reqID string, flagKey string, context map[string]any) ( value int64, variant string, reason string, @@ -255,7 +255,7 @@ func (je *JSONEvaluator) ResolveIntValue(ctx context.Context, reqID string, flag return } -func (je *JSONEvaluator) ResolveObjectValue( +func (je *JSON) ResolveObjectValue( ctx context.Context, reqID string, flagKey string, context map[string]any) ( value map[string]any, variant string, @@ -289,7 +289,7 @@ func resolve[T constraints](reqID string, key string, context map[string]any, va // runs the rules (if defined) to determine the variant, otherwise falling through to the default // nolint: funlen -func (je *JSONEvaluator) evaluateVariant(reqID string, flagKey string, context map[string]any) ( +func (je *JSON) evaluateVariant(reqID string, flagKey string, context map[string]any) ( variant string, variants map[string]interface{}, reason string, metadata map[string]interface{}, err error, ) { metadata = map[string]interface{}{} @@ -362,7 +362,7 @@ func (je *JSONEvaluator) evaluateVariant(reqID string, flagKey string, context m return flag.DefaultVariant, flag.Variants, model.StaticReason, metadata, nil } -func (je *JSONEvaluator) setFlagdProperties( +func (je *JSON) setFlagdProperties( context map[string]any, properties flagdProperties, ) map[string]any { @@ -401,7 +401,7 @@ func getFlagdProperties(context map[string]any) (flagdProperties, bool) { } // configToFlags convert string configurations to flags and store them to pointer newFlags -func (je *JSONEvaluator) configToFlags(config string, newFlags *Flags) error { +func (je *JSON) configToFlags(config string, newFlags *Flags) error { schemaLoader := gojsonschema.NewStringLoader(schema.FlagdDefinitions) flagStringLoader := gojsonschema.NewStringLoader(config) @@ -438,7 +438,7 @@ func validateDefaultVariants(flags *Flags) error { return nil } -func (je *JSONEvaluator) transposeEvaluators(state string) (string, error) { +func (je *JSON) transposeEvaluators(state string) (string, error) { var evaluators Evaluators if err := json.Unmarshal([]byte(state), &evaluators); err != nil { return "", fmt.Errorf("unmarshal: %w", err) diff --git a/core/pkg/eval/json_evaluator_model.go b/core/pkg/evaluator/json_model.go similarity index 92% rename from core/pkg/eval/json_evaluator_model.go rename to core/pkg/evaluator/json_model.go index 56ddd07fb..00a7105ef 100644 --- a/core/pkg/eval/json_evaluator_model.go +++ b/core/pkg/evaluator/json_model.go @@ -1,4 +1,4 @@ -package eval +package evaluator import ( "encoding/json" diff --git a/core/pkg/eval/json_evaluator_test.go b/core/pkg/evaluator/json_test.go similarity index 92% rename from core/pkg/eval/json_evaluator_test.go rename to core/pkg/evaluator/json_test.go index 932365375..38e2e0a34 100644 --- a/core/pkg/eval/json_evaluator_test.go +++ b/core/pkg/evaluator/json_test.go @@ -1,5 +1,5 @@ //nolint:wrapcheck -package eval_test +package evaluator_test import ( "context" @@ -10,7 +10,7 @@ import ( "testing" "time" - "github.com/open-feature/flagd/core/pkg/eval" + "github.com/open-feature/flagd/core/pkg/evaluator" "github.com/open-feature/flagd/core/pkg/logger" "github.com/open-feature/flagd/core/pkg/model" "github.com/open-feature/flagd/core/pkg/store" @@ -278,7 +278,7 @@ var Flags = fmt.Sprintf(`{ DisabledFlag) func TestGetState_Valid_ContainsFlag(t *testing.T) { - evaluator := eval.NewJSONEvaluator(logger.NewLogger(nil, false), store.NewFlags()) + evaluator := evaluator.NewJSON(logger.NewLogger(nil, false), store.NewFlags()) _, _, err := evaluator.SetState(sync.DataSync{FlagData: ValidFlags}) if err != nil { t.Fatalf("Expected no error") @@ -298,7 +298,7 @@ func TestGetState_Valid_ContainsFlag(t *testing.T) { } func TestSetState_Invalid_Error(t *testing.T) { - evaluator := eval.NewJSONEvaluator(logger.NewLogger(nil, false), store.NewFlags()) + evaluator := evaluator.NewJSON(logger.NewLogger(nil, false), store.NewFlags()) // set state with an invalid flag definition _, _, err := evaluator.SetState(sync.DataSync{FlagData: InvalidFlags}) @@ -308,7 +308,7 @@ func TestSetState_Invalid_Error(t *testing.T) { } func TestSetState_Valid_NoError(t *testing.T) { - evaluator := eval.NewJSONEvaluator(logger.NewLogger(nil, false), store.NewFlags()) + evaluator := evaluator.NewJSON(logger.NewLogger(nil, false), store.NewFlags()) // set state with a valid flag definition _, _, err := evaluator.SetState(sync.DataSync{FlagData: ValidFlags}) @@ -318,7 +318,7 @@ func TestSetState_Valid_NoError(t *testing.T) { } func TestResolveAllValues(t *testing.T) { - evaluator := eval.NewJSONEvaluator(logger.NewLogger(nil, false), store.NewFlags()) + evaluator := evaluator.NewJSON(logger.NewLogger(nil, false), store.NewFlags()) _, _, err := evaluator.SetState(sync.DataSync{FlagData: Flags}) if err != nil { t.Fatalf("expected no error") @@ -383,7 +383,7 @@ func TestResolveBooleanValue(t *testing.T) { {DisabledFlag, nil, StaticBoolValue, model.ErrorReason, model.FlagDisabledErrorCode}, } const reqID = "default" - evaluator := eval.NewJSONEvaluator(logger.NewLogger(nil, false), store.NewFlags()) + evaluator := evaluator.NewJSON(logger.NewLogger(nil, false), store.NewFlags()) _, _, err := evaluator.SetState(sync.DataSync{FlagData: Flags}) if err != nil { t.Fatalf("expected no error") @@ -418,7 +418,7 @@ func BenchmarkResolveBooleanValue(b *testing.B) { {DisabledFlag, nil, StaticBoolValue, model.ErrorReason, model.FlagDisabledErrorCode}, } - evaluator := eval.NewJSONEvaluator(logger.NewLogger(nil, false), store.NewFlags()) + evaluator := evaluator.NewJSON(logger.NewLogger(nil, false), store.NewFlags()) _, _, err := evaluator.SetState(sync.DataSync{FlagData: Flags}) if err != nil { b.Fatalf("expected no error") @@ -458,7 +458,7 @@ func TestResolveStringValue(t *testing.T) { {DisabledFlag, nil, "", model.ErrorReason, model.FlagDisabledErrorCode}, } const reqID = "default" - evaluator := eval.NewJSONEvaluator(logger.NewLogger(nil, false), store.NewFlags()) + evaluator := evaluator.NewJSON(logger.NewLogger(nil, false), store.NewFlags()) _, _, err := evaluator.SetState(sync.DataSync{FlagData: Flags}) if err != nil { t.Fatalf("expected no error") @@ -494,7 +494,7 @@ func BenchmarkResolveStringValue(b *testing.B) { {DisabledFlag, nil, "", model.ErrorReason, model.FlagDisabledErrorCode}, } - evaluator := eval.NewJSONEvaluator(logger.NewLogger(nil, false), store.NewFlags()) + evaluator := evaluator.NewJSON(logger.NewLogger(nil, false), store.NewFlags()) _, _, err := evaluator.SetState(sync.DataSync{FlagData: Flags}) if err != nil { b.Fatalf("expected no error") @@ -534,7 +534,7 @@ func TestResolveFloatValue(t *testing.T) { {DisabledFlag, nil, 0, model.ErrorReason, model.FlagDisabledErrorCode}, } const reqID = "default" - evaluator := eval.NewJSONEvaluator(logger.NewLogger(nil, false), store.NewFlags()) + evaluator := evaluator.NewJSON(logger.NewLogger(nil, false), store.NewFlags()) _, _, err := evaluator.SetState(sync.DataSync{FlagData: Flags}) if err != nil { t.Fatalf("expected no error") @@ -570,7 +570,7 @@ func BenchmarkResolveFloatValue(b *testing.B) { {DisabledFlag, nil, 0, model.ErrorReason, model.FlagDisabledErrorCode}, } - evaluator := eval.NewJSONEvaluator(logger.NewLogger(nil, false), store.NewFlags()) + evaluator := evaluator.NewJSON(logger.NewLogger(nil, false), store.NewFlags()) _, _, err := evaluator.SetState(sync.DataSync{FlagData: Flags}) if err != nil { b.Fatalf("expected no error") @@ -610,7 +610,7 @@ func TestResolveIntValue(t *testing.T) { {DisabledFlag, nil, 0, model.ErrorReason, model.FlagDisabledErrorCode}, } const reqID = "default" - evaluator := eval.NewJSONEvaluator(logger.NewLogger(nil, false), store.NewFlags()) + evaluator := evaluator.NewJSON(logger.NewLogger(nil, false), store.NewFlags()) _, _, err := evaluator.SetState(sync.DataSync{FlagData: Flags}) if err != nil { t.Fatalf("expected no error") @@ -646,7 +646,7 @@ func BenchmarkResolveIntValue(b *testing.B) { {DisabledFlag, nil, 0, model.ErrorReason, model.FlagDisabledErrorCode}, } - evaluator := eval.NewJSONEvaluator(logger.NewLogger(nil, false), store.NewFlags()) + evaluator := evaluator.NewJSON(logger.NewLogger(nil, false), store.NewFlags()) _, _, err := evaluator.SetState(sync.DataSync{FlagData: Flags}) if err != nil { b.Fatalf("expected no error") @@ -686,7 +686,7 @@ func TestResolveObjectValue(t *testing.T) { {DisabledFlag, nil, "{}", model.ErrorReason, model.FlagDisabledErrorCode}, } const reqID = "default" - evaluator := eval.NewJSONEvaluator(logger.NewLogger(nil, false), store.NewFlags()) + evaluator := evaluator.NewJSON(logger.NewLogger(nil, false), store.NewFlags()) _, _, err := evaluator.SetState(sync.DataSync{FlagData: Flags}) if err != nil { t.Fatalf("expected no error") @@ -725,7 +725,7 @@ func BenchmarkResolveObjectValue(b *testing.B) { {DisabledFlag, nil, "{}", model.ErrorReason, model.FlagDisabledErrorCode}, } - evaluator := eval.NewJSONEvaluator(logger.NewLogger(nil, false), store.NewFlags()) + evaluator := evaluator.NewJSON(logger.NewLogger(nil, false), store.NewFlags()) _, _, err := evaluator.SetState(sync.DataSync{FlagData: Flags}) if err != nil { b.Fatalf("expected no error") @@ -804,7 +804,7 @@ func TestSetState_DefaultVariantValidation(t *testing.T) { for name, tt := range tests { t.Run(name, func(t *testing.T) { - jsonEvaluator := eval.NewJSONEvaluator(logger.NewLogger(nil, false), store.NewFlags()) + jsonEvaluator := evaluator.NewJSON(logger.NewLogger(nil, false), store.NewFlags()) _, _, err := jsonEvaluator.SetState(sync.DataSync{FlagData: tt.jsonFlags}) @@ -1038,7 +1038,7 @@ func TestState_Evaluator(t *testing.T) { for name, tt := range tests { t.Run(name, func(t *testing.T) { - jsonEvaluator := eval.NewJSONEvaluator(logger.NewLogger(nil, false), store.NewFlags()) + jsonEvaluator := evaluator.NewJSON(logger.NewLogger(nil, false), store.NewFlags()) _, resync, err := jsonEvaluator.SetState(sync.DataSync{FlagData: tt.inputState}) if err != nil { @@ -1083,60 +1083,60 @@ func TestState_Evaluator(t *testing.T) { func TestFlagStateSafeForConcurrentReadWrites(t *testing.T) { tests := map[string]struct { dataSyncType sync.Type - flagResolution func(evaluator *eval.JSONEvaluator) error + flagResolution func(evaluator *evaluator.JSON) error }{ "Add_ResolveAllValues": { dataSyncType: sync.ADD, - flagResolution: func(evaluator *eval.JSONEvaluator) error { + flagResolution: func(evaluator *evaluator.JSON) error { evaluator.ResolveAllValues(context.TODO(), "", nil) return nil }, }, "Update_ResolveAllValues": { dataSyncType: sync.UPDATE, - flagResolution: func(evaluator *eval.JSONEvaluator) error { + flagResolution: func(evaluator *evaluator.JSON) error { evaluator.ResolveAllValues(context.TODO(), "", nil) return nil }, }, "Delete_ResolveAllValues": { dataSyncType: sync.DELETE, - flagResolution: func(evaluator *eval.JSONEvaluator) error { + flagResolution: func(evaluator *evaluator.JSON) error { evaluator.ResolveAllValues(context.TODO(), "", nil) return nil }, }, "Add_ResolveBooleanValue": { dataSyncType: sync.ADD, - flagResolution: func(evaluator *eval.JSONEvaluator) error { + flagResolution: func(evaluator *evaluator.JSON) error { _, _, _, _, err := evaluator.ResolveBooleanValue(context.TODO(), "", StaticBoolFlag, nil) return err }, }, "Update_ResolveStringValue": { dataSyncType: sync.UPDATE, - flagResolution: func(evaluator *eval.JSONEvaluator) error { + flagResolution: func(evaluator *evaluator.JSON) error { _, _, _, _, err := evaluator.ResolveBooleanValue(context.TODO(), "", StaticStringValue, nil) return err }, }, "Delete_ResolveIntValue": { dataSyncType: sync.DELETE, - flagResolution: func(evaluator *eval.JSONEvaluator) error { + flagResolution: func(evaluator *evaluator.JSON) error { _, _, _, _, err := evaluator.ResolveIntValue(context.TODO(), "", StaticIntFlag, nil) return err }, }, "Add_ResolveFloatValue": { dataSyncType: sync.ADD, - flagResolution: func(evaluator *eval.JSONEvaluator) error { + flagResolution: func(evaluator *evaluator.JSON) error { _, _, _, _, err := evaluator.ResolveFloatValue(context.TODO(), "", StaticFloatFlag, nil) return err }, }, "Update_ResolveObjectValue": { dataSyncType: sync.UPDATE, - flagResolution: func(evaluator *eval.JSONEvaluator) error { + flagResolution: func(evaluator *evaluator.JSON) error { _, _, _, _, err := evaluator.ResolveObjectValue(context.TODO(), "", StaticObjectFlag, nil) return err }, @@ -1145,7 +1145,7 @@ func TestFlagStateSafeForConcurrentReadWrites(t *testing.T) { for name, tt := range tests { t.Run(name, func(t *testing.T) { - jsonEvaluator := eval.NewJSONEvaluator(logger.NewLogger(nil, false), store.NewFlags()) + jsonEvaluator := evaluator.NewJSON(logger.NewLogger(nil, false), store.NewFlags()) _, _, err := jsonEvaluator.SetState(sync.DataSync{FlagData: Flags, Type: sync.ADD}) if err != nil { @@ -1210,7 +1210,7 @@ func TestFlagStateSafeForConcurrentReadWrites(t *testing.T) { func TestFlagdAmbientProperties(t *testing.T) { t.Run("flagKeyIsInTheContext", func(t *testing.T) { - evaluator := eval.NewJSONEvaluator(logger.NewLogger(nil, false), store.NewFlags()) + evaluator := evaluator.NewJSON(logger.NewLogger(nil, false), store.NewFlags()) _, _, err := evaluator.SetState(sync.DataSync{FlagData: `{ "flags": { @@ -1250,7 +1250,7 @@ func TestFlagdAmbientProperties(t *testing.T) { }) t.Run("timestampIsInTheContext", func(t *testing.T) { - evaluator := eval.NewJSONEvaluator(logger.NewLogger(nil, false), store.NewFlags()) + evaluator := evaluator.NewJSON(logger.NewLogger(nil, false), store.NewFlags()) _, _, err := evaluator.SetState(sync.DataSync{FlagData: `{ "flags": { @@ -1284,7 +1284,7 @@ func TestFlagdAmbientProperties(t *testing.T) { func TestTargetingVariantBehavior(t *testing.T) { t.Run("missing variant error", func(t *testing.T) { - evaluator := eval.NewJSONEvaluator(logger.NewLogger(nil, false), store.NewFlags()) + evaluator := evaluator.NewJSON(logger.NewLogger(nil, false), store.NewFlags()) _, _, err := evaluator.SetState(sync.DataSync{FlagData: `{ "flags": { @@ -1312,7 +1312,7 @@ func TestTargetingVariantBehavior(t *testing.T) { }) t.Run("null fallback", func(t *testing.T) { - evaluator := eval.NewJSONEvaluator(logger.NewLogger(nil, false), store.NewFlags()) + evaluator := evaluator.NewJSON(logger.NewLogger(nil, false), store.NewFlags()) _, _, err := evaluator.SetState(sync.DataSync{FlagData: `{ "flags": { @@ -1344,7 +1344,7 @@ func TestTargetingVariantBehavior(t *testing.T) { }) t.Run("match booleans", func(t *testing.T) { - evaluator := eval.NewJSONEvaluator(logger.NewLogger(nil, false), store.NewFlags()) + evaluator := evaluator.NewJSON(logger.NewLogger(nil, false), store.NewFlags()) //nolint:dupword _, _, err := evaluator.SetState(sync.DataSync{FlagData: `{ diff --git a/core/pkg/eval/legacy_fractional_evaluation.go b/core/pkg/evaluator/legacy_fractional.go similarity index 90% rename from core/pkg/eval/legacy_fractional_evaluation.go rename to core/pkg/evaluator/legacy_fractional.go index 836d287e0..04f58b540 100644 --- a/core/pkg/eval/legacy_fractional_evaluation.go +++ b/core/pkg/evaluator/legacy_fractional.go @@ -1,7 +1,7 @@ // This evaluation type is deprecated and will be removed before v1. // Do not enhance it or use it for reference. -package eval +package evaluator import ( "errors" @@ -17,8 +17,8 @@ const ( LegacyFractionEvaluationLink = "https://flagd.dev/concepts/#migrating-from-legacy-fractionalevaluation" ) -// Deprecated: LegacyFractionalEvaluator is deprecated. This will be removed prior to v1 release. -type LegacyFractionalEvaluator struct { +// Deprecated: LegacyFractional is deprecated. This will be removed prior to v1 release. +type LegacyFractional struct { Logger *logger.Logger } @@ -27,11 +27,11 @@ type legacyFractionalEvaluationDistribution struct { percentage int } -func NewLegacyFractionalEvaluator(logger *logger.Logger) *LegacyFractionalEvaluator { - return &LegacyFractionalEvaluator{Logger: logger} +func NewLegacyFractional(logger *logger.Logger) *LegacyFractional { + return &LegacyFractional{Logger: logger} } -func (fe *LegacyFractionalEvaluator) LegacyFractionalEvaluation(values, data interface{}) interface{} { +func (fe *LegacyFractional) LegacyFractionalEvaluation(values, data interface{}) interface{} { fe.Logger.Warn( fmt.Sprintf("%s is deprecated, please use %s, see: %s", LegacyFractionEvaluationName, diff --git a/core/pkg/eval/legacy_fractional_evaluation_test.go b/core/pkg/evaluator/legacy_fractional_test.go similarity index 98% rename from core/pkg/eval/legacy_fractional_evaluation_test.go rename to core/pkg/evaluator/legacy_fractional_test.go index 67dda2260..5208d1281 100644 --- a/core/pkg/eval/legacy_fractional_evaluation_test.go +++ b/core/pkg/evaluator/legacy_fractional_test.go @@ -1,4 +1,4 @@ -package eval +package evaluator import ( "testing" @@ -269,12 +269,12 @@ func TestLegacyFractionalEvaluation(t *testing.T) { for name, tt := range tests { t.Run(name, func(t *testing.T) { log := logger.NewLogger(nil, false) - je := NewJSONEvaluator( + je := NewJSON( log, store.NewFlags(), WithEvaluator( "fractionalEvaluation", - NewLegacyFractionalEvaluator(log).LegacyFractionalEvaluation, + NewLegacyFractional(log).LegacyFractionalEvaluation, ), ) je.store.Flags = tt.flags.Flags diff --git a/core/pkg/eval/mock/ievaluator.go b/core/pkg/evaluator/mock/ievaluator.go similarity index 99% rename from core/pkg/eval/mock/ievaluator.go rename to core/pkg/evaluator/mock/ievaluator.go index c29eae3eb..83b2f65af 100644 --- a/core/pkg/eval/mock/ievaluator.go +++ b/core/pkg/evaluator/mock/ievaluator.go @@ -9,7 +9,7 @@ import ( reflect "reflect" gomock "github.com/golang/mock/gomock" - eval "github.com/open-feature/flagd/core/pkg/eval" + eval "github.com/open-feature/flagd/core/pkg/evaluator" sync "github.com/open-feature/flagd/core/pkg/sync" ) diff --git a/core/pkg/eval/semver_evaluation.go b/core/pkg/evaluator/semver.go similarity index 93% rename from core/pkg/eval/semver_evaluation.go rename to core/pkg/evaluator/semver.go index cd2ef4f71..0cc37b74d 100644 --- a/core/pkg/eval/semver_evaluation.go +++ b/core/pkg/evaluator/semver.go @@ -1,4 +1,4 @@ -package eval +package evaluator import ( "errors" @@ -52,12 +52,12 @@ func (svo SemVerOperator) compare(v1, v2 string) (bool, error) { } } -type SemVerComparisonEvaluator struct { +type SemVerComparison struct { Logger *logger.Logger } -func NewSemVerComparisonEvaluator(log *logger.Logger) *SemVerComparisonEvaluator { - return &SemVerComparisonEvaluator{Logger: log} +func NewSemVerComparison(log *logger.Logger) *SemVerComparison { + return &SemVerComparison{Logger: log} } // SemVerEvaluation checks if the given property matches a semantic versioning condition. @@ -81,7 +81,7 @@ func NewSemVerComparisonEvaluator(log *logger.Logger) *SemVerComparisonEvaluator // 1. Target property: this needs which both resolve to a semantic versioning string // 2. Operator: One of the following: '=', '!=', '>', '<', '>=', '<=', '~', '^' // 3. Target value: this needs which both resolve to a semantic versioning string -func (je *SemVerComparisonEvaluator) SemVerEvaluation(values, _ interface{}) interface{} { +func (je *SemVerComparison) SemVerEvaluation(values, _ interface{}) interface{} { actualVersion, targetVersion, operator, err := parseSemverEvaluationData(values) if err != nil { je.Logger.Error(fmt.Sprintf("parse sem_ver evaluation data: %v", err)) diff --git a/core/pkg/eval/semver_evaluation_test.go b/core/pkg/evaluator/semver_test.go similarity index 99% rename from core/pkg/eval/semver_evaluation_test.go rename to core/pkg/evaluator/semver_test.go index 9920d77bc..bf4133a50 100644 --- a/core/pkg/eval/semver_evaluation_test.go +++ b/core/pkg/evaluator/semver_test.go @@ -1,4 +1,4 @@ -package eval +package evaluator import ( "testing" @@ -697,12 +697,12 @@ func TestJSONEvaluator_semVerEvaluation(t *testing.T) { for name, tt := range tests { t.Run(name, func(t *testing.T) { log := logger.NewLogger(nil, false) - je := NewJSONEvaluator( + je := NewJSON( log, store.NewFlags(), WithEvaluator( SemVerEvaluationName, - NewSemVerComparisonEvaluator(log).SemVerEvaluation, + NewSemVerComparison(log).SemVerEvaluation, ), ) je.store.Flags = tt.flags.Flags diff --git a/core/pkg/eval/string_comparison_evaluation.go b/core/pkg/evaluator/string_comparison.go similarity index 99% rename from core/pkg/eval/string_comparison_evaluation.go rename to core/pkg/evaluator/string_comparison.go index 05650e833..a6e49f27e 100644 --- a/core/pkg/eval/string_comparison_evaluation.go +++ b/core/pkg/evaluator/string_comparison.go @@ -1,4 +1,4 @@ -package eval +package evaluator import ( "errors" diff --git a/core/pkg/eval/string_comparison_evaluation_test.go b/core/pkg/evaluator/string_comparison_test.go similarity index 99% rename from core/pkg/eval/string_comparison_evaluation_test.go rename to core/pkg/evaluator/string_comparison_test.go index 048795133..fc7b3368b 100644 --- a/core/pkg/eval/string_comparison_evaluation_test.go +++ b/core/pkg/evaluator/string_comparison_test.go @@ -1,4 +1,4 @@ -package eval +package evaluator import ( "fmt" @@ -181,7 +181,7 @@ func TestJSONEvaluator_startsWithEvaluation(t *testing.T) { for name, tt := range tests { t.Run(name, func(t *testing.T) { log := logger.NewLogger(nil, false) - je := NewJSONEvaluator( + je := NewJSON( log, store.NewFlags(), WithEvaluator( @@ -383,7 +383,7 @@ func TestJSONEvaluator_endsWithEvaluation(t *testing.T) { for name, tt := range tests { t.Run(name, func(t *testing.T) { log := logger.NewLogger(nil, false) - je := NewJSONEvaluator( + je := NewJSON( log, store.NewFlags(), WithEvaluator( diff --git a/core/pkg/runtime/from_config.go b/core/pkg/runtime/from_config.go index d49ae4374..ae60dd24b 100644 --- a/core/pkg/runtime/from_config.go +++ b/core/pkg/runtime/from_config.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/open-feature/flagd/core/pkg/eval" + "github.com/open-feature/flagd/core/pkg/evaluator" "github.com/open-feature/flagd/core/pkg/logger" "github.com/open-feature/flagd/core/pkg/service" flageval "github.com/open-feature/flagd/core/pkg/service/flag-evaluation" @@ -100,30 +100,30 @@ func FromConfig(logger *logger.Logger, version string, config Config) (*Runtime, }, nil } -func setupJSONEvaluator(logger *logger.Logger, s *store.Flags) *eval.JSONEvaluator { - evaluator := eval.NewJSONEvaluator( +func setupJSONEvaluator(logger *logger.Logger, s *store.Flags) *evaluator.JSON { + evaluator := evaluator.NewJSON( logger, s, - eval.WithEvaluator( - eval.FractionEvaluationName, - eval.NewFractionalEvaluator(logger).FractionalEvaluation, + evaluator.WithEvaluator( + evaluator.FractionEvaluationName, + evaluator.NewFractional(logger).Evaluate, ), - eval.WithEvaluator( - eval.StartsWithEvaluationName, - eval.NewStringComparisonEvaluator(logger).StartsWithEvaluation, + evaluator.WithEvaluator( + evaluator.StartsWithEvaluationName, + evaluator.NewStringComparisonEvaluator(logger).StartsWithEvaluation, ), - eval.WithEvaluator( - eval.EndsWithEvaluationName, - eval.NewStringComparisonEvaluator(logger).EndsWithEvaluation, + evaluator.WithEvaluator( + evaluator.EndsWithEvaluationName, + evaluator.NewStringComparisonEvaluator(logger).EndsWithEvaluation, ), - eval.WithEvaluator( - eval.SemVerEvaluationName, - eval.NewSemVerComparisonEvaluator(logger).SemVerEvaluation, + evaluator.WithEvaluator( + evaluator.SemVerEvaluationName, + evaluator.NewSemVerComparison(logger).SemVerEvaluation, ), // deprecated: will be removed before v1! - eval.WithEvaluator( - eval.LegacyFractionEvaluationName, - eval.NewLegacyFractionalEvaluator(logger).LegacyFractionalEvaluation, + evaluator.WithEvaluator( + evaluator.LegacyFractionEvaluationName, + evaluator.NewLegacyFractional(logger).LegacyFractionalEvaluation, ), ) return evaluator diff --git a/core/pkg/runtime/runtime.go b/core/pkg/runtime/runtime.go index 50bd51958..73c3f227d 100644 --- a/core/pkg/runtime/runtime.go +++ b/core/pkg/runtime/runtime.go @@ -9,7 +9,7 @@ import ( msync "sync" "syscall" - "github.com/open-feature/flagd/core/pkg/eval" + "github.com/open-feature/flagd/core/pkg/evaluator" "github.com/open-feature/flagd/core/pkg/logger" "github.com/open-feature/flagd/core/pkg/service" "github.com/open-feature/flagd/core/pkg/sync" @@ -17,7 +17,7 @@ import ( ) type Runtime struct { - Evaluator eval.IEvaluator + Evaluator evaluator.IEvaluator Logger *logger.Logger Service service.IFlagEvaluationService ServiceConfig service.Configuration diff --git a/core/pkg/service/flag-evaluation/connect_service.go b/core/pkg/service/flag-evaluation/connect_service.go index 6212cdf80..9bcefbf2b 100644 --- a/core/pkg/service/flag-evaluation/connect_service.go +++ b/core/pkg/service/flag-evaluation/connect_service.go @@ -12,7 +12,7 @@ import ( "time" schemaConnectV1 "buf.build/gen/go/open-feature/flagd/connectrpc/go/schema/v1/schemav1connect" - "github.com/open-feature/flagd/core/pkg/eval" + "github.com/open-feature/flagd/core/pkg/evaluator" "github.com/open-feature/flagd/core/pkg/logger" "github.com/open-feature/flagd/core/pkg/service" "github.com/open-feature/flagd/core/pkg/service/middleware" @@ -35,7 +35,7 @@ const ErrorPrefix = "FlagdError:" type ConnectService struct { logger *logger.Logger - eval eval.IEvaluator + eval evaluator.IEvaluator metrics *telemetry.MetricsRecorder eventingConfiguration *eventingConfiguration @@ -50,7 +50,7 @@ type ConnectService struct { // NewConnectService creates a ConnectService with provided parameters func NewConnectService( - logger *logger.Logger, evaluator eval.IEvaluator, mRecorder *telemetry.MetricsRecorder, + logger *logger.Logger, evaluator evaluator.IEvaluator, mRecorder *telemetry.MetricsRecorder, ) *ConnectService { return &ConnectService{ logger: logger, diff --git a/core/pkg/service/flag-evaluation/connect_service_test.go b/core/pkg/service/flag-evaluation/connect_service_test.go index 7d5808a54..90892cf16 100644 --- a/core/pkg/service/flag-evaluation/connect_service_test.go +++ b/core/pkg/service/flag-evaluation/connect_service_test.go @@ -12,7 +12,7 @@ import ( schemaGrpcV1 "buf.build/gen/go/open-feature/flagd/grpc/go/schema/v1/schemav1grpc" schemaV1 "buf.build/gen/go/open-feature/flagd/protocolbuffers/go/schema/v1" "github.com/golang/mock/gomock" - mock "github.com/open-feature/flagd/core/pkg/eval/mock" + mock "github.com/open-feature/flagd/core/pkg/evaluator/mock" "github.com/open-feature/flagd/core/pkg/logger" "github.com/open-feature/flagd/core/pkg/model" iservice "github.com/open-feature/flagd/core/pkg/service" diff --git a/core/pkg/service/flag-evaluation/flag_evaluator.go b/core/pkg/service/flag-evaluation/flag_evaluator.go index 5e3ae4a92..70527f73a 100644 --- a/core/pkg/service/flag-evaluation/flag_evaluator.go +++ b/core/pkg/service/flag-evaluation/flag_evaluator.go @@ -7,7 +7,7 @@ import ( schemaV1 "buf.build/gen/go/open-feature/flagd/protocolbuffers/go/schema/v1" "connectrpc.com/connect" - "github.com/open-feature/flagd/core/pkg/eval" + "github.com/open-feature/flagd/core/pkg/evaluator" "github.com/open-feature/flagd/core/pkg/logger" "github.com/open-feature/flagd/core/pkg/model" "github.com/open-feature/flagd/core/pkg/service" @@ -26,7 +26,7 @@ type resolverSignature[T constraints] func(context context.Context, reqID, flagK type FlagEvaluationService struct { logger *logger.Logger - eval eval.IEvaluator + eval evaluator.IEvaluator metrics *telemetry.MetricsRecorder eventingConfiguration *eventingConfiguration flagEvalTracer trace.Tracer @@ -34,7 +34,7 @@ type FlagEvaluationService struct { // NewFlagEvaluationService creates a FlagEvaluationService with provided parameters func NewFlagEvaluationService(log *logger.Logger, - eval eval.IEvaluator, eventingCfg *eventingConfiguration, metricsRecorder *telemetry.MetricsRecorder, + eval evaluator.IEvaluator, eventingCfg *eventingConfiguration, metricsRecorder *telemetry.MetricsRecorder, ) *FlagEvaluationService { return &FlagEvaluationService{ logger: log, diff --git a/core/pkg/service/flag-evaluation/flag_evaluator_test.go b/core/pkg/service/flag-evaluation/flag_evaluator_test.go index b97f3a9d1..2f57803ac 100644 --- a/core/pkg/service/flag-evaluation/flag_evaluator_test.go +++ b/core/pkg/service/flag-evaluation/flag_evaluator_test.go @@ -8,8 +8,8 @@ import ( schemaV1 "buf.build/gen/go/open-feature/flagd/protocolbuffers/go/schema/v1" "connectrpc.com/connect" "github.com/golang/mock/gomock" - "github.com/open-feature/flagd/core/pkg/eval" - mock "github.com/open-feature/flagd/core/pkg/eval/mock" + "github.com/open-feature/flagd/core/pkg/evaluator" + mock "github.com/open-feature/flagd/core/pkg/evaluator/mock" "github.com/open-feature/flagd/core/pkg/logger" "github.com/open-feature/flagd/core/pkg/model" "github.com/open-feature/flagd/core/pkg/telemetry" @@ -56,13 +56,13 @@ var sadCommon = evalCommons{ func TestConnectService_ResolveAll(t *testing.T) { tests := map[string]struct { req *schemaV1.ResolveAllRequest - evalRes []eval.AnyValue + evalRes []evaluator.AnyValue wantErr error wantRes *schemaV1.ResolveAllResponse }{ "happy-path": { req: &schemaV1.ResolveAllRequest{}, - evalRes: []eval.AnyValue{ + evalRes: []evaluator.AnyValue{ { Value: true, Variant: "bool-true",