[FEATURE] Enumeration constants getName methods 03/50503/7
authorAnja Leichsenring <aleichsenring@ab-softlab.de>
Fri, 4 Nov 2016 16:20:19 +0000 (17:20 +0100)
committerAndreas Fernandez <typo3@scripting-base.de>
Sat, 5 Nov 2016 18:12:56 +0000 (19:12 +0100)
It comes in handy to use the names of enumeration objects
sometimes. Two getName() functions provide the name
once unchanged, once human readable.

Resolves: #78575
Releases: master
Change-Id: Ibb0e06c7462835097f9980a854c79c8f90a61672
Reviewed-on: https://review.typo3.org/50503
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Michael Oehlhof <typo3@oehlhof.de>
Tested-by: Michael Oehlhof <typo3@oehlhof.de>
Reviewed-by: Andreas Fernandez <typo3@scripting-base.de>
Tested-by: Andreas Fernandez <typo3@scripting-base.de>
typo3/sysext/core/Classes/Type/Enumeration.php
typo3/sysext/core/Documentation/Changelog/master/Feature-78575-EnumerationConstantsProvideTheirNames.rst [new file with mode: 0644]
typo3/sysext/core/Tests/Unit/Type/EnumerationTest.php

index 24179b1..282ee3a 100644 (file)
@@ -208,4 +208,32 @@ abstract class Enumeration implements TypeInterface
     {
         return (string)$this->value;
     }
+
+    /**
+     * Returns the constants name as is, without manipulation (usually all upper case)
+     *
+     * @param string|int $value
+     * @return string
+     */
+    public static function getName($value)
+    {
+        $name = '';
+        $constants = array_flip(static::getConstants());
+        if (array_key_exists($value, $constants)) {
+            $name = $constants[$value];
+        }
+        return $name;
+    }
+
+    /**
+     * Returns the name of the constant, first char upper, underscores as spaces
+     *
+     * @param string|int $value
+     * @return string
+     */
+    public static function getHumanReadableName($value)
+    {
+        $name = static::getName($value);
+        return ucwords(strtolower(str_replace('_', ' ', $name)));
+    }
 }
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Feature-78575-EnumerationConstantsProvideTheirNames.rst b/typo3/sysext/core/Documentation/Changelog/master/Feature-78575-EnumerationConstantsProvideTheirNames.rst
new file mode 100644 (file)
index 0000000..0379e3d
--- /dev/null
@@ -0,0 +1,24 @@
+.. include:: ../../Includes.txt
+
+=================================================================
+Feature: #78575 - Enumeration constants don't provide their names
+=================================================================
+
+See :issue:`78575`
+
+Description
+===========
+
+Requesting the name of Enumeration constant has been introduced.
+
+There are two methods you can use:
+:php:`MyEnumerationClass::getName($value);` will return the name exactly as it is. Usually this will be all uppercase and underscores.
+:php:`MyEnumerationClass::getHumanReadableName($value);` replaces underscores with spaces and turns all words into lowercase with the first letter uppercase.
+
+
+Impact
+======
+
+You can use the constant names as part of your application more easily.
+
+.. index:: PHP-API
index e12365f..36a0c94 100644 (file)
@@ -380,4 +380,40 @@ class EnumerationTest extends \TYPO3\CMS\Core\Tests\UnitTestCase
         $enumerationBar = new Enumeration\CompleteEnumeration('foo');
         $this->assertFalse($enumerationFoo->equals($enumerationBar));
     }
+
+    /**
+     * @test
+     */
+    public function getNameProvidesNameForAvailableConstant()
+    {
+        $result = Enumeration\CompleteEnumeration::getName(Enumeration\CompleteEnumeration::INTEGER_VALUE);
+        $this->assertSame('INTEGER_VALUE', $result);
+    }
+
+    /**
+     * @test
+     */
+    public function getNameReturnsEmptyStringForNotAvailableConstant()
+    {
+        $result = Enumeration\CompleteEnumeration::getName(42);
+        $this->assertSame('', $result);
+    }
+
+    /**
+     * @test
+     */
+    public function getHumanReadableNameProvidesNameForAvailableConstant()
+    {
+        $result = Enumeration\CompleteEnumeration::getHumanReadableName(Enumeration\CompleteEnumeration::INTEGER_VALUE);
+        $this->assertSame('Integer Value', $result);
+    }
+
+    /**
+     * @test
+     */
+    public function getHumanReadableNameReturnsEmptyStringForNotAvailableConstant()
+    {
+        $result = Enumeration\CompleteEnumeration::getName(42);
+        $this->assertSame('', $result);
+    }
 }