Completed
Pull Request — master (#12)
by Frederik
12:11
created

ArrayObjectQueue::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
crap 1
1
<?php
2
declare(strict_types=1);
3
4
namespace Genkgo\Mail\Queue;
5
6
use Genkgo\Mail\Exception\EmptyQueueException;
7
use Genkgo\Mail\GenericMessage;
8
use Genkgo\Mail\MessageInterface;
9
10
/**
11
 * Class ArrayObjectQueue
12
 * @package Genkgo\Mail\Queue
13
 */
14
final class ArrayObjectQueue implements QueueInterface, \Countable
15
{
16
    /**
17
     * @var \ArrayObject
18
     */
19
    private $storage;
20
21
    /**
22
     * ArrayObjectQueue constructor.
23
     * @param \ArrayObject $storage
24
     */
25 5
    public function __construct(\ArrayObject $storage)
26
    {
27 5
        $this->storage = $storage;
28 5
    }
29
30
    /**
31
     * @param MessageInterface $message
32
     */
33 5
    public function store(MessageInterface $message): void
34
    {
35 5
        $this->storage->append((string)$message);
36 5
    }
37
38
    /**
39
     * @return MessageInterface
40
     * @throws EmptyQueueException
41
     */
42 4
    public function fetch(): MessageInterface
43
    {
44 4
        foreach ($this->storage as $key => $item) {
45 4
            unset($this->storage[$key]);
46 4
            return GenericMessage::fromString($item);
47
        }
48
49 2
        throw new EmptyQueueException('No message left in queue');
50
    }
51
52
    /**
53
     * @return int
54
     */
55
    public function count(): int
56
    {
57
        return $this->storage->count();
58
    }
59
}