Completed
Push — master ( 769748...7b8fb0 )
by Baptiste
12s
created

HttpHistory::addSuccess()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

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