Skip to content

Commit

Permalink
Replace arachne/di-helpers with arachne/service-collections
Browse files Browse the repository at this point in the history
  • Loading branch information
enumag committed Sep 30, 2016
1 parent 1446615 commit 6a72138
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 48 deletions.
8 changes: 3 additions & 5 deletions composer.json
Expand Up @@ -13,7 +13,7 @@
],
"require": {
"php": "^5.4.0|^7.0.0",
"arachne/di-helpers": "^0.4.0|^0.5.0",
"arachne/service-collections": "^0.1.0",
"kdyby/doctrine": "^3.0.0",
"nette/di": "^2.3.0"
},
Expand All @@ -25,11 +25,9 @@
"require-dev": {
"php": "^5.5.0|^7.0.0",
"arachne/codeception": "^0.7.3",
"arachne/entity-loader": "^0.8.3|^0.9.0",
"arachne/entity-loader": "^0.10.0",
"codeception/codeception": "~2.2.0",
"kdyby/console": "^2.4.0",
"nette/di": "~2.3.0|^2.4.3@dev",
"symfony/event-dispatcher": "^2.8.0"
"kdyby/console": "^2.4.0"
},
"autoload": {
"psr-4": {
Expand Down
85 changes: 56 additions & 29 deletions src/DI/DoctrineExtension.php
Expand Up @@ -10,13 +10,14 @@

namespace Arachne\Doctrine\DI;

use Arachne\DIHelpers\CompilerExtension;
use Arachne\EntityLoader\DI\EntityLoaderExtension;
use Arachne\EventManager\DI\EventManagerExtension;
use Arachne\Forms\DI\FormsExtension;
use Arachne\ServiceCollections\DI\ServiceCollectionsExtension;
use Kdyby\DoctrineCache\DI\Helpers;
use Kdyby\Events\DI\EventsExtension;
use Kdyby\Validator\DI\ValidatorExtension;
use Nette\DI\CompilerExtension;
use Nette\Utils\AssertionException;
use Nette\Utils\Validators;

Expand Down Expand Up @@ -46,17 +47,43 @@ public function loadConfiguration()
$builder = $this->getContainerBuilder();

if ($this->getExtension('Arachne\EntityLoader\DI\EntityLoaderExtension', false)) {
$builder->addDefinition($this->prefix('entityLoader.filterInResolver'))
->setClass('Arachne\Doctrine\EntityLoader\FilterInResolver')
->setAutowired(false);

$builder->addDefinition($this->prefix('entityLoader.filterOutResolver'))
->setClass('Arachne\Doctrine\EntityLoader\FilterOutResolver')
->setAutowired(false);

$extension = $this->getExtension('Arachne\DIHelpers\DI\ResolversExtension');
$extension->override(EntityLoaderExtension::TAG_FILTER_IN, $this->prefix('entityLoader.filterInResolver'));
$extension->override(EntityLoaderExtension::TAG_FILTER_OUT, $this->prefix('entityLoader.filterOutResolver'));
$serviceCollectionsExtension = $this->getExtension('Arachne\ServiceCollections\DI\ServiceCollectionsExtension');
$serviceCollectionsExtension->overrideCollection(
ServiceCollectionsExtension::TYPE_RESOLVER,
EntityLoaderExtension::TAG_FILTER_IN,
function ($originalService) use ($builder) {
$service = $this->prefix('entityLoader.filterInResolver');

$builder->addDefinition($service)
->setClass('Arachne\Doctrine\EntityLoader\FilterInResolver')
->setArguments(
[
'resolver' => '@'.$originalService,
]
)
->setAutowired(false);

return $service;
}
);
$serviceCollectionsExtension->overrideCollection(
ServiceCollectionsExtension::TYPE_RESOLVER,
EntityLoaderExtension::TAG_FILTER_OUT,
function ($originalService) use ($builder) {
$service = $this->prefix('entityLoader.filterOutResolver');

$builder->addDefinition($service)
->setClass('Arachne\Doctrine\EntityLoader\FilterOutResolver')
->setArguments(
[
'resolver' => '@'.$originalService,
]
)
->setAutowired(false);

return $service;
}
);
}

if ($this->getExtension('Kdyby\Validator\DI\ValidatorExtension', false)) {
Expand Down Expand Up @@ -124,26 +151,26 @@ public function loadConfiguration()
}
}

public function beforeCompile()
/**
* @param string $class
* @param bool $need
*
* @return CompilerExtension|null
*/
private function getExtension($class, $need = true)
{
$builder = $this->getContainerBuilder();
$extensions = $this->compiler->getExtensions($class);

if ($this->getExtension('Arachne\EntityLoader\DI\EntityLoaderExtension', false)) {
$extension = $this->getExtension('Arachne\DIHelpers\DI\ResolversExtension', false);

$builder->getDefinition($this->prefix('entityLoader.filterInResolver'))
->setArguments(
[
'resolver' => '@'.$extension->get(EntityLoaderExtension::TAG_FILTER_IN, false),
]
);
if (!$extensions) {
if (!$need) {
return null;
}

$builder->getDefinition($this->prefix('entityLoader.filterOutResolver'))
->setArguments(
[
'resolver' => '@'.$extension->get(EntityLoaderExtension::TAG_FILTER_OUT, false),
]
);
throw new AssertionException(
sprintf('Extension "%s" requires "%s" to be installed.', get_class($this), $class)
);
}

return reset($extensions);
}
}
12 changes: 6 additions & 6 deletions src/EntityLoader/FilterInResolver.php
Expand Up @@ -10,16 +10,15 @@

namespace Arachne\Doctrine\EntityLoader;

use Arachne\DIHelpers\ResolverInterface;
use Doctrine\Common\Persistence\ManagerRegistry;

/**
* @author Jáchym Toušek <enumag@gmail.com>
*/
class FilterInResolver implements ResolverInterface
class FilterInResolver
{
/**
* @var ResolverInterface
* @var callable
*/
private $resolver;

Expand All @@ -33,7 +32,7 @@ class FilterInResolver implements ResolverInterface
*/
private $filters;

public function __construct(ResolverInterface $resolver, ManagerRegistry $managerRegistry)
public function __construct(callable $resolver, ManagerRegistry $managerRegistry)
{
$this->resolver = $resolver;
$this->managerRegistry = $managerRegistry;
Expand All @@ -44,9 +43,10 @@ public function __construct(ResolverInterface $resolver, ManagerRegistry $manage
*
* @return FilterIn|null
*/
public function resolve($name)
public function __invoke($name)
{
return $this->resolver->resolve($name) ?: (isset($this->filters[$name]) ? $this->filters[$name] : $this->filters[$name] = $this->create($name));
return call_user_func($this->resolver, $name)
?: (isset($this->filters[$name]) ? $this->filters[$name] : $this->filters[$name] = $this->create($name));
}

/**
Expand Down
12 changes: 6 additions & 6 deletions src/EntityLoader/FilterOutResolver.php
Expand Up @@ -10,16 +10,15 @@

namespace Arachne\Doctrine\EntityLoader;

use Arachne\DIHelpers\ResolverInterface;
use Doctrine\Common\Persistence\ManagerRegistry;

/**
* @author Jáchym Toušek <enumag@gmail.com>
*/
class FilterOutResolver implements ResolverInterface
class FilterOutResolver
{
/**
* @var ResolverInterface
* @var callable
*/
private $resolver;

Expand All @@ -33,7 +32,7 @@ class FilterOutResolver implements ResolverInterface
*/
private $filters;

public function __construct(ResolverInterface $resolver, ManagerRegistry $managerRegistry)
public function __construct(callable $resolver, ManagerRegistry $managerRegistry)
{
$this->resolver = $resolver;
$this->managerRegistry = $managerRegistry;
Expand All @@ -44,9 +43,10 @@ public function __construct(ResolverInterface $resolver, ManagerRegistry $manage
*
* @return FilterOut|null
*/
public function resolve($name)
public function __invoke($name)
{
return $this->resolver->resolve($name) ?: (isset($this->filters[$name]) ? $this->filters[$name] : $this->filters[$name] = $this->create($name));
return call_user_func($this->resolver, $name)
?: (isset($this->filters[$name]) ? $this->filters[$name] : $this->filters[$name] = $this->create($name));
}

/**
Expand Down
4 changes: 2 additions & 2 deletions tests/functional/config/config.neon
@@ -1,7 +1,7 @@
extensions:
arachne.dihelpers.resolvers: Arachne\DIHelpers\DI\ResolversExtension
arachne.entityloader: Arachne\EntityLoader\DI\EntityLoaderExtension
arachne.servicecollections: Arachne\ServiceCollections\DI\ServiceCollectionsExtension
arachne.doctrine: Arachne\Doctrine\DI\DoctrineExtension
arachne.entityloader: Arachne\EntityLoader\DI\EntityLoaderExtension
kdyby.annotations: Kdyby\Annotations\DI\AnnotationsExtension
kdyby.console: Kdyby\Console\DI\ConsoleExtension
kdyby.events: Kdyby\Events\DI\EventsExtension
Expand Down

0 comments on commit 6a72138

Please sign in to comment.