Skip to content

Commit 1cb50f3

Browse files
authored
Merge pull request #87 from flagship-io/patch-segment
Patch segment
2 parents a6d03ee + aec73a3 commit 1cb50f3

5 files changed

Lines changed: 81 additions & 51 deletions

File tree

src/Decision/BucketingManager.php

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,13 @@ public function __construct(HttpClientInterface $httpClient, BucketingConfig $co
7777
*/
7878
protected function sendContext(VisitorAbstract $visitor): void
7979
{
80-
if (count($visitor->getContext()) <= self::NB_MIN_CONTEXT_KEYS || !$visitor->hasConsented()|| !$visitor->getHasContextBeenUpdated()) {
80+
if (count($visitor->getContext()) <= self::NB_MIN_CONTEXT_KEYS || !$visitor->hasConsented() || !$visitor->getHasContextBeenUpdated()) {
8181
return;
8282
}
8383

8484
$visitor->setHasContextBeenUpdated(false);
8585

86-
$segmentHit = new Segment($visitor->getContext());
86+
$segmentHit = new Segment($visitor->getContext(), $this->getConfig());
8787
$visitor->sendHit($segmentHit);
8888
}
8989

@@ -127,14 +127,14 @@ protected function getThirdPartySegment(string $visitorId): array
127127
self::GET_THIRD_PARTY_SEGMENT,
128128
FlagshipConstant::UNEXPECTED_ERROR_OCCURRED,
129129
[
130-
self::THIRD_PARTY_SEGMENT,
131-
$this->getLogFormat(
132-
$exception->getMessage(),
133-
$url,
134-
[],
135-
[],
136-
$this->getNow() - $now
137-
),
130+
self::THIRD_PARTY_SEGMENT,
131+
$this->getLogFormat(
132+
$exception->getMessage(),
133+
$url,
134+
[],
135+
[],
136+
$this->getNow() - $now
137+
),
138138
]
139139
);
140140
}
@@ -289,14 +289,14 @@ private function getVisitorCampaigns(
289289
$visitor
290290
);
291291
$visitorCampaigns[] = [
292-
FlagshipField::FIELD_ID => $campaignId,
293-
FlagshipField::FIELD_NANE => $campaignName,
294-
FlagshipField::FIELD_SLUG => $slug,
295-
FlagshipField::FIELD_VARIATION_GROUP_ID => $variationGroup[FlagshipField::FIELD_ID],
296-
FlagshipField::FIELD_VARIATION_GROUP_NAME => $variationGroup[FlagshipField::FIELD_NANE] ?? null,
297-
FlagshipField::FIELD_VARIATION => $variations,
298-
FlagshipField::FIELD_CAMPAIGN_TYPE => $campaignType,
299-
];
292+
FlagshipField::FIELD_ID => $campaignId,
293+
FlagshipField::FIELD_NANE => $campaignName,
294+
FlagshipField::FIELD_SLUG => $slug,
295+
FlagshipField::FIELD_VARIATION_GROUP_ID => $variationGroup[FlagshipField::FIELD_ID],
296+
FlagshipField::FIELD_VARIATION_GROUP_NAME => $variationGroup[FlagshipField::FIELD_NANE] ?? null,
297+
FlagshipField::FIELD_VARIATION => $variations,
298+
FlagshipField::FIELD_CAMPAIGN_TYPE => $campaignType,
299+
];
300300
break;
301301
}
302302
}
@@ -352,11 +352,11 @@ private function getVariation(array $variationGroup, VisitorAbstract $visitor):
352352
continue;
353353
}
354354
$visitorVariation = [
355-
FlagshipField::FIELD_ID => $newVariation[FlagshipField::FIELD_ID],
356-
FlagshipField::FIELD_MODIFICATIONS => $newVariation[FlagshipField::FIELD_MODIFICATIONS],
357-
FlagshipField::FIELD_REFERENCE => !empty($newVariation[FlagshipField::FIELD_REFERENCE]),
358-
FlagshipField::FIELD_NANE => $newVariation[FlagshipField::FIELD_NANE] ?? null,
359-
];
355+
FlagshipField::FIELD_ID => $newVariation[FlagshipField::FIELD_ID],
356+
FlagshipField::FIELD_MODIFICATIONS => $newVariation[FlagshipField::FIELD_MODIFICATIONS],
357+
FlagshipField::FIELD_REFERENCE => !empty($newVariation[FlagshipField::FIELD_REFERENCE]),
358+
FlagshipField::FIELD_NANE => $newVariation[FlagshipField::FIELD_NANE] ?? null,
359+
];
360360
break;
361361
}
362362

@@ -367,11 +367,11 @@ private function getVariation(array $variationGroup, VisitorAbstract $visitor):
367367
$totalAllocation += $variation[FlagshipField::FIELD_ALLOCATION];
368368
if ($hashAllocation < $totalAllocation) {
369369
$visitorVariation = [
370-
FlagshipField::FIELD_ID => $variation[FlagshipField::FIELD_ID],
371-
FlagshipField::FIELD_MODIFICATIONS => $variation[FlagshipField::FIELD_MODIFICATIONS],
372-
FlagshipField::FIELD_REFERENCE => !empty($variation[FlagshipField::FIELD_REFERENCE]),
373-
FlagshipField::FIELD_NANE => $variation[FlagshipField::FIELD_NANE] ?? null,
374-
];
370+
FlagshipField::FIELD_ID => $variation[FlagshipField::FIELD_ID],
371+
FlagshipField::FIELD_MODIFICATIONS => $variation[FlagshipField::FIELD_MODIFICATIONS],
372+
FlagshipField::FIELD_REFERENCE => !empty($variation[FlagshipField::FIELD_REFERENCE]),
373+
FlagshipField::FIELD_NANE => $variation[FlagshipField::FIELD_NANE] ?? null,
374+
];
375375
break;
376376
}
377377
}

src/Enum/FlagshipConstant.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class FlagshipConstant
5454
/**
5555
* SDK version
5656
*/
57-
public const SDK_VERSION = "4.1.1";
57+
public const SDK_VERSION = "4.1.2";
5858

5959
public const GET_FLAG = 'GET_FLAG';
6060

src/Hit/Segment.php

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22

33
namespace Flagship\Hit;
44

5-
use Flagship\Enum\FlagshipConstant;
65
use Flagship\Enum\HitType;
6+
use Flagship\Config\FlagshipConfig;
7+
use Flagship\Enum\FlagshipConstant;
78

89
class Segment extends HitAbstract
910
{
@@ -18,7 +19,7 @@ public static function getClassName(): string
1819
/**
1920
* @var array<string, mixed>
2021
*/
21-
protected array $sl;
22+
protected array $sl = [];
2223

2324
/**
2425
* @return array<string, mixed>
@@ -45,9 +46,10 @@ public function setSl(array $sl): static
4546
/**
4647
* @param array $sl
4748
*/
48-
public function __construct(array $sl)
49+
public function __construct(array $sl, FlagshipConfig $config)
4950
{
5051
parent::__construct(HitType::SEGMENT);
52+
$this->setConfig($config);
5153
$this->setSl($sl);
5254
}
5355

@@ -57,9 +59,7 @@ public function __construct(array $sl)
5759
*/
5860
protected function isAssoc(array $array): bool
5961
{
60-
$keys = array_keys($array);
61-
62-
return array_keys($keys) !== $keys;
62+
return !array_is_list($array);
6363
}
6464

6565
/**
@@ -68,7 +68,17 @@ protected function isAssoc(array $array): bool
6868
public function toApiKeys(): array
6969
{
7070
$arrayParent = parent::toApiKeys();
71-
$arrayParent[FlagshipConstant::SL_API_ITEM] = $this->getSl();
71+
$apiContext = array_map(function ($value) {
72+
if ($value === null) {
73+
return 'null';
74+
}
75+
if (is_bool($value)) {
76+
return $value ? 'true' : 'false';
77+
}
78+
return strval($value);
79+
}, $this->getSl());
80+
81+
$arrayParent[FlagshipConstant::SL_API_ITEM] = $apiContext;
7282
return $arrayParent;
7383
}
7484

@@ -77,7 +87,7 @@ public function toApiKeys(): array
7787
*/
7888
public function isReady(): bool
7989
{
80-
return parent::isReady() && $this->getSl();
90+
return parent::isReady() && $this->getSl() && count($this->getSl()) > 0;
8191
}
8292

8393
/**

tests/Api/TrackingManagerTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ public function testLookupHits()
180180
$screen = new Screen("home");
181181
$screen->setConfig($config)->setVisitorId($visitorId)->setKey("$visitorId:key4");
182182

183-
$segment = new Segment(["key" => "value"]);
183+
$segment = new Segment(["key" => "value"], $config);
184184
$segment->setConfig($config)->setVisitorId($visitorId)->setKey("$visitorId:key5");
185185

186186
$activate = new Activate("varGrid", "varId");

tests/Hit/SegmentTest.php

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,34 +15,54 @@ public function testConstructor()
1515
$visitorId = "visitorId";
1616

1717
$context = [
18-
"key1" => "value1",
19-
"key2" => 1,
20-
"key3" => true,
21-
];
18+
"key1" => "value1",
19+
"key2" => 1,
20+
"key3" => true,
21+
"key4" => null,
22+
"key5" => false,
23+
];
2224

2325
$config = new DecisionApiConfig($envId);
2426

25-
$segment = new Segment($context);
27+
28+
29+
$segment = new Segment($context, $config);
2630
$segment->setConfig($config)->setVisitorId($visitorId);
2731

2832
$segment->setSl(["key"]);
2933

3034
$this->assertSame($context, $segment->getSl());
3135

3236
$segmentArray = [
33-
FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId,
34-
FlagshipConstant::DS_API_ITEM => FlagshipConstant::SDK_APP,
35-
FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $envId,
36-
FlagshipConstant::T_API_ITEM => HitType::SEGMENT->value,
37-
FlagshipConstant::CUSTOMER_UID => null,
38-
FlagshipConstant::QT_API_ITEM => 0.0,
39-
FlagshipConstant::SL_API_ITEM => $context,
40-
];
37+
FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId,
38+
FlagshipConstant::DS_API_ITEM => FlagshipConstant::SDK_APP,
39+
FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $envId,
40+
FlagshipConstant::T_API_ITEM => HitType::SEGMENT->value,
41+
FlagshipConstant::CUSTOMER_UID => null,
42+
FlagshipConstant::QT_API_ITEM => 0.0,
43+
FlagshipConstant::SL_API_ITEM => [
44+
"key1" => "value1",
45+
"key2" => "1",
46+
"key3" => "true",
47+
"key4" => "null",
48+
"key5" => "false",
49+
]
50+
];
4151

4252
$this->assertSame($segmentArray, $segment->toApiKeys());
4353

4454
$this->assertTrue($segment->isReady());
4555

4656
$this->assertSame(Segment::ERROR_MESSAGE, $segment->getErrorMessage());
57+
58+
$segment1 = new Segment([], $config);
59+
60+
$segment1->setConfig($config)->setVisitorId($visitorId);
61+
62+
$segmentArray[FlagshipConstant::SL_API_ITEM] = [];
63+
64+
$this->assertSame($segmentArray, $segment1->toApiKeys());
65+
66+
$this->assertFalse($segment1->isReady());
4767
}
4868
}

0 commit comments

Comments
 (0)