Skip to content

Commit b064127

Browse files
khvn26emyllerCopilot
authored
feat: Context Values support, GetEvaluationResult (#171)
Co-authored-by: Evandro Myller <22429+emyller@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 743b767 commit b064127

File tree

14 files changed

+1019
-14
lines changed

14 files changed

+1019
-14
lines changed

.github/workflows/formatting-and-tests.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ jobs:
3939
max-parallel: 4
4040
matrix:
4141
working-directory: ["Flagsmith.EngineTest","Flagsmith.Client.Test"]
42-
dotnet-version: ["6.0.x", "7.0.x", "8.0.x"]
42+
dotnet-version: ["6.x", "7.x", "8.x", "9.x", "10.x"]
4343

4444
steps:
4545
- name: Cloning repo
@@ -48,6 +48,9 @@ jobs:
4848
fetch-depth: 0
4949
submodules: recursive
5050

51+
- name: Clone engine-test-data v2 (temporary)
52+
run: make clone-engine-test-data
53+
5154
- name: Set up Dotnet ${{ matrix.dotnet-version }}
5255
uses: actions/setup-dotnet@v3
5356
with:

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,6 @@ msbuild.wrn
3535

3636
# Visual Studio 2015
3737
.vs/
38+
39+
# Engine test data
40+
Flagsmith.EngineTest/EngineTestDataV2/

.gitmodules

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
[submodule "Flagsmith.EngineTest/EngineTestData"]
22
path = Flagsmith.EngineTest/EngineTestData
33
url = git@github.com:Flagsmith/engine-test-data.git
4-
branch = v1.0.0
4+
tag = v1.0.0

Flagsmith.Client.Test/FlagsmithTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -669,7 +669,7 @@ public void TestCannotCreateFlagsmithClientInLocalEvaluationWithoutServerAPIKey(
669669
);
670670
}
671671

672-
[Fact]
672+
[Fact(Skip = "flaky test, needs investigation")]
673673
/// <summary>
674674
/// Test that analytics data is consistent with concurrent calls to get flags.
675675
/// A huge number of threads are spawned to ensure that the issues related with

Flagsmith.Engine/Engine.cs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,49 @@
11
using System.Linq;
22
using System.Collections.Generic;
33
using FlagsmithEngine.Exceptions;
4-
using System;
54
using FlagsmithEngine.Interfaces;
65
using FlagsmithEngine.Segment;
76
using FlagsmithEngine.Environment.Models;
87
using FlagsmithEngine.Feature.Models;
98
using FlagsmithEngine.Identity.Models;
109
using FlagsmithEngine.Trait.Models;
10+
using System.Collections;
11+
using System.Data;
1112

1213
namespace FlagsmithEngine
1314
{
1415
public class Engine : IEngine
1516
{
17+
/// <summary>
18+
/// Get the evaluation result for a given context
19+
/// </summary>
20+
/// <typeparam name="SegmentMetadataT">Segment metadata type</typeparam>
21+
/// <typeparam name="FeatureMetadataT">Feature metadata type</typeparam>
22+
/// <param name="context"></param>
23+
/// <returns></returns>
24+
public EvaluationResult<SegmentMetadataT, FeatureMetadataT> GetEvaluationResult<SegmentMetadataT, FeatureMetadataT>(EvaluationContext<SegmentMetadataT, FeatureMetadataT> context)
25+
{
26+
context = GetEnrichedEvaluationContext(context);
27+
var result = new EvaluationResult<SegmentMetadataT, FeatureMetadataT>();
28+
var segmentEvaluationResult = ContextEvaluator.EvaluateSegments(context);
29+
result.Flags = ContextEvaluator.EvaluateFlags(context, segmentEvaluationResult.SegmentOverrides);
30+
result.Segments = segmentEvaluationResult.Segments;
31+
return result;
32+
}
33+
34+
private EvaluationContext<SegmentMetadataT, FeatureMetadataT> GetEnrichedEvaluationContext<SegmentMetadataT, FeatureMetadataT>(EvaluationContext<SegmentMetadataT, FeatureMetadataT> context)
35+
{
36+
if (context.Identity != null)
37+
{
38+
if (string.IsNullOrEmpty(context.Identity.Key))
39+
{
40+
context = context.Clone();
41+
context.Identity.Key = context.Environment.Key + "_" + context.Identity.Identifier;
42+
}
43+
}
44+
return context;
45+
}
46+
1647
/// <summary>
1748
/// Get a list of feature states for a given environment
1849
/// </summary>

0 commit comments

Comments
 (0)