Skip to content

Commit

Permalink
[#97] create symfony bundle with inmemory toggle support
Browse files Browse the repository at this point in the history
  • Loading branch information
pheaturebot committed Apr 25, 2021
1 parent 935630a commit 463cb5d
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 12 deletions.
15 changes: 11 additions & 4 deletions src/Read/ChainSegmentFactory.php
Expand Up @@ -6,7 +6,7 @@

use Pheature\Core\Toggle\Exception\InvalidSegmentTypeGiven;

final class ChainSegmentFactory
final class ChainSegmentFactory implements SegmentFactory
{
/** @var SegmentFactory[] */
private array $segmentFactories;
Expand All @@ -19,17 +19,24 @@ public function __construct(SegmentFactory ...$segmentFactories)
/**
* @param string $segmentId
* @param string $segmentType
* @param array<string, mixed> $payload
* @param array<string, mixed> $criteria
* @return Segment
*/
public function create(string $segmentId, string $segmentType, array $payload): Segment
public function create(string $segmentId, string $segmentType, array $criteria): Segment
{
foreach ($this->segmentFactories as $segmentFactory) {
if (in_array($segmentType, $segmentFactory->types(), true)) {
return $segmentFactory->create($segmentId, $segmentType, $payload);
return $segmentFactory->create($segmentId, $segmentType, $criteria);
}
}

throw InvalidSegmentTypeGiven::withType($segmentType);
}

public function types(): array
{
return array_merge(
...array_map(static fn(SegmentFactory $segmentFactory) => $segmentFactory->types(), $this->segmentFactories)
);
}
}
8 changes: 4 additions & 4 deletions src/Read/ChainToggleStrategyFactory.php
Expand Up @@ -19,7 +19,7 @@ public function __construct(SegmentFactory $segmentFactory, ToggleStrategyFactor
}

/**
* @param array<string, string|array<string, string|array<string, mixed>>> $strategy
* @param array<string, mixed> $strategy
* @return ToggleStrategy
*/
public function createFromArray(array $strategy): ToggleStrategy
Expand Down Expand Up @@ -61,10 +61,10 @@ private function makeStrategy(
$segmentId = $segment['segment_id'];
/** @var string $segmentType */
$segmentType = $segment['segment_type'];
/** @var array<string, mixed> $payload */
$payload = $segment['payload'];
/** @var array<string, mixed> $criteria */
$criteria = $segment['criteria'];

return $this->segmentFactory->create($segmentId, $segmentType, $payload);
return $this->segmentFactory->create($segmentId, $segmentType, $criteria);
}, $segments))
);
}
Expand Down
4 changes: 2 additions & 2 deletions src/Read/SegmentFactory.php
Expand Up @@ -9,8 +9,8 @@ interface SegmentFactory extends WithProcessableFixedTypes
/**
* @param string $segmentId
* @param string $segmentType
* @param array<string, mixed> $payload
* @param array<string, mixed> $criteria
* @return Segment
*/
public function create(string $segmentId, string $segmentType, array $payload): Segment;
public function create(string $segmentId, string $segmentType, array $criteria): Segment;
}
4 changes: 2 additions & 2 deletions test/Read/ChainToggleStrategyFactoryTest.php
Expand Up @@ -20,7 +20,7 @@ final class ChainToggleStrategyFactoryTest extends TestCase
[
'segment_id' => 'some_segment_id',
'segment_type' => 'some_segment_type',
'payload' => [
'criteria' => [
'some' => 'data'
],
],
Expand Down Expand Up @@ -71,7 +71,7 @@ public function testItShouldBeCreatedWithAtLeastOneToggleStrategyFactoryInstance
$segmentFactory = $this->createMock(SegmentFactory::class);
$segmentFactory->expects(self::once())
->method('create')
->with(self::SEGMENTS[0]['segment_id'], self::SEGMENTS[0]['segment_type'],self::SEGMENTS[0]['payload'])
->with(self::SEGMENTS[0]['segment_id'], self::SEGMENTS[0]['segment_type'],self::SEGMENTS[0]['criteria'])
->willReturn($this->createMock(Segment::class));
$toggleStrategyFactory = $this->createMock(ToggleStrategyFactory::class);
$toggleStrategyFactory->expects(self::once())
Expand Down

0 comments on commit 463cb5d

Please sign in to comment.