1
0
mirror of https://github.com/danog/liquid.git synced 2024-11-27 08:44:40 +01:00
liquid/expressions/context.go

48 lines
1.1 KiB
Go
Raw Normal View History

2017-06-26 21:36:05 +02:00
package expressions
// Context is the expression evaluation context. It maps variables names to values.
type Context interface {
Get(string) interface{}
Set(string, interface{})
2017-07-02 05:52:23 +02:00
Filters() *filterDictionary
2017-06-26 21:36:05 +02:00
}
type context struct {
bindings map[string]interface{}
2017-06-30 22:13:18 +02:00
Settings
}
// Settings holds configuration information for expression interpretation.
2017-06-30 22:13:18 +02:00
type Settings struct {
2017-07-02 05:52:23 +02:00
filters *filterDictionary
2017-06-30 22:13:18 +02:00
}
// NewSettings creates a new Settings.
2017-06-30 22:13:18 +02:00
func NewSettings() Settings {
2017-07-02 05:52:23 +02:00
return Settings{newFilterDictionary()}
2017-06-30 22:13:18 +02:00
}
// AddFilter adds a filter function to settings.
2017-06-30 22:13:18 +02:00
func (s Settings) AddFilter(name string, fn interface{}) {
2017-07-02 05:52:23 +02:00
s.filters.addFilter(name, fn)
2017-06-26 21:36:05 +02:00
}
2017-06-27 19:36:38 +02:00
// NewContext makes a new expression evaluation context.
2017-06-30 22:13:18 +02:00
func NewContext(vars map[string]interface{}, s Settings) Context {
return &context{vars, s}
2017-06-30 22:13:18 +02:00
}
2017-07-02 05:52:23 +02:00
func (c *context) Filters() *filterDictionary {
2017-06-30 22:13:18 +02:00
return c.filters
2017-06-26 21:36:05 +02:00
}
2017-06-27 19:36:38 +02:00
// Get looks up a variable value in the expression context.
2017-06-26 21:36:05 +02:00
func (c *context) Get(name string) interface{} {
return c.bindings[name]
2017-06-26 21:36:05 +02:00
}
2017-06-27 19:36:38 +02:00
// Set sets a variable value in the expression context.
2017-06-26 21:36:05 +02:00
func (c *context) Set(name string, value interface{}) {
c.bindings[name] = value
2017-06-26 21:36:05 +02:00
}