Completed
Push — master ( 2700ef...362ace )
by Pavel
03:09
created

RelatedItemAction::handle()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 15
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 3

Importance

Changes 0
Metric Value
cc 3
eloc 8
nc 3
nop 1
dl 0
loc 15
ccs 9
cts 9
cp 1
crap 3
rs 9.4285
c 0
b 0
f 0
1
<?php namespace Pz\Doctrine\Rest\Action;
2
3
use League\Fractal\Resource\Item;
4
use League\Fractal\Resource\NullResource;
5
use League\Fractal\TransformerAbstract;
6
use Pz\Doctrine\Rest\Contracts\JsonApiResource;
7
use Pz\Doctrine\Rest\Contracts\RestRequestContract;
8
use Pz\Doctrine\Rest\RestResponse;
9
use Pz\Doctrine\Rest\RestRepository;
10
11
class RelatedItemAction extends ItemAction
12
{
13
	/**
14
	* Field that contains the related resourse key
15
	*
16
	* @var string
17
	*/
18
	protected $relatedField;
19
20
    /**
21
     * RelatedCollectionAction constructor.
22
     *
23
     * @param string              $relatedField Relation property on related entity
24
     * @param RestRepository      $repository
25
     * @param TransformerAbstract $transformer
26
     */
27 1
	public function __construct($relatedField, RestRepository $repository, $transformer)
28
	{
29 1
		parent::__construct($repository, $transformer);
30 1
		$this->relatedField = $relatedField;
31 1
	}
32
33
    /**
34
	* @param RestRequestContract $request
35
	*
36
	* @return RestResponse
37
	*/
38 1
	public function handle($request)
39
	{
40 1
		$entity = $this->repository()->findByIdentifier($request);
41
42 1
        $this->authorize($request, $entity);
43
44 1
		$method = 'get' . ucfirst($this->relatedField);
45
46 1
		if ($relatedEntity = $entity->{$method}()) {
47 1
            $resourceKey = ($relatedEntity instanceof JsonApiResource) ? $relatedEntity->getResourceKey() : null;
48 1
            $resource = new Item($relatedEntity, $this->transformer(), $resourceKey);
49 1
            return $this->response()->resource($request, $resource);
50
        }
51
52 1
        return $this->response()->resource($request, new NullResource());
53
	}
54
}
55