Skip to content

Commit

Permalink
Merge pull request #978 from cakephp/3.x-enum-with-comment
Browse files Browse the repository at this point in the history
Add support and tests for enum comment.
  • Loading branch information
markstory committed Feb 22, 2024
2 parents d5ae87b + 1a3275f commit d4fa79c
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/Command/ModelCommand.php
Expand Up @@ -1476,11 +1476,11 @@ protected function getEnumDefinitions(TableSchemaInterface $schema): array
continue;
}

if (empty($columnSchema['comment']) || strpos($columnSchema['comment'], '[enum]') === false) {
if (empty($columnSchema['comment']) || !str_contains($columnSchema['comment'], '[enum]')) {
continue;
}

$enumsDefinitionString = trim(mb_substr($columnSchema['comment'], strpos($columnSchema['comment'], '[enum]') + 6));
$enumsDefinitionString = EnumParser::parseDefinitionString($columnSchema['comment']);
$isInt = in_array($columnSchema['type'], ['integer', 'tinyinteger', 'smallinteger'], true);
if (str_starts_with($columnSchema['type'], 'enum-')) {
$dbType = TypeFactory::build($columnSchema['type']);
Expand Down
16 changes: 16 additions & 0 deletions src/Utility/Model/EnumParser.php
Expand Up @@ -42,4 +42,20 @@ public static function parseCases(?string $casesString, bool $int): array

return $definition;
}

/**
* Parses an enum definition from a DB column comment.
*
* @param string $comment
* @return string
*/
public static function parseDefinitionString(string $comment): string
{
$string = trim(mb_substr($comment, strpos($comment, '[enum]') + 6));
if (str_contains($string, ';')) {
$string = trim(mb_substr($string, 0, strpos($string, ';')));
}

return $string;
}
}
15 changes: 15 additions & 0 deletions tests/TestCase/Utility/Model/EnumParserTest.php
Expand Up @@ -24,6 +24,21 @@
*/
class EnumParserTest extends TestCase
{
/**
* @return void
*/
public function testParseDefinitionString(): void
{
$definitionString = EnumParser::parseDefinitionString('[enum]');
$this->assertSame('', $definitionString);

$definitionString = EnumParser::parseDefinitionString('[enum] foo, bar');
$this->assertSame('foo, bar', $definitionString);

$definitionString = EnumParser::parseDefinitionString('[enum] foo, bar; Some additional comment');
$this->assertSame('foo, bar', $definitionString);
}

/**
* @return void
*/
Expand Down

0 comments on commit d4fa79c

Please sign in to comment.