Completed
Push — master ( c6e9df...799c95 )
by Timo
02:37
created

Cachable   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Test Coverage

Coverage 92.86%

Importance

Changes 0
Metric Value
dl 0
loc 51
ccs 13
cts 14
cp 0.9286
rs 10
c 0
b 0
f 0
wmc 5

4 Methods

Rating   Name   Duplication   Size   Complexity  
A _saveResponse() 0 8 2
A _getResponse() 0 3 1
A request() 0 7 1
A __construct() 0 3 1
1
<?php
2
3
namespace hamburgscleanest\GuzzleAdvancedThrottle\Cache\Strategies;
4
5
use GuzzleHttp\Promise\PromiseInterface;
6
use hamburgscleanest\GuzzleAdvancedThrottle\Cache\Interfaces\CacheStrategy;
7
use hamburgscleanest\GuzzleAdvancedThrottle\Cache\Interfaces\StorageInterface;
8
use Psr\Http\Message\RequestInterface;
9
use Psr\Http\Message\ResponseInterface;
10
11
/**
12
 * Class Cache
13
 * @package hamburgscleanest\GuzzleAdvancedThrottle\Cache\Strategies
14
 */
15
class Cachable implements CacheStrategy
16
{
17
18
    /** @var StorageInterface */
19
    private $_storage;
20
21
    /**
22
     * Cachable constructor.
23
     * @param null|StorageInterface $storage
24
     */
25 4
    public function __construct(StorageInterface $storage = null)
26
    {
27 4
        $this->_storage = $storage;
28 4
    }
29
30
    /**
31
     * @param RequestInterface $request
32
     * @param callable $handler
33
     * @return PromiseInterface
34
     */
35
    public function request(RequestInterface $request, callable $handler) : PromiseInterface
36
    {
37 2
        return $handler()->then(function(ResponseInterface $response) use ($request)
38
        {
39 2
            $this->_saveResponse($request, $response);
40
41 2
            return $response;
42 2
        });
43
    }
44
45
    /**
46
     * @param RequestInterface $request
47
     * @param ResponseInterface $response
48
     */
49 2
    protected function _saveResponse(RequestInterface $request, ResponseInterface $response) : void
50
    {
51 2
        if ($response->getStatusCode() !== 200)
52
        {
53
            return;
54
        }
55
56 2
        $this->_storage->saveResponse($request, $response);
57 2
    }
58
59
    /**
60
     * @param RequestInterface $request
61
     * @return null|ResponseInterface
62
     */
63 3
    protected function _getResponse(RequestInterface $request) : ? ResponseInterface
64
    {
65 3
        return $this->_storage->getResponse($request);
66
    }
67
}