From e5c559dcb51d69a217b5335f7fd3c4a27d560cc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Ros?= Date: Thu, 14 Oct 2021 18:50:11 -0700 Subject: [PATCH] List TemplateContext value names (#380) --- Fluid.Tests/TemplateContextTests.cs | 14 ++++++++++++++ Fluid/TemplateContext.cs | 15 +++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/Fluid.Tests/TemplateContextTests.cs b/Fluid.Tests/TemplateContextTests.cs index 5e4b05f7..93e17f0f 100644 --- a/Fluid.Tests/TemplateContextTests.cs +++ b/Fluid.Tests/TemplateContextTests.cs @@ -110,6 +110,20 @@ public void SegmentAccessorCacheShouldVaryByType() Assert.Equal("model1", template.Render(new TemplateContext(model1, options))); } + [Fact] + public void CaptureShouldUpdateContext() + { + _parser.TryParse("{% capture greetings %}Hello {{text1}}{%endcapture%}", out var template, out var error); + + var context = new TemplateContext(); + context.SetValue("text1", "World"); + + template.Render(context); + + Assert.Equal("Hello World", context.GetValue("greetings").ToStringValue()); + Assert.Contains("greetings", context.ValueNames); + } + private class TestClass { public string Name { get; set; } diff --git a/Fluid/TemplateContext.cs b/Fluid/TemplateContext.cs index 525c1559..0cf26f9b 100644 --- a/Fluid/TemplateContext.cs +++ b/Fluid/TemplateContext.cs @@ -150,11 +150,26 @@ public void ReleaseScope() } } + /// + /// Gets the names of the values. + /// + public IEnumerable ValueNames => LocalScope.Properties; + + /// + /// Gets a value from the context. + /// + /// The name of the value. public FluidValue GetValue(string name) { return LocalScope.GetValue(name); } + /// + /// Sets a value on the context. + /// + /// The name of the value. + /// Teh value to set. + /// public TemplateContext SetValue(string name, FluidValue value) { LocalScope.SetValue(name, value);