Stream::__construct()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 8
rs 9.4285
cc 2
eloc 4
nc 2
nop 1
1
<?php
2
3
namespace WZRD\Messaging;
4
5
use ArrayIterator;
6
use WZRD\Contracts\Messaging\Message as MessageContract;
7
use WZRD\Contracts\Messaging\Stream as StreamContract;
8
9
class Stream implements StreamContract
10
{
11
    /**
12
     * Messages.
13
     *
14
     * @var WZRD\Messaging\Message[]
15
     */
16
    protected $messages;
17
18
    /**
19
     * Initialize messages stream.
20
     *
21
     * @param WZRD\Messaging\Message[] $messages
22
     */
23
    public function __construct(array $messages)
24
    {
25
        $this->messages = [];
26
27
        foreach ($messages as $message) {
28
            $this->push($message);
29
        }
30
    }
31
32
    /**
33
     * Iterator.
34
     *
35
     * @return ArrayIterator
36
     */
37
    public function getIterator()
38
    {
39
        return new ArrayIterator($this->messages);
40
    }
41
42
    /**
43
     * Push message into the stream.
44
     *
45
     * @param WZRD\Contracts\Messaging\Message $message
46
     *
47
     * @return self
48
     */
49
    public function push(MessageContract $message)
50
    {
51
        $this->messages[] = $message;
52
53
        return $this;
54
    }
55
56
    /**
57
     * Shift a message off the beginning of the stream.
58
     *
59
     * @return WZRD\Contracts\Messaging\Message
60
     */
61
    public function shift()
62
    {
63
        return array_shift($this->messages);
64
    }
65
66
    /**
67
     * Flush stream.
68
     *
69
     * @return self
70
     */
71
    public function flush()
72
    {
73
        $this->messages = [];
74
75
        return $this;
76
    }
77
}
78