RestResponseFactory::resource()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 13
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 4
c 1
b 0
f 0
nc 2
nop 5
dl 0
loc 13
ccs 5
cts 5
cp 1
crap 2
rs 10
1
<?php namespace Pz\Doctrine\Rest;
2
3
use League\Fractal\Resource\ResourceInterface;
4
use Pz\Doctrine\Rest\Contracts\RestRequestContract;
5
use Pz\Doctrine\Rest\Fractal\JsonApiSerializer;
6
use Pz\Doctrine\Rest\Fractal\Manager;
7
use Pz\Doctrine\Rest\Fractal\ScopeFactory;
8
use Symfony\Component\HttpFoundation\JsonResponse;
9
10
class RestResponseFactory
11
{
12
    /**
13
     * @param RestRequestContract    $request
14
     * @param ResourceInterface|null $resource
15
     * @param int                    $httStatus
16
     * @param array                  $headers
17
     * @param int                    $jsonOptions
18
     *
19
     * @return RestResponse
20
     */
21 19
    static public function resource(
22
        RestRequestContract $request,
23
        ResourceInterface   $resource = null,
24
        int                 $httStatus = RestResponse::HTTP_OK,
25
        array               $headers = [],
26
        int                 $jsonOptions = JsonResponse::DEFAULT_ENCODING_OPTIONS
27
    ) {
28 19
        $data = $resource ? static::fractal($request)->createData($resource)->toArray() : null;
29
30 19
        $response = RestResponse::create($data, $httStatus, $headers);
31 19
        $response->setEncodingOptions($jsonOptions);
32
33 19
        return $response;
34
    }
35
36
    /**
37
     * @return RestResponse
38
     */
39 4
    static public function noContent()
40
    {
41 4
        return RestResponse::noContent();
42
    }
43
44
    /**
45
     * Return configured fractal by request format.
46
     *
47
     * @param RestRequestContract $request
48
     *
49
     * @return Manager
50
     */
51 19
    static protected function fractal(RestRequestContract $request)
52
    {
53 19
        $fractal = new Manager(new ScopeFactory(), $request);
54 19
        $fractal->setSerializer(new JsonApiSerializer($request));
55
56 19
        if ($includes = $request->getInclude()) {
57 19
            $fractal->parseIncludes($includes);
58
        }
59
60 19
        if ($excludes = $request->getExclude()) {
61 1
            $fractal->parseExcludes($excludes);
62
        }
63
64 19
        if ($fields = $request->getFields()) {
65 5
            $fractal->parseFieldsets($fields);
66
        }
67
68 19
        return $fractal;
69
    }
70
}
71