Skip to content

Commit 74cb695

Browse files
committed
add flag key to evaluation detail
1 parent 70fc6e7 commit 74cb695

File tree

3 files changed

+19
-7
lines changed

3 files changed

+19
-7
lines changed

src/FeatBit.ServerSdk/Evaluation/EvalDetail.cs

+8-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@ namespace FeatBit.Sdk.Server.Evaluation
22
{
33
public class EvalDetail<TValue>
44
{
5+
/// <summary>
6+
/// The key of the flag that was evaluated.
7+
/// </summary>
8+
public string Key { get; set; }
9+
510
/// <summary>
611
/// An enum indicating the category of the reason.
712
/// </summary>
@@ -21,11 +26,13 @@ public class EvalDetail<TValue>
2126
/// <summary>
2227
/// Constructs a new EvalDetail instance.
2328
/// </summary>
29+
/// <param name="key">the flag key</param>
2430
/// <param name="kind">the reason kind</param>
2531
/// <param name="reason">the evaluation reason</param>
2632
/// <param name="value">the flag value</param>
27-
public EvalDetail(ReasonKind kind, string reason, TValue value)
33+
public EvalDetail(string key, ReasonKind kind, string reason, TValue value)
2834
{
35+
Key = key;
2936
Kind = kind;
3037
Reason = reason;
3138
Value = value;

src/FeatBit.ServerSdk/FbClient.cs

+9-6
Original file line numberDiff line numberDiff line change
@@ -244,8 +244,11 @@ public EvalDetail<string>[] GetAllVariations(FbUser user)
244244
{
245245
var results = _store
246246
.Find<FeatureFlag>(x => x.StoreKey.StartsWith(StoreKeys.FlagPrefix))
247-
.Select(flag => _evaluator.Evaluate(flag, user).evalResult)
248-
.Select(x => new EvalDetail<string>(x.Kind, x.Reason, x.Value))
247+
.Select(flag =>
248+
{
249+
var evalResult = _evaluator.Evaluate(flag, user).evalResult;
250+
return new EvalDetail<string>(flag.Key, evalResult.Kind, evalResult.Reason, evalResult.Value);
251+
})
249252
.ToArray();
250253

251254
return results;
@@ -285,7 +288,7 @@ private EvalDetail<TValue> EvaluateCore<TValue>(
285288
if (!Initialized)
286289
{
287290
// Flag evaluation before client initialized; always returning default value
288-
return new EvalDetail<TValue>(ReasonKind.ClientNotReady, "client not ready", defaultValue);
291+
return new EvalDetail<TValue>(key, ReasonKind.ClientNotReady, "client not ready", defaultValue);
289292
}
290293

291294
var ctx = new EvaluationContext
@@ -298,16 +301,16 @@ private EvalDetail<TValue> EvaluateCore<TValue>(
298301
if (evalResult.Kind == ReasonKind.Error)
299302
{
300303
// error happened when evaluate flag, return default value
301-
return new EvalDetail<TValue>(evalResult.Kind, evalResult.Reason, defaultValue);
304+
return new EvalDetail<TValue>(key, evalResult.Kind, evalResult.Reason, defaultValue);
302305
}
303306

304307
// record evaluation event
305308
_eventProcessor.Record(evalEvent);
306309

307310
return converter(evalResult.Value, out var typedValue)
308-
? new EvalDetail<TValue>(evalResult.Kind, evalResult.Reason, typedValue)
311+
? new EvalDetail<TValue>(key, evalResult.Kind, evalResult.Reason, typedValue)
309312
// type mismatch, return default value
310-
: new EvalDetail<TValue>(ReasonKind.WrongType, "type mismatch", defaultValue);
313+
: new EvalDetail<TValue>(key, ReasonKind.WrongType, "type mismatch", defaultValue);
311314
}
312315
}
313316
}

tests/FeatBit.ServerSdk.Tests/FbClientTests.cs

+2
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public void GetVariationDetail()
6060

6161
var user = FbUser.Builder("u1").Build();
6262
var variationDetail = client.BoolVariationDetail("returns-true", user);
63+
Assert.Equal("returns-true", variationDetail.Key);
6364
Assert.True(variationDetail.Value);
6465
Assert.Equal(ReasonKind.Fallthrough, variationDetail.Kind);
6566
Assert.Equal("fall through targets and rules", variationDetail.Reason);
@@ -77,6 +78,7 @@ public void GetAllVariations()
7778
Assert.Single(results);
7879

7980
var result0 = results[0];
81+
Assert.Equal("returns-true", result0.Key);
8082
Assert.Equal("true", result0.Value);
8183
Assert.Equal(ReasonKind.Fallthrough, result0.Kind);
8284
Assert.Equal("fall through targets and rules", result0.Reason);

0 commit comments

Comments
 (0)