Skip to content

Commit

Permalink
adds StaticEnvVarLoader as a decorator of SodiumVault
Browse files Browse the repository at this point in the history
  • Loading branch information
faizanakram99 committed Apr 29, 2024
1 parent f225f1e commit a888820
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 0 deletions.
40 changes: 40 additions & 0 deletions src/Symfony/Bundle/FrameworkBundle/Secrets/StaticEnvVarLoader.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Symfony\Bundle\FrameworkBundle\Secrets;

use Symfony\Component\DependencyInjection\Attribute\AsDecorator;
use Symfony\Component\DependencyInjection\Attribute\AutowireDecorated;
use Symfony\Component\DependencyInjection\EnvVarLoaderInterface;

/**
* @internal
*/
#[AsDecorator('secrets.vault')]
class StaticEnvVarLoader implements EnvVarLoaderInterface
{
private array $envCache = [];

public function __construct(
#[AutowireDecorated]
private EnvVarLoaderInterface $envVarLoader,
) {
}

public function loadEnvVars(): array
{
if ([] !== $this->envCache) {
return $this->envCache;
}

return $this->envCache = $this->envVarLoader->loadEnvVars();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Symfony\Bundle\FrameworkBundle\Tests\Secrets;

use PHPUnit\Framework\TestCase;
use Symfony\Bundle\FrameworkBundle\Secrets\StaticEnvVarLoader;
use Symfony\Component\DependencyInjection\EnvVarLoaderInterface;

class StaticEnvVarLoaderTest extends TestCase
{
public function testLoadEnvVarsCachesInnerLoaderEnvVars()
{
$innerLoader = new class(['FOO' => 'BAR']) implements EnvVarLoaderInterface {
/** @param array<string, string> */
public function __construct(public array $envVars = [])
{
}

public function loadEnvVars(): array
{
return $this->envVars;
}
};

$loader = new StaticEnvVarLoader($innerLoader);
$this->assertSame(['FOO' => 'BAR'], $loader->loadEnvVars());

$innerLoader->envVars = ['BAR' => 'BAZ'];
$this->assertSame(['FOO' => 'BAR'], $loader->loadEnvVars());
}
}

0 comments on commit a888820

Please sign in to comment.