@@ -28,14 +28,11 @@ final class Document implements \JsonSerializable
2828 private $ data ;
2929 private $ errors ;
3030 private $ meta ;
31- private $ jsonapi ;
31+ private $ json_api ;
3232 private $ links ;
3333 private $ included ;
34- private $ sparse = false ;
34+ private $ is_sparse = false ;
3535
36- /**
37- * Use named constructors instead
38- */
3936 private function __construct ()
4037 {
4138 }
@@ -68,42 +65,35 @@ public static function fromResources(IdentifiableResource ...$data): self
6865 return $ doc ;
6966 }
7067
71- public function setApiVersion (string $ version = self ::DEFAULT_API_VERSION ): void
68+ public function setApiVersion (string $ version = self ::DEFAULT_API_VERSION )
7269 {
73- $ this ->jsonapi ['version ' ] = $ version ;
70+ $ this ->json_api ['version ' ] = $ version ;
7471 }
7572
76- public function setApiMeta (array $ meta ): void
73+ public function setApiMeta (array $ meta )
7774 {
78- $ this ->jsonapi ['meta ' ] = $ meta ;
75+ $ this ->json_api ['meta ' ] = $ meta ;
7976 }
8077
8178 public function setIncluded (IdentifiableResource ...$ included )
8279 {
8380 $ this ->included = $ included ;
8481 }
8582
86- public function setSparse ()
83+ public function setIsSparse ()
8784 {
88- $ this ->sparse = true ;
85+ $ this ->is_sparse = true ;
8986 }
9087
9188 public function jsonSerialize ()
9289 {
93- if ($ this ->included && !$ this ->sparse ) {
94- foreach ($ this ->included as $ resource ) {
95- if ($ this ->hasLinkTo ($ resource )) {
96- continue ;
97- }
98- throw new \LogicException ("Full linkage is required for $ resource " );
99- }
100- }
90+ $ this ->enforceFullLinkage ();
10191 return array_filter (
10292 [
10393 'data ' => $ this ->data ,
10494 'errors ' => $ this ->errors ,
10595 'meta ' => $ this ->meta ,
106- 'jsonapi ' => $ this ->jsonapi ,
96+ 'jsonapi ' => $ this ->json_api ,
10797 'links ' => $ this ->links ,
10898 'included ' => $ this ->included ,
10999 ],
@@ -113,12 +103,20 @@ function ($v) {
113103 );
114104 }
115105
116- private function hasLinkTo ( IdentifiableResource $ resource ): bool
106+ private function enforceFullLinkage ()
117107 {
118- if (! $ this ->data ) {
119- return false ;
108+ if ($ this ->is_sparse || empty ( $ this -> included ) ) {
109+ return ;
120110 }
111+ foreach ($ this ->included as $ resource ) {
112+ if (!$ this ->hasLinkTo ($ resource )) {
113+ throw new \LogicException ("Full linkage is required for $ resource " );
114+ }
115+ }
116+ }
121117
118+ private function hasLinkTo (IdentifiableResource $ resource ): bool
119+ {
122120 foreach ($ this ->toDataItems () as $ my_resource ) {
123121 if ($ my_resource instanceof ResourceObject) {
124122 if ($ my_resource ->hasRelationTo ($ resource )) {
0 commit comments