class Liquid::ParseTreeVisitor
Public Class Methods
for(node, callbacks = Hash.new(proc {}))
click to toggle source
# 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
new(node, callbacks)
click to toggle source
# File lib/liquid/parse_tree_visitor.rb, line 13 def initialize(node, callbacks) @node = node @callbacks = callbacks end
Public Instance Methods
add_callback_for(*classes) { |node| ... }
click to toggle source
# 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)
click to toggle source
# 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
Protected Instance Methods
children()
click to toggle source
# File lib/liquid/parse_tree_visitor.rb, line 38 def children @node.respond_to?(:nodelist) ? Array(@node.nodelist) : [] end