Skip to content

Commit

Permalink
Allowing anything implementing Aura\Di\ContainerConfigInterface to be…
Browse files Browse the repository at this point in the history
… loaded
  • Loading branch information
andrewshell committed Jul 9, 2017
1 parent fce172e commit 24652be
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 10 deletions.
22 changes: 12 additions & 10 deletions src/ModuleLoader.php
Expand Up @@ -94,10 +94,12 @@ protected function resolveDependencies()

$this->touchedModules[$name]++;

$this->resolveRequire($idx, $module);
$this->resolveRequireEnv($idx, $module);
$this->resolveConflict($module, $name);
$this->resolveReplace($module, $name);
if ($module instanceof ModuleInterface) {
$this->resolveRequire($idx, $module);
$this->resolveRequireEnv($idx, $module);
$this->resolveConflict($module, $name);
$this->resolveReplace($module, $name);
}

$module = $this->getModule($this->modules[$idx]);
if (0 === strcmp($name, get_class($module))) {
Expand Down Expand Up @@ -129,13 +131,13 @@ protected function injectRequiredModule($idx, $requiredModules)
}
}

protected function resolveRequire($idx, $module)
protected function resolveRequire($idx, ModuleInterface $module)
{
$requiredModules = $module->require();
$this->injectRequiredModule($idx, $requiredModules);
}

protected function resolveRequireEnv($idx, $module)
protected function resolveRequireEnv($idx, ModuleInterface $module)
{
$envMethod = 'require' . str_replace(' ', '', ucwords(
strtolower(str_replace('_', ' ', trim($this->environment)))
Expand All @@ -146,7 +148,7 @@ protected function resolveRequireEnv($idx, $module)
}
}

protected function resolveConflict($module, $name)
protected function resolveConflict(ModuleInterface $module, $name)
{
$conflictingModules = $module->conflict();
foreach ($conflictingModules as $conflictingModule) {
Expand All @@ -157,7 +159,7 @@ protected function resolveConflict($module, $name)
}
}

protected function resolveReplace($module, $name)
protected function resolveReplace(ModuleInterface $module, $name)
{
$replacesModules = $module->replace();
foreach ($replacesModules as $replacesModule) {
Expand Down Expand Up @@ -185,9 +187,9 @@ protected function getModule($module)
$module = new $module($this);
}

if (! $module instanceof ModuleInterface) {
if (! $module instanceof ContainerConfigInterface) {
throw new \InvalidArgumentException(
'Modules must implement ModuleInterface'
'Modules must implement ModuleInterface or ContainerConfigInterface'
);
}

Expand Down
15 changes: 15 additions & 0 deletions tests/ModuleLoaderTest.php
Expand Up @@ -4,6 +4,7 @@
use Aura\Di\ContainerBuilder;
use Cadre\Module\Sample\CircularModuleA;
use Cadre\Module\Sample\CircularModuleB;
use Cadre\Module\Sample\Config;
use Cadre\Module\Sample\ConflictModule;
use Cadre\Module\Sample\LoadedModule;
use Cadre\Module\Sample\NotAModule;
Expand All @@ -18,6 +19,20 @@

class ModuleLoaderTest extends \PHPUnit\Framework\TestCase
{
public function testLoadingConfig()
{
$loader = new ModuleLoader([
Config::class,
]);

$builder = new ContainerBuilder();
$di = $builder->newConfiguredInstance([$loader]);

$value = $di->newInstance(Value::class);

$this->assertEquals('required', $value->value);
}

public function testModuleRequire()
{
$loader = new ModuleLoader([
Expand Down
13 changes: 13 additions & 0 deletions tests/Sample/Config.php
@@ -0,0 +1,13 @@
<?php
namespace Cadre\Module\Sample;

use Aura\Di\Container;
use Aura\Di\ContainerConfig;

class Config extends ContainerConfig
{
public function define(Container $di)
{
$di->params[Value::class]['value'] = 'required';
}
}

0 comments on commit 24652be

Please sign in to comment.