Closed ianks closed 3 months ago
World isn't the right title here, It's more like Session or Environment. But the concept is sound
World isn't the right title here, It's more like Session or Environment. But the concept is sound
Agree, renamed to Environment
in https://github.com/Shopify/liquid/pull/1815/commits/58cef46eb8903dd5a06d1659ed8718ec8c3ac272
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: