Completed
Push — master ( 3d8aa7...80558b )
by Timo
02:25
created

Cachable::__construct()   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
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 1
rs 10
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 2
    public function __construct(StorageInterface $storage = null)
26
    {
27 2
        $this->_storage = $storage;
28 2
    }
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 2
    protected function _getResponse(RequestInterface $request) : ? ResponseInterface
64
    {
65 2
        return $this->_storage->getResponse($request);
66
    }
67
}