@@ -44,6 +44,8 @@ abstract class AbstractObject implements \JsonSerializable
4444
4545 protected $ types = array ();
4646
47+ protected $ returnedData = array ();
48+
4749 public function __construct ()
4850 {
4951 $ enum = static ::getFieldsEnum ();
@@ -73,7 +75,7 @@ public function &__set($key, $value)
7375 }
7476 if (!is_null ($ value ) && !$ this ->isValidValue ($ key , $ value )) {
7577 throw new \InvalidArgumentException (
76- "Invalid type for property ' {$ key }', should be a " .$ this ->types [$ key ]." received " .print_r ($ value ,1 )
78+ "Invalid type for property ' {$ key }', should be a " .$ this ->types [$ key ]." received " .print_r ($ value , 1 )
7779 );
7880 }
7981 $ this ->data [$ key ] = $ value ;
@@ -84,7 +86,6 @@ public function &__set($key, $value)
8486 public function setDataWithoutValidation ($ data )
8587 {
8688 foreach ($ data as $ key => $ value ) {
87-
8889 }
8990 $ this ->clearHistory ();
9091 }
@@ -107,6 +108,7 @@ public function setData($data)
107108 $ type = $ this ->types [$ key ];
108109 $ value = $ this ->castToType ($ value , $ type );
109110 $ this ->{$ key } = $ value ;
111+ $ this ->returnedData [] = $ key ;
110112 }
111113 }
112114
@@ -154,7 +156,8 @@ function ($data) use ($type) {
154156 $ obj = new $ className ();
155157 $ obj ->setData ($ data );
156158 return $ obj ;
157- }, $ value
159+ },
160+ $ value
158161 );
159162 } else {
160163 $ className = '\\Shopify \\Object \\' .$ type ;
@@ -169,20 +172,20 @@ public function isValidValue($key, $value)
169172 {
170173 $ type = $ this ->types [$ key ];
171174 switch ($ type ) {
172- case 'string ' :
173- return is_string ($ value ) || is_integer ($ value ) || is_bool ($ value );
174- case 'integer ' :
175- return is_numeric ($ value );
176- case 'boolean ' :
177- return is_bool ($ value );
178- case 'array ' :
179- return is_array ($ value );
180- case 'object ' :
181- return is_object ($ value );
182- case 'float ' :
183- return is_float ($ value );
184- case 'DateTime ' :
185- return is_a ($ value , \DateTime::class);
175+ case 'string ' :
176+ return is_string ($ value ) || is_integer ($ value ) || is_bool ($ value );
177+ case 'integer ' :
178+ return is_numeric ($ value );
179+ case 'boolean ' :
180+ return is_bool ($ value );
181+ case 'array ' :
182+ return is_array ($ value );
183+ case 'object ' :
184+ return is_object ($ value );
185+ case 'float ' :
186+ return is_float ($ value );
187+ case 'DateTime ' :
188+ return is_a ($ value , \DateTime::class);
186189 }
187190 if (substr ($ type , -2 ) == '[] ' ) {
188191 foreach ($ value as $ obj ) {
@@ -205,7 +208,8 @@ public function exportData()
205208 $ results [$ field ] = array_map (
206209 function ($ obj ) {
207210 return $ obj ->exportData ();
208- }, $ value
211+ },
212+ $ value
209213 );
210214 } elseif (is_a ($ value , AbstractObject::class)) {
211215 $ results [$ field ] = $ value ->exportData ();
@@ -238,7 +242,8 @@ public function cast($type, $value)
238242 $ value = array_map (
239243 function ($ data ) use ($ type ) {
240244 return $ this ->instantiate ($ type , $ data );
241- }, $ value
245+ },
246+ $ value
242247 );
243248 } else {
244249 $ value = $ this ->instantiate ($ type , $ value );
@@ -269,4 +274,16 @@ public function jsonSerialize()
269274 {
270275 return $ this ->data ;
271276 }
277+
278+ public function onlyReturnedData ()
279+ {
280+ $ keys = array_keys ($ this ->data );
281+ foreach ($ keys as $ key ) {
282+ if (!in_array ($ key , $ this ->returnedData )) {
283+ unset($ this ->data [$ key ]);
284+ }
285+ }
286+
287+ return $ this ;
288+ }
272289}
0 commit comments