Skip to content

Commit 1eaa8e4

Browse files
authored
refactor(Engine): nits from context work review (#117)
* Pop feature ID out of the override key * Replace flagsmith_id with id
1 parent a9d1e23 commit 1eaa8e4

File tree

4 files changed

+18
-14
lines changed

4 files changed

+18
-14
lines changed

src/Flagsmith.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -371,12 +371,12 @@ traits: $traits,
371371

372372
$segments = [];
373373
foreach ($evaluationResult->segments as $resultSegment) {
374-
if (($resultSegment->metadata['flagsmith_id'] ?? null) === null) {
374+
if (($resultSegment->metadata['id'] ?? null) === null) {
375375
continue; // Not a real segment, e.g. an identity override virtual segment
376376
}
377377

378378
$segment = new Segment();
379-
$segment->id = $resultSegment->metadata['flagsmith_id'];
379+
$segment->id = $resultSegment->metadata['id'];
380380
$segment->name = $resultSegment->name;
381381
$segments[] = $segment;
382382
}

src/Models/Flags.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public static function fromEvaluationResult(
9696
foreach ($evaluationResult->flags as $flagResult) {
9797
$flag = new Flag();
9898
$flag->feature_name = $flagResult->name;
99-
$flag->feature_id = $flagResult->metadata['flagsmith_id'];
99+
$flag->feature_id = $flagResult->metadata['id'];
100100
$flag->enabled = $flagResult->enabled;
101101
$flag->value = $flagResult->value;
102102
$flags[$flagResult->name] = $flag;

src/Utils/Mappers.php

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public static function mapEnvironmentDocumentToContext($environmentDocument): Ev
3737
$segment->rules = self::_mapEnvironmentDocumentRulesToContextRules($srcSegment->rules ?? []);
3838
$segment->metadata = [
3939
'source' => 'api',
40-
'flagsmith_id' => $srcSegment->id,
40+
'id' => $srcSegment->id,
4141
];
4242
$context->segments[$segment->key] = $segment;
4343

@@ -115,7 +115,7 @@ private static function _mapEnvironmentDocumentFeatureStatesToFeatureContexts($f
115115
$feature->enabled = $featureState->enabled;
116116
$feature->value = $featureState->feature_state_value;
117117
$feature->priority = $featureState->feature_segment?->priority ?? null;
118-
$feature->metadata = ['flagsmith_id' => $featureState->feature->id];
118+
$feature->metadata = ['id' => $featureState->feature->id];
119119
$feature->variants = [];
120120
$multivariateFeatureStateValues = ((array) $featureState->multivariate_feature_state_values) ?? [];
121121
$multivariateFeatureStateValueUUIDs = array_column($multivariateFeatureStateValues, 'mv_fs_value_uuid');
@@ -141,6 +141,9 @@ private static function _mapEnvironmentDocumentFeatureStatesToFeatureContexts($f
141141
*/
142142
private static function _mapIdentityOverridesToSegments($identityOverrides)
143143
{
144+
/** @var array<string, int> */
145+
$featureIDsByName = [];
146+
144147
/** @var array<string, array<string>> */
145148
$featuresToIdentifiers = [];
146149
foreach ($identityOverrides as $identityOverride) {
@@ -154,8 +157,8 @@ private static function _mapIdentityOverridesToSegments($identityOverrides)
154157
/** @var array<array<mixed>> */
155158
$overridesKey = [];
156159
foreach ($identityFeatures as $featureState) {
160+
$featureIDsByName[$featureState->feature->name] = $featureState->feature->id;
157161
$part = [
158-
$featureState->feature->id,
159162
$featureState->feature->name,
160163
$featureState->enabled,
161164
$featureState->feature_state_value,
@@ -185,14 +188,15 @@ private static function _mapIdentityOverridesToSegments($identityOverrides)
185188

186189
$segment->overrides = [];
187190
foreach (unserialize($serializedOverridesKey) as $overrideKey) {
188-
[$featureId, $featureName, $enabled, $value] = $overrideKey;
191+
[$featureName, $enabled, $value] = $overrideKey;
192+
$featureId = $featureIDsByName[$featureName];
189193
$feature = new FeatureContext();
190194
$feature->key = ''; // Not used in identity overrides
191195
$feature->name = $featureName;
192196
$feature->enabled = $enabled;
193197
$feature->value = $value;
194198
$feature->priority = Engine::STRONGEST_PRIORITY;
195-
$feature->metadata = ['flagsmith_id' => $featureId];
199+
$feature->metadata = ['id' => $featureId];
196200
$segment->overrides[] = $feature;
197201
}
198202

tests/Utils/MappersTest.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public function testMapEnvironmentDocumentToContextProducesEvaluationContext():
3333
$this->assertCount(1, $context->segments[0]->rules);
3434
$this->assertEmpty($context->segments[0]->overrides);
3535
$this->assertEquals('api', $context->segments[0]->metadata['source']);
36-
$this->assertEquals('1', $context->segments[0]->metadata['flagsmith_id']);
36+
$this->assertEquals('1', $context->segments[0]->metadata['id']);
3737

3838
$this->assertEquals(SegmentRuleType::ALL, $context->segments[0]->rules[0]->type);
3939
$this->assertEmpty($context->segments[0]->rules[0]->conditions);
@@ -47,7 +47,7 @@ public function testMapEnvironmentDocumentToContextProducesEvaluationContext():
4747
$this->assertEquals(SegmentConditionOperator::EQUAL, $context->segments[0]->rules[0]->rules[0]->conditions[0]->operator);
4848
$this->assertEquals('bar', $context->segments[0]->rules[0]->rules[0]->conditions[0]->value);
4949

50-
$overrideKey = '1dfdec3e4c67121138b1faa01b82f9f731c692842b865f263824bfabf46d5fff';
50+
$overrideKey = '2a3691c8a306223592e2e657e50c44cf126db84730e813adea6f951c502b19e8';
5151
$this->assertArrayHasKey($overrideKey, $context->segments);
5252
$this->assertEquals('', $context->segments[$overrideKey]->key);
5353
$this->assertEquals('identity_overrides', $context->segments[$overrideKey]->name);
@@ -68,7 +68,7 @@ public function testMapEnvironmentDocumentToContextProducesEvaluationContext():
6868
$this->assertEquals('some-overridden-value', $context->segments[$overrideKey]->overrides[0]->value);
6969
$this->assertEquals(-INF, $context->segments[$overrideKey]->overrides[0]->priority);
7070
$this->assertNull($context->segments[$overrideKey]->overrides[0]->variants);
71-
$this->assertEquals(['flagsmith_id' => 1], $context->segments[$overrideKey]->overrides[0]->metadata);
71+
$this->assertEquals(['id' => 1], $context->segments[$overrideKey]->overrides[0]->metadata);
7272

7373
$this->assertCount(3, $context->features);
7474
$this->assertArrayHasKey('some_feature', $context->features);
@@ -78,7 +78,7 @@ public function testMapEnvironmentDocumentToContextProducesEvaluationContext():
7878
$this->assertEquals('some-value', $context->features['some_feature']->value);
7979
$this->assertNull($context->features['some_feature']->priority);
8080
$this->assertEmpty($context->features['some_feature']->variants);
81-
$this->assertEquals(['flagsmith_id' => 1], $context->features['some_feature']->metadata);
81+
$this->assertEquals(['id' => 1], $context->features['some_feature']->metadata);
8282

8383
// Test multivariate feature with IDs - priority should be based on ID
8484
$this->assertArrayHasKey('mv_feature_with_ids', $context->features);
@@ -89,7 +89,7 @@ public function testMapEnvironmentDocumentToContextProducesEvaluationContext():
8989
$this->assertEquals('default_value', $mvFeatureWithIds->value);
9090
$this->assertNull($mvFeatureWithIds->priority);
9191
$this->assertCount(2, $mvFeatureWithIds->variants);
92-
$this->assertEquals(['flagsmith_id' => 2], $mvFeatureWithIds->metadata);
92+
$this->assertEquals(['id' => 2], $mvFeatureWithIds->metadata);
9393

9494
// First variant: ID=100, should have priority 100
9595
$this->assertEquals('variant_a', $mvFeatureWithIds->variants[0]->value);
@@ -110,7 +110,7 @@ public function testMapEnvironmentDocumentToContextProducesEvaluationContext():
110110
$this->assertEquals('fallback_value', $mvFeatureWithoutIds->value);
111111
$this->assertNull($mvFeatureWithoutIds->priority);
112112
$this->assertCount(3, $mvFeatureWithoutIds->variants);
113-
$this->assertEquals(['flagsmith_id' => 3], $mvFeatureWithoutIds->metadata);
113+
$this->assertEquals(['id' => 3], $mvFeatureWithoutIds->metadata);
114114

115115
// Variants should be ordered by UUID alphabetically
116116
$this->assertEquals('option_y', $mvFeatureWithoutIds->variants[0]->value);

0 commit comments

Comments
 (0)