diff --git a/src/flextype/core/Vars.php b/src/flextype/core/Vars.php new file mode 100644 index 00000000..965a009a --- /dev/null +++ b/src/flextype/core/Vars.php @@ -0,0 +1,70 @@ +container()->get('expression'); - } -} - if (! function_exists('console')) { /** * Get Flextype Console Service. @@ -158,6 +148,16 @@ if (! function_exists('actions')) { } } +if (! function_exists('vars')) { + /** + * Get Flextype Vars Service. + */ + function vars() + { + return flextype()->container()->get('vars'); + } +} + if (! function_exists('csrf')) { /** * Get Flextype CSRF Service. diff --git a/tests/src/flextype/core/Parsers/Expressions/VarExpressionTest.php b/tests/src/flextype/core/Parsers/Expressions/VarExpressionTest.php new file mode 100644 index 00000000..2d131603 --- /dev/null +++ b/tests/src/flextype/core/Parsers/Expressions/VarExpressionTest.php @@ -0,0 +1,30 @@ +directory(FLEXTYPE_PATH_PROJECT . '/entries')->create(); +}); + +afterEach(function (): void { + filesystem()->directory(FLEXTYPE_PATH_PROJECT . '/entries')->delete(); +}); + +test('var expression', function () { + + entries()->create('var', [ + 'title' => 'Title', + + // Set + 'test-set-1' => '[% vars().set("test-set-1", "Foo!") %]', + + // Get + 'test-get-1' => '[[ vars().get("test-set-1") ]]', + 'test-get-2' => '[[ var("test-set-1") ]]', + ]); + + expect(entries()->fetch('var')['test-get-1'])->toBe('Foo!'); + expect(entries()->fetch('var')['test-get-2'])->toBe('Foo!'); +}); \ No newline at end of file diff --git a/tests/src/flextype/core/Parsers/Shortcodes/VarShortcodeTest.php b/tests/src/flextype/core/Parsers/Shortcodes/VarShortcodeTest.php index cdf0c4ed..3259bbc0 100644 --- a/tests/src/flextype/core/Parsers/Shortcodes/VarShortcodeTest.php +++ b/tests/src/flextype/core/Parsers/Shortcodes/VarShortcodeTest.php @@ -16,14 +16,37 @@ afterEach(function () { }); test('var shortcode', function () { - expect(entries()->create('foo', ['vars' => ['foo' => 'Foo'], 'title' => '(var:foo) (var get:foo)']))->toBeTrue(); - expect(entries()->fetch('foo')['title'])->toBe('Foo Foo'); + expect(entries()->create('foo', [ + 'title' => 'Title', + + // set + 'test-set-1' => '(var set:bar1 value:Bar1)(var:bar1)', + 'test-set-2' => '(var set:bar2)Bar2(/var)(var:bar2)', + 'test-set-3' => '(var set:level1.level2.level3)Multilevel(/var)(var:level1.level2.level3)', + 'test-set-4' => '(var set:_.foo)Foo(/var)(var:_.foo)', - expect(entries()->create('bar', ['title' => '(var set:bar value:Bar)(var:bar)']))->toBeTrue(); - expect(entries()->fetch('bar')['title'])->toBe('Bar'); + // get + 'test-get-1' => '(var:bar1)', + 'test-get-3' => '(var get:foo default:Foo)', + 'test-get-4' => '(var get:foo)Foo(/var)', + + // unset + 'test-unset-1' => '(var unset:bar1)(var:bar1)', - expect(entries()->create('zed', ['title' => '(var set:zed)Zed(/var)(var:zed)']))->toBeTrue(); - expect(entries()->fetch('zed')['title'])->toBe('Zed'); + // delete + 'test-delete-1' => '(var delete:bar1)(var:bar1)', + ]))->toBeTrue(); + + $foo = entries()->fetch('foo'); + + expect($foo['test-get-3'])->toBe('Foo'); + expect($foo['test-get-4'])->toBe('Foo'); + expect($foo['test-set-1'])->toBe('Bar1'); + expect($foo['test-set-2'])->toBe('Bar2'); + expect($foo['test-set-3'])->toBe('Multilevel'); + expect($foo['test-set-4'])->toBe('Foo'); + expect($foo['test-unset-1'])->toBe(''); + expect($foo['test-delete-1'])->toBe(''); }); test('var shortcode disabled', function () {