diff --git a/src/flextype/core/Parsers/Expressions/UnlessExpression.php b/src/flextype/core/Parsers/Expressions/UnlessExpression.php new file mode 100644 index 00000000..49a47ce6 --- /dev/null +++ b/src/flextype/core/Parsers/Expressions/UnlessExpression.php @@ -0,0 +1,35 @@ + ($value === false) ? $result : '', + static fn ($arguments, bool $value, $result) => ($value === false) ? $result : '' + ) + ]; + } +} \ No newline at end of file diff --git a/src/flextype/core/Parsers/Expressions/WhenExpression.php b/src/flextype/core/Parsers/Expressions/WhenExpression.php new file mode 100644 index 00000000..e715f9e5 --- /dev/null +++ b/src/flextype/core/Parsers/Expressions/WhenExpression.php @@ -0,0 +1,35 @@ + ($value === true) ? $result : '', + static fn ($arguments, bool $value, $result) => ($value === true) ? $result : '' + ) + ]; + } +} \ No newline at end of file diff --git a/src/flextype/settings.yaml b/src/flextype/settings.yaml index defef310..f62a6123 100644 --- a/src/flextype/settings.yaml +++ b/src/flextype/settings.yaml @@ -725,7 +725,13 @@ parsers: url: enabled: true class: "Flextype\\Parsers\\Expressions\\UrlExpression" - + when: + enabled: true + class: "Flextype\\Parsers\\Expressions\\WhenExpression" + unless: + enabled: true + class: "Flextype\\Parsers\\Expressions\\UnlessnExpression" + # CORS # # CORS (Cross-origin resource sharing) allows JavaScript web apps to make HTTP requests to other domains. diff --git a/tests/src/flextype/core/Parsers/Expressions/UnlessExpressionTest.php b/tests/src/flextype/core/Parsers/Expressions/UnlessExpressionTest.php new file mode 100644 index 00000000..aead2a55 --- /dev/null +++ b/tests/src/flextype/core/Parsers/Expressions/UnlessExpressionTest.php @@ -0,0 +1,26 @@ +directory(FLEXTYPE_PATH_PROJECT . '/entries')->create(); +}); + +afterEach(function (): void { + filesystem()->directory(FLEXTYPE_PATH_PROJECT . '/entries')->delete(); +}); + +test('unless expression', function () { + + entries()->create('unless', [ + 'title' => 'Title', + + 'test-unless-positive' => '[[ unless(title == "Foo", "Yes!") ]]', + 'test-unless-negative' => '[[ unless(title == "Title", "No!") ]]' + ]); + + expect(entries()->fetch('unless')['test-unless-positive'])->toBe('Yes!'); + expect(entries()->fetch('unless')['test-unless-negative'])->toBe('No!'); +}); \ No newline at end of file diff --git a/tests/src/flextype/core/Parsers/Expressions/WhenExpressionTest.php b/tests/src/flextype/core/Parsers/Expressions/WhenExpressionTest.php new file mode 100644 index 00000000..16f7b01a --- /dev/null +++ b/tests/src/flextype/core/Parsers/Expressions/WhenExpressionTest.php @@ -0,0 +1,26 @@ +directory(FLEXTYPE_PATH_PROJECT . '/entries')->create(); +}); + +afterEach(function (): void { + filesystem()->directory(FLEXTYPE_PATH_PROJECT . '/entries')->delete(); +}); + +test('when expression', function () { + + entries()->create('when', [ + 'title' => 'Title', + + 'test-when-positive' => '[[ when(title == "Title", "Yes!") ]]', + 'test-when-negative' => '[[ when(title == "Foo", "No!") ]]' + ]); + + expect(entries()->fetch('when')['test-when-positive'])->toBe('Yes!'); + expect(entries()->fetch('when')['test-when-negative'])->toBe('No!'); +}); \ No newline at end of file