Add concept of Liquid::Environment
#1815
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently, Liquid relies heavily on global state which makes it pretty inflexible. It's common to see code unsafely mutating global tags with
Liquid::Template.register_tag
. This PR offers a way to configure multiple sandboxed Liquid rendering environments.Liquid::Environment
In Liquid, an "Environment" is a scoped environment that encapsulates custom tags, filters, and other configurations. This allows you to define and isolate different sets of functionality for different contexts, avoiding global overrides that can lead to conflicts and unexpected behavior.
By using Worlds, you can:
Here's an example of how you can define and use Worlds in Liquid:
In this example,
RenderObjTag
is a custom tag that is only available within theuser_world
.Similarly, you can define another world for a different context, such as email templates: