Completed
Push — master ( 80558b...c6e9df )
by Timo
02:28
created

Cachable::_saveResponse()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 3
nc 2
nop 2
dl 0
loc 8
ccs 4
cts 4
cp 1
crap 2
rs 9.4285
c 0
b 0
f 0
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 3
        return $handler()->then(function(ResponseInterface $response) use ($request)
38
        {
39 3
            $this->_saveResponse($request, $response);
40
41 3
            return $response;
42 3
        });
43
    }
44
45
    /**
46
     * @param RequestInterface $request
47
     * @param ResponseInterface $response
48
     */
49 3
    protected function _saveResponse(RequestInterface $request, ResponseInterface $response) : void
50
    {
51 3
        if ($response->getStatusCode() !== 200)
52
        {
53 1
            return;
54
        }
55
56 2
        $this->_storage->saveResponse($request, $response);
57 2
    }
58
59
    /**
60
     * @param RequestInterface $request
61
     * @return null|ResponseInterface
62
     */
63 4
    protected function _getResponse(RequestInterface $request) : ? ResponseInterface
64
    {
65 4
        return $this->_storage->getResponse($request);
66
    }
67
}