Skip to content

Commit

Permalink
Merge pull request #38 from acelaya-forks/feature/fix-nullable-env-vars
Browse files Browse the repository at this point in the history
Make loadEnvVarsFromConfig skip null env vars
  • Loading branch information
acelaya authored Oct 17, 2024
2 parents cca54c2 + 476848b commit 352e90f
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 4 deletions.
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,23 @@ All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com), and this project adheres to [Semantic Versioning](https://semver.org).

## [3.2.1] - 2024-10-17
### Added
* *Nothing*

### Changed
* *Nothing*

### Deprecated
* *Nothing*

### Removed
* *Nothing*

### Fixed
* Fix regression where `loadEnvVarsFromConfig` defines env vars with null value as empty instead of skipping them entirely.


## [3.2.0] - 2024-10-14
### Added
* Expose new `loadEnvVarsFromConfig` function to use instead of `EnvVarLoaderProvider`.
Expand Down
18 changes: 15 additions & 3 deletions functions/functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,11 @@ function parseEnvVar(string $value): string|int|bool|null
/**
* @param string|string[]|int|int[]|bool|null $value
*/
function formatEnvVarValue(string|int|bool|array|null $value): string
function formatEnvVarValueOrNull(string|int|bool|array|null $value): string|null
{
$isArray = is_array($value);
if (! $isArray && ! is_scalar($value)) {
return '';
return null;
}

return $isArray ? implode(',', $value) : match ($value) {
Expand All @@ -62,6 +62,14 @@ function formatEnvVarValue(string|int|bool|array|null $value): string
};
}

/**
* @param string|string[]|int|int[]|bool|null $value
*/
function formatEnvVarValue(string|int|bool|array|null $value): string
{
return formatEnvVarValueOrNull($value) ?? '';
}

/**
* Loads config from $configPath, then puts all its values as env vars if they are not yet defined
*/
Expand All @@ -83,7 +91,11 @@ function putNotYetDefinedEnv(string $key, mixed $value): void
return;
}

$formattedValue = formatEnvVarValue($value);
$formattedValue = formatEnvVarValueOrNull($value);
if ($formattedValue === null) {
return;
}

putenv(sprintf('%s=%s', $key, $formattedValue));
}

Expand Down
2 changes: 2 additions & 0 deletions test/Functions/FormatEnvVarValueTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use PHPUnit\Framework\TestCase;

use function Shlinkio\Shlink\Config\formatEnvVarValue;
use function Shlinkio\Shlink\Config\formatEnvVarValueOrNull;

class FormatEnvVarValueTest extends TestCase
{
Expand All @@ -23,5 +24,6 @@ class FormatEnvVarValueTest extends TestCase
public function valuesAreFormattedAsExpected(string|int|bool|array|null $value, string $expectedResult): void
{
self::assertEquals($expectedResult, formatEnvVarValue($value));
self::assertEquals($value === null ? null : $expectedResult, formatEnvVarValueOrNull($value));
}
}
2 changes: 1 addition & 1 deletion test/Functions/LoadEnvVarsFromConfigTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,6 @@ public function putsExpectedEnvVars(): void
self::assertFalse(getenv('foo2'));
self::assertEquals('3', getenv('NUMBER'));
self::assertEquals(3, env('NUMBER'));
self::assertEquals('', env('NULL'));
self::assertNull(env('NULL'));
}
}

0 comments on commit 352e90f

Please sign in to comment.