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
= $this->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