From 38e147921342db14f8d3e286254d9c3a71dfa07c Mon Sep 17 00:00:00 2001 From: Natan Felles Date: Sat, 16 Apr 2022 15:21:31 -0300 Subject: [PATCH] Add FallbackLevel enum --- src/Debug/LanguageCollector.php | 7 +---- src/FallbackLevel.php | 39 ++++++++++++++++++++++++ src/Language.php | 43 +++++---------------------- tests/Debug/LanguageCollectorTest.php | 5 ++-- tests/LanguageTest.php | 13 +++----- 5 files changed, 55 insertions(+), 52 deletions(-) create mode 100644 src/FallbackLevel.php diff --git a/src/Debug/LanguageCollector.php b/src/Debug/LanguageCollector.php index 1211888..f7c88dc 100644 --- a/src/Debug/LanguageCollector.php +++ b/src/Debug/LanguageCollector.php @@ -59,12 +59,7 @@ public function getContents() : string ?>

Fallback Level: language->getFallbackLevel(); - $levelName = match ($level) { - Language::FALLBACK_PARENT => 'parent', - Language::FALLBACK_DEFAULT => 'default', - default => 'none', - }; - echo "{$level} ({$levelName})"; ?>

+ echo "{$level->value} ({$level->name})"; ?>

Rendered Messages

renderRenderedMessages() ?>

Directories

diff --git a/src/FallbackLevel.php b/src/FallbackLevel.php new file mode 100644 index 0000000..fc4137b --- /dev/null +++ b/src/FallbackLevel.php @@ -0,0 +1,39 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Framework\Language; + +/** + * Enum FallbackLevel. + * + * @package language + */ +enum FallbackLevel: int +{ + /** + * Disable fallback. + * + * Use language lines only from the given language. + */ + case none = 0; + /** + * Fallback to parent language. + * + * If the given language is pt-BR and a line is not found, try to use the line of pt. + * + * NOTE: The parent locale must be set in the Supported Locales to this fallback work. + */ + case parent = 1; + /** + * Fallback to default language. + * + * If the parent language is not found, try to use the default language. + */ + case default = 2; +} diff --git a/src/Language.php b/src/Language.php index e47f5a5..9737493 100644 --- a/src/Language.php +++ b/src/Language.php @@ -25,26 +25,6 @@ */ class Language { - /** - * Fallback to default language. - * - * If the parent language is not found, try to use the default language. - */ - public const FALLBACK_DEFAULT = 2; - /** - * Disable fallback. - * - * Use language lines only from the given language. - */ - public const FALLBACK_NONE = 0; - /** - * Fallback to parent language. - * - * If the given language is pt-BR and a line is not found, try to use the line of pt. - * - * NOTE: The parent locale must be set in the Supported Locales to this fallback work. - */ - public const FALLBACK_PARENT = 1; /** * The current locale. */ @@ -62,7 +42,7 @@ class Language /** * The locale fallback level. */ - protected int $fallbackLevel = Language::FALLBACK_DEFAULT; + protected FallbackLevel $fallbackLevel = FallbackLevel::default; /** * List with locales of already scanned directories. * @@ -252,10 +232,10 @@ public function getDirectories() : array /** * Gets the Fallback Level. * - * @return int One of the FALLBACK_* constants + * @return FallbackLevel */ #[Pure] - public function getFallbackLevel() : int + public function getFallbackLevel() : FallbackLevel { return $this->fallbackLevel; } @@ -273,15 +253,15 @@ public function getFallbackLevel() : int protected function getFallbackLine(string $locale, string $file, string $line) : array { $text = null; - $level = $this->getFallbackLevel(); + $level = $this->getFallbackLevel()->value; // Fallback to parent - if ($level > static::FALLBACK_NONE && \strpos($locale, '-') > 1) { + if ($level > FallbackLevel::none->value && \strpos($locale, '-') > 1) { [$locale] = \explode('-', $locale, 2); $text = $this->getLine($locale, $file, $line); } // Fallback to default if ($text === null - && $level > static::FALLBACK_PARENT + && $level > FallbackLevel::parent->value && $locale !== $this->getDefaultLocale() ) { $locale = $this->getDefaultLocale(); @@ -604,19 +584,12 @@ protected function reindex() : void /** * Sets the Fallback Level. * - * @param int $level one of the FALLBACK_* constants + * @param FallbackLevel $level * * @return static */ - public function setFallbackLevel(int $level) : static + public function setFallbackLevel(FallbackLevel $level) : static { - if ( ! \in_array($level, [ - static::FALLBACK_NONE, - static::FALLBACK_PARENT, - static::FALLBACK_DEFAULT, - ], true)) { - throw new InvalidArgumentException('Invalid fallback level: ' . $level); - } $this->fallbackLevel = $level; return $this; } diff --git a/tests/Debug/LanguageCollectorTest.php b/tests/Debug/LanguageCollectorTest.php index e46fea9..f30c59d 100644 --- a/tests/Debug/LanguageCollectorTest.php +++ b/tests/Debug/LanguageCollectorTest.php @@ -10,6 +10,7 @@ namespace Tests\Language\Debug; use Framework\Language\Debug\LanguageCollector; +use Framework\Language\FallbackLevel; use Framework\Language\Language; use PHPUnit\Framework\TestCase; @@ -47,12 +48,12 @@ public function testFallbackLevels() : void '2 (default)', $this->collector->getContents() ); - $language->setFallbackLevel(Language::FALLBACK_PARENT); + $language->setFallbackLevel(FallbackLevel::parent); self::assertStringContainsString( '1 (parent)', $this->collector->getContents() ); - $language->setFallbackLevel(Language::FALLBACK_NONE); + $language->setFallbackLevel(FallbackLevel::none); self::assertStringContainsString( '0 (none)', $this->collector->getContents() diff --git a/tests/LanguageTest.php b/tests/LanguageTest.php index df875fa..a15c1b1 100644 --- a/tests/LanguageTest.php +++ b/tests/LanguageTest.php @@ -9,6 +9,7 @@ */ namespace Tests\Language; +use Framework\Language\FallbackLevel; use Framework\Language\Language; use PHPUnit\Framework\TestCase; @@ -129,15 +130,9 @@ public function testSetDirectoryAfterScan() : void public function testFallbackLevel() : void { - self::assertSame($this->language::FALLBACK_DEFAULT, $this->language->getFallbackLevel()); - $this->language->setFallbackLevel($this->language::FALLBACK_NONE); - self::assertSame($this->language::FALLBACK_NONE, $this->language->getFallbackLevel()); - } - - public function testInvalidFallbackLevel() : void - { - $this->expectException(\InvalidArgumentException::class); - $this->language->setFallbackLevel(999); + self::assertSame(FallbackLevel::default, $this->language->getFallbackLevel()); + $this->language->setFallbackLevel(FallbackLevel::none); + self::assertSame(FallbackLevel::none, $this->language->getFallbackLevel()); } public function testLang() : void