From c3619c65b44d9598f6dd6cde68a22bd8ead4d89c Mon Sep 17 00:00:00 2001 From: Awilum Date: Sun, 29 May 2022 11:11:53 +0300 Subject: [PATCH] feat(expressions): add new `field` and `var` expressions --- .../Entries/Expressions/FieldExpression.php | 30 +++++++++++++++++++ .../Entries/Expressions/VarExpression.php | 30 +++++++++++++++++++ src/flextype/settings.yaml | 6 ++++ tests/fixtures/settings/settings.yaml | 6 ++++ .../Expressions/FieldExpressionTest.php | 16 ++++++++++ .../Entries/Expressions/VarExpressionTest.php | 16 ++++++++++ 6 files changed, 104 insertions(+) create mode 100644 src/flextype/core/Entries/Expressions/FieldExpression.php create mode 100644 src/flextype/core/Entries/Expressions/VarExpression.php create mode 100644 tests/src/flextype/core/Entries/Expressions/FieldExpressionTest.php create mode 100644 tests/src/flextype/core/Entries/Expressions/VarExpressionTest.php diff --git a/src/flextype/core/Entries/Expressions/FieldExpression.php b/src/flextype/core/Entries/Expressions/FieldExpression.php new file mode 100644 index 00000000..06550ca0 --- /dev/null +++ b/src/flextype/core/Entries/Expressions/FieldExpression.php @@ -0,0 +1,30 @@ + "entries()->registry()->get('methods.fetch.result.' . $field . ')'", fn($arguments, string $field) => entries()->registry()->get('methods.fetch.result.' . $field)) + ]; + } +} \ No newline at end of file diff --git a/src/flextype/core/Entries/Expressions/VarExpression.php b/src/flextype/core/Entries/Expressions/VarExpression.php new file mode 100644 index 00000000..a211e1a8 --- /dev/null +++ b/src/flextype/core/Entries/Expressions/VarExpression.php @@ -0,0 +1,30 @@ + "entries()->registry()->get('methods.fetch.result.vars.' . $var . ')'", fn($arguments, string $var) => entries()->registry()->get('methods.fetch.result.vars.' . $var)) + ]; + } +} \ No newline at end of file diff --git a/src/flextype/settings.yaml b/src/flextype/settings.yaml index 00d0c45b..acbaa54f 100644 --- a/src/flextype/settings.yaml +++ b/src/flextype/settings.yaml @@ -110,6 +110,12 @@ entries: csrf: enabled: true class: "Flextype\\Entries\\Expressions\\CsrfExpression" + var: + enabled: true + class: "Flextype\\Entries\\Expressions\\VarExpression" + field: + enabled: true + class: "Flextype\\Entries\\Expressions\\FieldExpression" directives: expressions: enabled: true diff --git a/tests/fixtures/settings/settings.yaml b/tests/fixtures/settings/settings.yaml index 6ea58bc8..b22f7462 100644 --- a/tests/fixtures/settings/settings.yaml +++ b/tests/fixtures/settings/settings.yaml @@ -106,6 +106,12 @@ entries: csrf: enabled: true class: "Flextype\\Entries\\Expressions\\CsrfExpression" + var: + enabled: true + class: "Flextype\\Entries\\Expressions\\VarExpression" + field: + enabled: true + class: "Flextype\\Entries\\Expressions\\FieldExpression" directives: expressions: enabled: true diff --git a/tests/src/flextype/core/Entries/Expressions/FieldExpressionTest.php b/tests/src/flextype/core/Entries/Expressions/FieldExpressionTest.php new file mode 100644 index 00000000..20e884a4 --- /dev/null +++ b/tests/src/flextype/core/Entries/Expressions/FieldExpressionTest.php @@ -0,0 +1,16 @@ +directory(PATH['project'] . '/entries')->create(); +}); + +afterEach(function (): void { + filesystem()->directory(PATH['project'] . '/entries')->delete(); +}); + +test('field expression', function () { + entries()->create('field', ['test' => '[[ field("id") ]]']); + expect(entries()->fetch('field')['test'])->toBe('field'); +}); \ No newline at end of file diff --git a/tests/src/flextype/core/Entries/Expressions/VarExpressionTest.php b/tests/src/flextype/core/Entries/Expressions/VarExpressionTest.php new file mode 100644 index 00000000..35a9d276 --- /dev/null +++ b/tests/src/flextype/core/Entries/Expressions/VarExpressionTest.php @@ -0,0 +1,16 @@ +directory(PATH['project'] . '/entries')->create(); +}); + +afterEach(function (): void { + filesystem()->directory(PATH['project'] . '/entries')->delete(); +}); + +test('var expression', function () { + entries()->create('var', ['vars' => ['foo' => 'Foo'], 'test' => '[[ var("foo") ]]']); + expect(entries()->fetch('var')['test'])->toBe('Foo'); +}); \ No newline at end of file