Cached::assets()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 3
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 7
ccs 0
cts 5
cp 0
crap 2
rs 10
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