From 7a6f603c8859499e4e81847bac3ef0985fa61feb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nil=20Portugu=C3=A9s=20Calder=C3=B3?= Date: Tue, 20 Oct 2015 22:12:44 +0200 Subject: [PATCH] Clean up JsonApiSerializer --- .../JsonApiResponseTrait.php | 5 +-- .../JsonApiSerializer/JsonApiSerializer.php | 30 ++++++++-------- ...ravel5JsonApiSerializerServiceProvider.php | 34 +++++++++---------- .../Mapper/MappingFactory.php | 10 +++--- 4 files changed, 41 insertions(+), 38 deletions(-) diff --git a/src/NilPortugues/Laravel5/JsonApiSerializer/JsonApiResponseTrait.php b/src/NilPortugues/Laravel5/JsonApiSerializer/JsonApiResponseTrait.php index 9093576..d99e85f 100644 --- a/src/NilPortugues/Laravel5/JsonApiSerializer/JsonApiResponseTrait.php +++ b/src/NilPortugues/Laravel5/JsonApiSerializer/JsonApiResponseTrait.php @@ -15,7 +15,7 @@ trait JsonApiResponseTrait { /** - * @param \Psr\Http\Message\ResponseInterface $response + * @param \Psr\Http\Message\ResponseInterface $response * @return \Psr\Http\Message\ResponseInterface */ protected function addHeaders(\Psr\Http\Message\ResponseInterface $response) @@ -28,7 +28,8 @@ protected function addHeaders(\Psr\Http\Message\ResponseInterface $response) * * @return \Symfony\Component\HttpFoundation\Response */ - private function errorResponse($json) { + private function errorResponse($json) + { return (new HttpFoundationFactory()) ->createResponse($this->addHeaders(new \NilPortugues\Api\JsonApi\Http\Message\ErrorResponse($json))); } diff --git a/src/NilPortugues/Laravel5/JsonApiSerializer/JsonApiSerializer.php b/src/NilPortugues/Laravel5/JsonApiSerializer/JsonApiSerializer.php index 8689852..5b45948 100644 --- a/src/NilPortugues/Laravel5/JsonApiSerializer/JsonApiSerializer.php +++ b/src/NilPortugues/Laravel5/JsonApiSerializer/JsonApiSerializer.php @@ -50,14 +50,17 @@ protected function serializeObject($value) if (is_subclass_of($value, Model::class, true)) { - - $stdClass = (object) $value->getAttributes(); - $data = $this->serializeData($stdClass); + $stdClass = (object) $value->getAttributes(); + $data = $this->serializeData($stdClass); $data[self::CLASS_IDENTIFIER_KEY] = get_class($value); - $methods = $this->getRelationshipMethodsAsPropertyName($value, get_class($value), new ReflectionClass($value)); + $methods = $this->getRelationshipMethodsAsPropertyName( + $value, + get_class($value), + new ReflectionClass($value) + ); - if(!empty($methods)) { + if (!empty($methods)) { $data = array_merge($data, $methods); } @@ -67,7 +70,6 @@ protected function serializeObject($value) return parent::serializeObject($value); } - /** * @param $value * @param string $className @@ -82,7 +84,7 @@ protected function getRelationshipMethodsAsPropertyName($value, $className, Refl foreach ($reflection->getMethods(ReflectionMethod::IS_PUBLIC) as $method) { if (ltrim($method->class, "\\") === ltrim($className, "\\")) { - $name = $method->name; + $name = $method->name; $reflectionMethod = $reflection->getMethod($name); // Eloquent relations do not include parameters, so we'll be filtering based on this criteria. @@ -97,28 +99,28 @@ protected function getRelationshipMethodsAsPropertyName($value, $className, Refl if (false !== strpos(get_class($returned), 'Illuminate\Database\Eloquent\Relations')) { $items = []; - foreach($returned->getResults() as $model) { + foreach ($returned->getResults() as $model) { - if(is_object($model)) { - $stdClass = (object) $model->getAttributes(); - $data = $this->serializeData($stdClass); + if (is_object($model)) { + $stdClass = (object) $model->getAttributes(); + $data = $this->serializeData($stdClass); $data[self::CLASS_IDENTIFIER_KEY] = get_class($model); $items[] = $data; } } - if(!empty($items)) { + if (!empty($items)) { $methods[$name] = [self::MAP_TYPE => 'array', self::SCALAR_VALUE => $items]; } } } - } catch(ErrorException $e) {} + } catch (ErrorException $e) { + } } } } - return $methods; } } diff --git a/src/NilPortugues/Laravel5/JsonApiSerializer/Laravel5JsonApiSerializerServiceProvider.php b/src/NilPortugues/Laravel5/JsonApiSerializer/Laravel5JsonApiSerializerServiceProvider.php index 81135d0..9ea5f55 100644 --- a/src/NilPortugues/Laravel5/JsonApiSerializer/Laravel5JsonApiSerializerServiceProvider.php +++ b/src/NilPortugues/Laravel5/JsonApiSerializer/Laravel5JsonApiSerializerServiceProvider.php @@ -31,7 +31,7 @@ class Laravel5JsonApiSerializerServiceProvider extends ServiceProvider */ public function boot() { - $this->publishes([__DIR__.self::PATH => config('jsonapi.php')]); + $this->publishes([__DIR__ . self::PATH => config('jsonapi.php')]); } /** @@ -39,24 +39,24 @@ public function boot() */ public function register() { - $this->mergeConfigFrom(__DIR__.self::PATH, 'jsonapi'); - $this->app->singleton(\NilPortugues\Laravel5\JsonApiSerializer\JsonApiSerializer::class, function ($app) { + $this->mergeConfigFrom(__DIR__ . self::PATH, 'jsonapi'); + $this->app->singleton( + \NilPortugues\Laravel5\JsonApiSerializer\JsonApiSerializer::class, + function ($app) { $mapping = $app['config']->get('jsonapi'); - $key = md5(json_encode($mapping)); + $key = md5(json_encode($mapping)); - $cachedMapping = Cache::get($key); - if (!empty($cachedMapping)) { - return unserialize($cachedMapping); - } - - self::parseNamedRoutes($mapping); + return Cache::rememberForever( + $key, + function () use ($mapping) { + self::parseNamedRoutes($mapping); - $serializer = new JsonApiSerializer(new JsonApiTransformer(new Mapper($mapping))); - Cache::put($key, serialize($serializer),60*60*24); - - return $serializer; - }); + return new JsonApiSerializer(new JsonApiTransformer(new Mapper($mapping))); + } + ); + } + ); } /** @@ -75,7 +75,7 @@ private static function parseNamedRoutes(array &$mapping) /** * @param array $map */ - private static function parseUrls(array &$map) + private static function parseUrls(&$map) { if (!empty($map['urls'])) { foreach ($map['urls'] as &$namedUrl) { @@ -87,7 +87,7 @@ private static function parseUrls(array &$map) /** * @param array $map */ - private static function parseRelationshipUrls(array &$map) + private static function parseRelationshipUrls(&$map) { if (!empty($map['relationships'])) { foreach ($map['relationships'] as &$relationship) { diff --git a/src/NilPortugues/Laravel5/JsonApiSerializer/Mapper/MappingFactory.php b/src/NilPortugues/Laravel5/JsonApiSerializer/Mapper/MappingFactory.php index 5d9ed6f..2e0b7f6 100644 --- a/src/NilPortugues/Laravel5/JsonApiSerializer/Mapper/MappingFactory.php +++ b/src/NilPortugues/Laravel5/JsonApiSerializer/Mapper/MappingFactory.php @@ -36,10 +36,10 @@ protected static function getClassProperties($className) { if (class_exists($className, true)) { $reflection = new ReflectionClass($className); - $value = $reflection->newInstanceWithoutConstructor(); + $value = $reflection->newInstanceWithoutConstructor(); if (is_subclass_of($value, Model::class, true)) { - $attributes = array_merge( + $attributes = array_merge( Schema::getColumnListing($value->getTable()), self::getRelationshipMethodsAsPropertyName($value, $className, $reflection) ); @@ -54,7 +54,6 @@ protected static function getClassProperties($className) return parent::getClassProperties($className); } - /** * @param $value * @param string $className @@ -69,7 +68,7 @@ protected static function getRelationshipMethodsAsPropertyName($value, $classNam if (ltrim($method->class, "\\") === ltrim($className, "\\")) { - $name = $method->name; + $name = $method->name; $reflectionMethod = $reflection->getMethod($name); // Eloquent relations do not include parameters, so we'll be filtering based on this criteria. @@ -86,7 +85,8 @@ protected static function getRelationshipMethodsAsPropertyName($value, $classNam } } - } catch(ErrorException $e) {} + } catch (ErrorException $e) { + } } } }