Skip to content

Commit

Permalink
autowired (#53)
Browse files Browse the repository at this point in the history
  • Loading branch information
aleswita committed Jan 24, 2021
1 parent 9f677fc commit 6df7e96
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 3 deletions.
32 changes: 29 additions & 3 deletions src/DI/TranslationExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ public function getConfigSchema(): Nette\Schema\Schema
]),
'translatorFactory' => Expect::string()->default(null),
'returnOriginalMessage' => Expect::bool()->default(false),
'autowired' => Expect::type('bool|array')->default(true),
]);
}

Expand Down Expand Up @@ -113,6 +114,23 @@ public function loadConfiguration(): void
$configCacheFactory = $builder->addDefinition($this->prefix('configCacheFactory'))
->setFactory($this->config->cache->factory, [$this->config->debug]);

$autowired = [];

if ($this->config->autowired) {
$autowired = [
Nette\Localization\ITranslator::class,
Symfony\Contracts\Translation\TranslatorInterface::class,
Contributte\Translation\Translator::class,
];

} elseif (is_array($this->config->autowired)) {
$autowired = $this->config->autowired;
}

if (is_array($this->config->autowired)) {
$autowired = $this->config->autowired;
}

// Translator
if ($this->config->translatorFactory !== null) {
$reflectionTranslatorFactory = new ReflectionClass($this->config->translatorFactory);
Expand All @@ -123,6 +141,9 @@ public function loadConfiguration(): void

$factory = $this->config->translatorFactory;

if ($this->config->autowired) {
$autowired[] = $factory;
}
} else {
$factory = Contributte\Translation\Translator::class;
}
Expand All @@ -132,8 +153,13 @@ public function loadConfiguration(): void
->addSetup('setLocalesWhitelist', [$this->config->locales->whitelist])
->addSetup('setConfigCacheFactory', [$configCacheFactory])
->addSetup('setFallbackLocales', [$this->config->locales->fallback])
->addSetup('$returnOriginalMessage', [$this->config->returnOriginalMessage])
->setAutowired([Nette\Localization\ITranslator::class, Symfony\Contracts\Translation\TranslatorInterface::class]);
->addSetup('$returnOriginalMessage', [$this->config->returnOriginalMessage]);

if ($this->config->autowired === false) {
$translator->setAutowired(false);
} else {
$translator->setAutowired($autowired);
}

// Loaders
foreach ($this->config->loaders as $k1 => $v1) {
Expand Down Expand Up @@ -182,7 +208,7 @@ public function beforeCompile(): void

if ($latteFactoryName !== null) {
$latteFilters = $builder->addDefinition($this->prefix('latte.filters'))
->setFactory(Contributte\Translation\Latte\Filters::class);
->setFactory(Contributte\Translation\Latte\Filters::class, [$translator]);

/** @var Nette\DI\Definitions\FactoryDefinition $latteFactory */
$latteFactory = $builder->getDefinition($latteFactoryName);
Expand Down
49 changes: 49 additions & 0 deletions tests/Tests/DI/TranslationExtension.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,9 @@ class TranslationExtension extends Tests\TestAbstract

$symfonyTranslator = $container->getByType(Symfony\Contracts\Translation\TranslatorInterface::class);
Tester\Assert::same($translator, $symfonyTranslator);

$contributteTranslator = $container->getByType(Contributte\Translation\Translator::class);
Tester\Assert::same($translator, $contributteTranslator);
}

public function test04(): void
Expand Down Expand Up @@ -201,6 +204,9 @@ class TranslationExtension extends Tests\TestAbstract
$translator = $container->getByType(Nette\Localization\ITranslator::class);

Tester\Assert::type(Tests\CustomTranslatorMock::class, $translator);

$factoryTranslator = $container->getByType(Tests\CustomTranslatorMock::class);
Tester\Assert::same($translator, $factoryTranslator);
}

public function test07(): void
Expand All @@ -217,6 +223,49 @@ class TranslationExtension extends Tests\TestAbstract
Tester\Assert::false($translator->returnOriginalMessage);
}

public function test08(): void
{
$container = Tests\Helpers::createContainerFromConfigurator($this->container->getParameters()['tempDir'], [
'translation' => [
'returnOriginalMessage' => false,
],
]);

/** @var Contributte\Translation\Translator $translator */
$translator = $container->getByType(Nette\Localization\ITranslator::class);

Tester\Assert::false($translator->returnOriginalMessage);
}

public function test09(): void
{
$container = Tests\Helpers::createContainerFromConfigurator($this->container->getParameters()['tempDir'], [
'translation' => [
'autowired' => false,
],
]);

$translator = $container->getByType(Nette\Localization\ITranslator::class, false);

Tester\Assert::null($translator);

$container = Tests\Helpers::createContainerFromConfigurator($this->container->getParameters()['tempDir'], [
'translation' => [
'autowired' => [
Contributte\Translation\Translator::class,
],
],
]);

$translator = $container->getByType(Nette\Localization\ITranslator::class, false);

Tester\Assert::null($translator);

$translator = $container->getByType(Contributte\Translation\Translator::class, false);

Tester\Assert::true($translator instanceof Contributte\Translation\Translator);
}

}

(new TranslationExtension($container))->run();

0 comments on commit 6df7e96

Please sign in to comment.