QueueProcessor   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 49
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 1
dl 0
loc 49
ccs 15
cts 15
cp 1
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A process() 0 23 5
1
<?php
2
declare(strict_types=1);
3
4
namespace Genkgo\Mail\Queue;
5
6
use Genkgo\Mail\Exception\AbstractProtocolException;
7
use Genkgo\Mail\Exception\EmptyQueueException;
8
use Genkgo\Mail\TransportInterface;
9
10
final class QueueProcessor implements QueueProcessorInterface
11
{
12
    /**
13
     * @var TransportInterface
14
     */
15
    private $transport;
16
17
    /**
18
     * @var iterable|QueueInterface[]
19
     */
20
    private $queue;
21
22
    /**
23
     * @param TransportInterface $transport
24
     * @param QueueInterface[] $queue
25
     */
26 5
    public function __construct(TransportInterface $transport, iterable $queue)
27
    {
28 5
        $this->transport = $transport;
29 5
        $this->queue = $queue;
30 5
    }
31
32
    /**
33
     * {@inheritdoc}
34
     */
35 5
    public function process(): int
36
    {
37 5
        $count = 0;
38 5
        foreach ($this->queue as $queue) {
39
            try {
40 5
                while ($message = $queue->fetch()) {
41
                    try {
42 5
                        $this->transport->send($message);
43 2
                    } catch (AbstractProtocolException $e) {
44 2
                        $queue->store($message);
45
46
                        // do not continue transporting messages
47
                        // apparently our transport is not ready to receive messages yet
48 2
                        return $count;
49
                    }
50 3
                    ++$count;
51
                }
52 3
            } catch (EmptyQueueException $e) {
53
            }
54
        }
55
56 3
        return $count;
57
    }
58
}
59