for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace MGDigital\BusQue\QueueResolver;
use MGDigital\BusQue\Exception\QueueResolverException;
use MGDigital\BusQue\QueueResolverInterface;
class QueueVoterResolver implements QueueResolverInterface
{
/**
* @var QueueVoterInterface[]
*/
private $voters = [];
public function __construct(array $voters)
array_walk($voters, function (QueueVoterInterface $voter) {
$this->voters[] = $voter;
});
}
public function resolveQueueName($command): string
$votes = $this->getVotes($command);
if ($votes === []) {
throw new QueueResolverException;
return $votes[0]->getQueueName();
* @param mixed $command
* @return QueueVote[]
public function getVotes($command): array
$votes = [];
foreach ($this->voters as $voter) {
$vote = $voter->getVote($command);
if ($vote instanceof QueueVote) {
$votes[] = $vote;
usort($votes, function (QueueVote $voteA, QueueVote $voteB) {
return $voteB->getConfidence() <=> $voteA->getConfidence();
return $votes;