From 423f211294c4b75d98645c2edaefedee2d6f5f7e Mon Sep 17 00:00:00 2001 From: EK Date: Mon, 29 Jun 2015 23:33:54 +0300 Subject: [PATCH] Closes #40. Intended usage - Inherit `Container` and override `getResourceType` method - Inherit `SchemaFactory` and override `createContainer` method - Inherit `Encoder` and override `getFactories` method where `$schemaFactory` should return the new schema factory instance --- src/Encoder/Encoder.php | 38 ++++++++++++++++++++++++++++---------- src/Schema/Container.php | 12 +++++++++++- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/src/Encoder/Encoder.php b/src/Encoder/Encoder.php index d02a0146..295d6a18 100644 --- a/src/Encoder/Encoder.php +++ b/src/Encoder/Encoder.php @@ -20,6 +20,7 @@ use \Neomerx\JsonApi\Contracts\Document\ErrorInterface; use \Neomerx\JsonApi\Contracts\Encoder\EncoderInterface; use \Neomerx\JsonApi\Contracts\Schema\ContainerInterface; +use \Neomerx\JsonApi\Contracts\Schema\SchemaFactoryInterface; use \Neomerx\JsonApi\Contracts\Schema\SchemaProviderInterface; use \Neomerx\JsonApi\Contracts\Document\DocumentFactoryInterface; use \Neomerx\JsonApi\Contracts\Encoder\Parser\DataAnalyzerInterface; @@ -192,25 +193,42 @@ protected function encodeToJson(array $document) * @return Encoder */ public static function instance(array $schemas, EncoderOptions $encodeOptions = null) + { + /** @var SchemaFactoryInterface $schemaFactory */ + /** @var DocumentFactoryInterface $documentFactory */ + /** @var ParserFactoryInterface $parserFactory */ + /** @var HandlerFactoryInterface $handlerFactory */ + /** @var ParametersFactoryInterface $parameterFactory */ + list($schemaFactory, $documentFactory, $parserFactory, $handlerFactory, $parameterFactory) = + self::getFactories(); + + $container = $schemaFactory->createContainer($schemas); + + return new self( + $documentFactory, + $parserFactory, + $handlerFactory, + $parameterFactory, + $container, + $encodeOptions + ); + } + + /** + * @return array [$schemaFactory, $documentFactory, $parserFactory, $handlerFactory, $parameterFactory] + */ + protected static function getFactories() { /** @noinspection PhpUnnecessaryFullyQualifiedNameInspection */ $schemaFactory = new \Neomerx\JsonApi\Schema\SchemaFactory(); - $container = $schemaFactory->createContainer($schemas); /** @noinspection PhpUnnecessaryFullyQualifiedNameInspection */ $documentFactory = new \Neomerx\JsonApi\Document\DocumentFactory(); /** @noinspection PhpUnnecessaryFullyQualifiedNameInspection */ - $encoderFactory = new \Neomerx\JsonApi\Encoder\Factory\EncoderFactory(); + $parserFactory = $handlerFactory = new \Neomerx\JsonApi\Encoder\Factory\EncoderFactory(); /** @noinspection PhpUnnecessaryFullyQualifiedNameInspection */ $parameterFactory = new \Neomerx\JsonApi\Parameters\ParametersFactory(); - return new self( - $documentFactory, - $encoderFactory, - $encoderFactory, - $parameterFactory, - $container, - $encodeOptions - ); + return [$schemaFactory, $documentFactory, $parserFactory, $handlerFactory, $parameterFactory]; } /** diff --git a/src/Schema/Container.php b/src/Schema/Container.php index b17861e1..5c95e6b6 100644 --- a/src/Schema/Container.php +++ b/src/Schema/Container.php @@ -88,7 +88,7 @@ public function registerArray(array $schemas) */ public function getSchema($resource) { - $resourceType = get_class($resource); + $resourceType = $this->getResourceType($resource); if (isset($this->createdProviders[$resourceType])) { return $this->createdProviders[$resourceType]; @@ -105,4 +105,14 @@ public function getSchema($resource) return $schema; } + + /** + * @param object $resource + * + * @return string + */ + protected function getResourceType($resource) + { + return get_class($resource); + } }