Passed
Pull Request — master (#43)
by Baptiste
02:06
created

History::getIterator()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
1
<?php declare(strict_types=1);
2
namespace Behapi\HttpHistory;
3
4
use Iterator;
5
use ArrayIterator;
6
use IteratorAggregate;
7
8
use Psr\Http\Message\MessageInterface;
9
use Psr\Http\Message\RequestInterface;
10
use Psr\Http\Message\ResponseInterface;
11
12
use Http\Client\Common\Plugin\Journal;
13
14
use Http\Client\Exception;
15
use Http\Client\Exception\HttpException;
16
17
use function end;
18
use function key;
19
use function reset;
20
21
final class History implements Journal, IteratorAggregate
22
{
23
    /** @var MessageInterface[][] Array of array of tuples of RequestInterface and ?ResponseInterface */
24
    private $tuples = [];
25
26
    public function start()
27
    {
28
        $this->tuples[] = [];
29
    }
30
31
    /** {@inheritDoc} */
32
    public function addSuccess(RequestInterface $request, ResponseInterface $response)
33
    {
34
        end($this->tuples);
35
        $key = key($this->tuples);
36
37
        $this->tuples[$key][] = [$request, $response];
38
39
        reset($this->tuples);
40
    }
41
42
    /** {@inheritDoc} */
43
    public function addFailure(RequestInterface $request, Exception $exception)
44
    {
45
        end($this->tuples);
46
        $key = key($this->tuples);
47
48
        $tuple = [$request, null];
49
50
        if ($exception instanceof HttpException) {
51
            $tuple[1] = $exception->getResponse();
52
        }
53
54
        $this->tuples[$key][] = $tuple;
55
56
        reset($this->tuples);
57
    }
58
59
    public function getLastResponse(): ?ResponseInterface
60
    {
61
        if (1 > count($this->tuples)) {
62
            return null;
63
        }
64
65
        $tuple = end($this->tuples);
66
        reset($this->tuples);
67
68
        $tuple = end($tuple);
69
70
        return $tuple[1];
71
    }
72
73
    public function getIterator(): Iterator
74
    {
75
        return new ArrayIterator($this->tuples);
76
    }
77
78
    public function reset(): void
79
    {
80
        $this->tuples = [];
81
    }
82
}
83