Cached   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 54
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 14
c 1
b 0
f 0
dl 0
loc 54
ccs 0
cts 25
cp 0
rs 10
wmc 8

4 Methods

Rating   Name   Duplication   Size   Complexity  
A handleResponse() 0 10 4
A keyCache() 0 3 2
A assets() 0 7 1
A entries() 0 7 1
1
<?php
2
3
namespace Distilleries\Contentful\Api\Delivery;
4
5
use Illuminate\Support\Facades\Cache;
6
use Psr\Http\Message\ResponseInterface;
7
use Distilleries\Contentful\Api\DeliveryApi;
8
9
class Cached extends Live implements DeliveryApi
10
{
11
    /**
12
     * {@inheritdoc}
13
     */
14
    public function entries(array $parameters = []): array
15
    {
16
        $keyCache = $this->keyCache($parameters);
17
18
        $response = $this->query('entries', $parameters);
19
20
        return $this->handleResponse($response, $keyCache);
21
    }
22
23
    /**
24
     * {@inheritdoc}
25
     */
26
    public function assets(array $parameters = []): array
27
    {
28
        $keyCache = $this->keyCache($parameters);
29
30
        $response = $this->query('assets', $parameters);
31
32
        return $this->handleResponse($response, $keyCache);
33
    }
34
35
    /**
36
     * Return key cache for given parameters.
37
     *
38
     * @param  array  $parameters
39
     * @return string
40
     */
41
    private function keyCache(array $parameters): string
42
    {
43
        return 'delivery_api_' . (config('contentful.use_preview') ? 'preview_' : '') . md5(json_encode($parameters));
44
    }
45
46
    /**
47
     * Use cached response if status code is not in 2xx OR fetch new one and store it in cache.
48
     *
49
     * @param  \Psr\Http\Message\ResponseInterface  $response
50
     * @param  string  $keyCache
51
     * @return array
52
     */
53
    private function handleResponse(ResponseInterface $response, string $keyCache): array
54
    {
55
        if (($response->getStatusCode() >= 300) || ($response->getStatusCode() <= 100)) {
56
            $data = Cache::get($keyCache);
57
        } else {
58
            $data = $this->decodeResponse($response);
59
            Cache::forever($keyCache, $data);
60
        }
61
62
        return ! empty($data) ? $data : [];
63
    }
64
}
65