diff --git a/src/OpenFeature.Contrib.Providers.Flagsmith/FlagsmithProvider.cs b/src/OpenFeature.Contrib.Providers.Flagsmith/FlagsmithProvider.cs index 8be26c89..66ee0fd9 100644 --- a/src/OpenFeature.Contrib.Providers.Flagsmith/FlagsmithProvider.cs +++ b/src/OpenFeature.Contrib.Providers.Flagsmith/FlagsmithProvider.cs @@ -65,17 +65,12 @@ public FlagsmithProvider(IFlagsmithProviderConfiguration providerOptions, IFlags private Task GetFlags(EvaluationContext ctx) { - string key = null; - if (ctx != null && ctx.TryGetValue(Configuration.TargetingKey, out var value)) - { - key = value?.AsString; - } + var key = ctx?.TargetingKey; return string.IsNullOrEmpty(key) ? _flagsmithClient.GetEnvironmentFlags() : _flagsmithClient.GetIdentityFlags(key, ctx .AsDictionary() - .Where(x => x.Key != Configuration.TargetingKey) .Select(x => new Trait(x.Key, x.Value.AsObject) as ITrait) .ToList()); } diff --git a/src/OpenFeature.Contrib.Providers.Flagsmith/FlagsmithProviderConfiguration.cs b/src/OpenFeature.Contrib.Providers.Flagsmith/FlagsmithProviderConfiguration.cs index 164df947..67eea53a 100644 --- a/src/OpenFeature.Contrib.Providers.Flagsmith/FlagsmithProviderConfiguration.cs +++ b/src/OpenFeature.Contrib.Providers.Flagsmith/FlagsmithProviderConfiguration.cs @@ -5,16 +5,6 @@ /// public class FlagsmithProviderConfiguration : IFlagsmithProviderConfiguration { - /// - /// Default value for targeting key - /// - public const string DefaultTargetingKey = "targetingKey"; - - /// - /// Key that will be used as identity for Flagsmith requests. Default: "targetingKey" - /// - public string TargetingKey { get; set; } = DefaultTargetingKey; - /// public bool UsingBooleanConfigValue { get; set; } } diff --git a/src/OpenFeature.Contrib.Providers.Flagsmith/IFlagsmithProviderConfiguration.cs b/src/OpenFeature.Contrib.Providers.Flagsmith/IFlagsmithProviderConfiguration.cs index 4f594a30..61a1b111 100644 --- a/src/OpenFeature.Contrib.Providers.Flagsmith/IFlagsmithProviderConfiguration.cs +++ b/src/OpenFeature.Contrib.Providers.Flagsmith/IFlagsmithProviderConfiguration.cs @@ -7,11 +7,6 @@ namespace OpenFeature.Contrib.Providers.Flagsmith; /// public interface IFlagsmithProviderConfiguration { - /// - /// Key that will be used as identity for Flagsmith requests. - /// - public string TargetingKey { get; } - /// /// Determines whether to resolve a feature value as a boolean or use /// the isFeatureEnabled as the flag itself. These values will be false diff --git a/src/OpenFeature.Contrib.Providers.Flagsmith/README.md b/src/OpenFeature.Contrib.Providers.Flagsmith/README.md index e8619e1c..212d0da0 100644 --- a/src/OpenFeature.Contrib.Providers.Flagsmith/README.md +++ b/src/OpenFeature.Contrib.Providers.Flagsmith/README.md @@ -43,40 +43,42 @@ packet add OpenFeature.Contrib.Providers.Flagsmith To create a Flagmith provider you should define provider and Flagsmith settings. ```csharp -using OpenFeature.Contrib.Providers.Flagd; +using Flagsmith; +using OpenFeature.Contrib.Providers.Flagsmith; +using OpenFeature.Model; -namespace OpenFeatureTestApp +// Additional configs for provider +var providerConfig = new FlagsmithProviderConfiguration(); + +// Flagsmith client configuration +var flagsmithConfig = new FlagsmithConfiguration { - class Hello { - static void Main(string[] args) { - - // Additional configs for provider - var providerConfig = new FlagsmithProviderConfiguration(); - - //Flagsmith client configuration - var flagsmithConfig = new FlagsmithConfiguration - { - ApiUrl = "https://edge.api.flagsmith.com/api/v1/", - EnvironmentKey = string.Empty, - EnableClientSideEvaluation = false, - EnvironmentRefreshIntervalSeconds = 60, - EnableAnalytics = false, - Retries = 1 - }; - var flagsmithProvider = new FlagsmithProvider(providerConfig, flagsmithConfig);\ - - // Set the flagsmithProvider as the provider for the OpenFeature SDK - OpenFeature.Api.Instance.SetProvider(flagsmithProvider); - - var client = OpenFeature.Api.Instance.GetClient("my-app"); - - var val = client.GetBooleanValue("myBoolFlag", false, null); - - // Print the value of the 'myBoolFlag' feature flag - System.Console.WriteLine(val.Result.ToString()); - } - } -} + ApiUrl = "https://edge.api.flagsmith.com/api/v1/", + EnvironmentKey = "", + EnableClientSideEvaluation = false, + EnvironmentRefreshIntervalSeconds = 60, + EnableAnalytics = false, + Retries = 1, +}; +var flagsmithProvider = new FlagsmithProvider(providerConfig, flagsmithConfig); + +// Set the flagsmithProvider as the provider for the OpenFeature SDK +await OpenFeature.Api.Instance.SetProviderAsync(flagsmithProvider); + +// Get an OpenFeature client +var client = OpenFeature.Api.Instance.GetClient("my-app"); + +// Optional: set a targeting key and traits to use segment and/or identity overrides +var context = EvaluationContext.Builder() + .SetTargetingKey("my-flagsmith-identity-ID") + .Set("my-trait-key", "my-trait-value") + .Build(); + +// Evaluate a flag +var val = await client.GetBooleanValue("myBoolFlag", false, context); + +// Print the value of the 'myBoolFlag' feature flag +Console.WriteLine(val); ``` You also can create Flagsmith provider using ```HttpClient``` or precreated ```FlagsmithClient``` diff --git a/test/OpenFeature.Contrib.Providers.Flagsmith.Test/FlagsmithProviderTest.cs b/test/OpenFeature.Contrib.Providers.Flagsmith.Test/FlagsmithProviderTest.cs index 796e8edd..a16558d6 100644 --- a/test/OpenFeature.Contrib.Providers.Flagsmith.Test/FlagsmithProviderTest.cs +++ b/test/OpenFeature.Contrib.Providers.Flagsmith.Test/FlagsmithProviderTest.cs @@ -77,7 +77,7 @@ public async Task GetValue_ForEnabledFeatureWithEvaluationContext_ReturnCorrectV .Set("key4", date) .Set("key5", Structure.Empty) .Set("key6", 1.0) - .Set(FlagsmithProviderConfiguration.DefaultTargetingKey, "233"); + .SetTargetingKey("233"); // Act var result = await flagsmithProvider.ResolveBooleanValue("example-feature", false, contextBuilder.Build());