/
DispatcherTemplate.php
46 lines (33 loc) · 1.14 KB
/
DispatcherTemplate.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
namespace Tienvx\Bundle\MbtBundle\Reducer;
use Symfony\Component\Messenger\MessageBusInterface;
use Tienvx\Bundle\MbtBundle\Message\ReduceStepsMessage;
use Tienvx\Bundle\MbtBundle\Model\BugInterface;
abstract class DispatcherTemplate implements DispatcherInterface
{
protected const MIN_PAIR_LENGTH = 2; // 3 steps
protected MessageBusInterface $messageBus;
public function __construct(MessageBusInterface $messageBus)
{
$this->messageBus = $messageBus;
}
public function dispatch(BugInterface $bug): int
{
$steps = $bug->getSteps();
if (count($steps) < $this->minSteps()) {
return 0;
}
$pairs = $this->getPairs($steps);
foreach ($pairs as $pair) {
$message = new ReduceStepsMessage($bug->getId(), count($steps), $pair[0], $pair[1]);
$this->messageBus->dispatch($message);
}
return count($pairs);
}
abstract protected function getPairs(array $steps): array;
protected function maxPairs(array $steps): int
{
return ceil(sqrt(count($steps)));
}
abstract protected function minSteps(): int;
}