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

History   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 62
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 0
Metric Value
wmc 8
lcom 1
cbo 1
dl 0
loc 62
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A start() 0 4 1
A addSuccess() 0 9 1
A addFailure() 0 15 2
A getLastResponse() 0 13 2
A getIterator() 0 4 1
A reset() 0 4 1
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