History::getIterator()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

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