Issues (59)

src/Builder/QueueBuilder.php (1 issue)

1
<?php
2
3
namespace Da\Mailer\Builder;
4
5
use Da\Mailer\Enum\MessageBrokerEnum;
6
use Da\Mailer\Exception\UndefinedMessageBrokerException;
7
use Da\Mailer\Queue\Backend\Beanstalkd\BeanstalkdQueueStoreAdapter;
8
use Da\Mailer\Queue\Backend\Beanstalkd\BeanstalkdQueueStoreConnection;
9
use Da\Mailer\Queue\Backend\Pdo\PdoQueueStoreAdapter;
10
use Da\Mailer\Queue\Backend\Pdo\PdoQueueStoreConnection;
11
use Da\Mailer\Queue\Backend\QueueStoreAdapterInterface;
12
use Da\Mailer\Queue\Backend\RabbitMq\RabbitMqQueueConnection;
13
use Da\Mailer\Queue\Backend\RabbitMq\RabbitMqQueueStoreAdapter;
14
use Da\Mailer\Queue\Backend\Redis\RedisQueueStoreAdapter;
15
use Da\Mailer\Queue\Backend\Redis\RedisQueueStoreConnection;
16
use Da\Mailer\Queue\Backend\Sqs\SqsQueueStoreAdapter;
17
use Da\Mailer\Queue\Backend\Sqs\SqsQueueStoreConnection;
18
use Da\Mailer\Queue\MailQueue;
19
20
class QueueBuilder extends Buildable
21
{
22
    /**
23
     * @param string|null $broker
24
     * @return MailQueue
25
     * @throws UndefinedMessageBrokerException
26
     */
27
    public static function make($broker = null): MailQueue
28
    {
29
        $config = self::getConfig();
30
31
        $messageBroker = $broker ?? $config['config']['message_broker'];
32
33
        $queueAdapter = self::getBrokerAdapter($messageBroker);
34
35
        return new MailQueue($queueAdapter);
0 ignored issues
show
Bug Best Practice introduced by
The expression return new Da\Mailer\Que...ailQueue($queueAdapter) returns the type Da\Mailer\Queue\MailQueue which is incompatible with the return type mandated by Da\Mailer\Builder\Buildable::make() of void.

In the issue above, the returned value is violating the contract defined by the mentioned interface.

Let's take a look at an example:

interface HasName {
    /** @return string */
    public function getName();
}

class Name {
    public $name;
}

class User implements HasName {
    /** @return string|Name */
    public function getName() {
        return new Name('foo'); // This is a violation of the ``HasName`` interface
                                // which only allows a string value to be returned.
    }
}
Loading history...
36
    }
37
38
    /**
39
     * @var string $broker
40
     * @return QueueStoreAdapterInterface
41
     * @throws UndefinedMessageBrokerException
42
     */
43
    protected static function getBrokerAdapter($messageBroker)
44
    {
45
        $config = self::getConfig();
46
        $connectionValues = $config['brokers'][$messageBroker] ?? [];
47
48
        switch ($messageBroker) {
49
            case MessageBrokerEnum::BROKER_REDIS:
50
                return new RedisQueueStoreAdapter(
51
                    new RedisQueueStoreConnection($connectionValues)
52
                );
53
            case MessageBrokerEnum::BROKER_BEANSTALKD:
54
                return new BeanstalkdQueueStoreAdapter(
55
                    new BeanstalkdQueueStoreConnection($connectionValues)
56
                );
57
            case MessageBrokerEnum::BROKER_PDO:
58
                return new PdoQueueStoreAdapter(
59
                    new PdoQueueStoreConnection($connectionValues)
60
                );
61
            case MessageBrokerEnum::BROKER_SQS:
62
                return new SqsQueueStoreAdapter(
63
                    new SqsQueueStoreConnection($connectionValues)
64
                );
65
            case MessageBrokerEnum::BROKER_RABBITMQ:
66
                return new RabbitMqQueueStoreAdapter(
67
                    new RabbitMqQueueConnection($connectionValues)
68
                );
69
            default:
70
                throw new UndefinedMessageBrokerException();
71
        }
72
    }
73
}
74