Completed
Push — master ( d5541c...74532d )
by Timo
02:43
created

Cacheable::_getResponse()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

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