Skip to content

Commit c070a55

Browse files
authored
Merge pull request #130 from jaime-amate/feat/add-remove-tag-method
feat: add UnregisterTag engine method
2 parents f862d1e + 1292ca6 commit c070a55

3 files changed

Lines changed: 30 additions & 0 deletions

File tree

engine.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,3 +173,11 @@ func (e *Engine) ParseTemplateAndCache(source []byte, path string, line int) (*T
173173
func (e *Engine) SetAutoEscapeReplacer(replacer render.Replacer) {
174174
e.cfg.SetAutoEscapeReplacer(replacer)
175175
}
176+
177+
// UnregisterTag removes the named tag definition from the engine's configuration.
178+
// After calling UnregisterTag the tag will no longer be recognized by subsequent
179+
// parsing or rendering operations. The call is idempotent — unregistering a tag
180+
// that is not registered is a no-op.
181+
func (e *Engine) UnregisterTag(name string) {
182+
e.cfg.UnregisterTag(name)
183+
}

engine_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"strings"
1010
"testing"
1111

12+
"github.com/osteele/liquid/render"
1213
"github.com/stretchr/testify/require"
1314
)
1415

@@ -183,3 +184,19 @@ func Test_template_store(t *testing.T) {
183184
out, _ := engine.ParseAndRenderString(string(template), params)
184185
require.Equal(t, "Message Text: filename from: template.liquid.", out)
185186
}
187+
188+
func TestEngine_UnregisterTag(t *testing.T) {
189+
engine := NewEngine()
190+
engine.RegisterTag("echo", func(c render.Context) (string, error) {
191+
return c.TagArgs(), nil
192+
})
193+
source := `{% echo hello world %}`
194+
195+
_, err := engine.ParseAndRenderString(source, emptyBindings)
196+
require.NoError(t, err)
197+
198+
engine.UnregisterTag("echo")
199+
200+
_, err = engine.ParseAndRenderString(source, emptyBindings)
201+
require.Error(t, err)
202+
}

render/tags.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,8 @@ func (c *Config) FindTagDefinition(name string) (TagCompiler, bool) {
1818
td, ok := c.tags[name]
1919
return td, ok
2020
}
21+
22+
// UnregisterTag removes a tag definition.
23+
func (c *Config) UnregisterTag(name string) {
24+
delete(c.tags, name)
25+
}

0 commit comments

Comments
 (0)