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

ArrayObjectQueue   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 46
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 2
dl 0
loc 46
ccs 11
cts 11
cp 1
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A store() 0 4 1
A fetch() 0 9 2
A count() 0 4 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
}