DataDocument::addIncludedResourceObject()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 3

Importance

Changes 0
Metric Value
cc 3
eloc 6
c 0
b 0
f 0
nc 3
nop 1
dl 0
loc 11
ccs 6
cts 6
cp 1
crap 3
rs 10
1
<?php
2
3
namespace alsvanzelf\jsonapi;
4
5
use alsvanzelf\jsonapi\Document;
6
use alsvanzelf\jsonapi\exceptions\DuplicateException;
7
use alsvanzelf\jsonapi\helpers\Validator;
8
use alsvanzelf\jsonapi\objects\ResourceObject;
9
10
/**
11
 * @see ResourceDocument or CollectionDocument
12
 */
13
abstract class DataDocument extends Document {
14
	/** @var ResourceObject[] */
15
	protected $includedResources = [];
16
	/** @var Validator */
17
	protected $validator;
18
	
19 60
	public function __construct() {
20 60
		parent::__construct();
21
		
22 60
		$this->validator = new Validator();
23
	}
24
	
25
	/**
26
	 * human api
27
	 */
28
	
29
	/**
30
	 * spec api
31
	 */
32
	
33
	/**
34
	 * mainly used when an `included` query parameter is passed
35
	 * and resources are requested separate from what is standard for a response
36
	 * 
37
	 * @param ResourceObject ...$resourceObjects
38
	 */
39 42
	public function addIncludedResourceObject(ResourceObject ...$resourceObjects) {
40 42
		foreach ($resourceObjects as $resourceObject) {
41
			try {
42 13
				$this->validator->claimUsedResourceIdentifier($resourceObject);
43
			}
44 1
			catch (DuplicateException $e) {
45
				// silently skip duplicates
46 1
				continue;
47
			}
48
			
49 13
			$this->includedResources[] = $resourceObject;
50
		}
51
	}
52
	
53
	/**
54
	 * internal api
55
	 */
56
	
57
	/**
58
	 * DocumentInterface
59
	 */
60
	
61
	/**
62
	 * @inheritDoc
63
	 */
64 50
	public function toArray() {
65 50
		$array = parent::toArray();
66
		
67 50
		$array['data'] = null;
68
		
69 50
		if ($this->includedResources !== []) {
70 13
			$array['included'] = [];
71 13
			foreach ($this->includedResources as $resource) {
72 13
				$array['included'][] = $resource->toArray();
73
			}
74
		}
75
		
76 50
		return $array;
77
	}
78
}
79