Class: Liquid::ParseTreeVisitor
- Inherits:
-
Object
- Object
- Liquid::ParseTreeVisitor
show all
- Defined in:
- lib/liquid/parse_tree_visitor.rb
Direct Known Subclasses
Assign::ParseTreeVisitor, Case::ParseTreeVisitor, Condition::ParseTreeVisitor, Cycle::ParseTreeVisitor, Echo::ParseTreeVisitor, For::ParseTreeVisitor, If::ParseTreeVisitor, Include::ParseTreeVisitor, RangeLookup::ParseTreeVisitor, Render::ParseTreeVisitor, TableRow::ParseTreeVisitor, Variable::ParseTreeVisitor, VariableLookup::ParseTreeVisitor
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of ParseTreeVisitor.
13
14
15
16
|
# File 'lib/liquid/parse_tree_visitor.rb', line 13
def initialize(node, callbacks)
@node = node
@callbacks = callbacks
end
|
Class Method Details
.for(node, callbacks = Hash.new(proc {})) ⇒ Object
5
6
7
8
9
10
11
|
# File 'lib/liquid/parse_tree_visitor.rb', line 5
def self.for(node, callbacks = Hash.new(proc {}))
if defined?(node.class::ParseTreeVisitor)
node.class::ParseTreeVisitor
else
self
end.new(node, callbacks)
end
|
Instance Method Details
#add_callback_for(*classes, &block) ⇒ Object
18
19
20
21
22
23
24
|
# File 'lib/liquid/parse_tree_visitor.rb', line 18
def add_callback_for(*classes, &block)
callback = block
callback = ->(node, _) { yield node } if block.arity.abs == 1
callback = ->(_, _) { yield } if block.arity.zero?
classes.each { |klass| @callbacks[klass] = callback }
self
end
|
#visit(context = nil) ⇒ Object
26
27
28
29
30
31
32
33
34
|
# File 'lib/liquid/parse_tree_visitor.rb', line 26
def visit(context = nil)
children.map do |node|
item, new_context = @callbacks[node.class].call(node, context)
[
item,
ParseTreeVisitor.for(node, @callbacks).visit(new_context || context),
]
end
end
|