QueueProcessor::process()   A
last analyzed

Complexity

Conditions 5
Paths 8

Size

Total Lines 23

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 5

Importance

Changes 0
Metric Value
dl 0
loc 23
ccs 11
cts 11
cp 1
rs 9.2408
c 0
b 0
f 0
cc 5
nc 8
nop 0
crap 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