Class: Liquidbook::TemplateAnalyzer

Inherits:
Object
  • Object
show all
Defined in:
lib/liquidbook/template_analyzer.rb

Overview

Analyzes Liquid templates by walking the AST to detect external variable dependencies.

Usage:

analyzer = TemplateAnalyzer.new(template_source)
analyzer.external_variables
# => [{ name: "title", properties: [{ lookups: [], filters: ["upcase"] }] },
#     { name: "product", properties: [{ lookups: ["name"], filters: ["money"] }] }]

Defined Under Namespace

Classes: Scope

Instance Method Summary collapse

Constructor Details

#initialize(source) ⇒ TemplateAnalyzer

Returns a new instance of TemplateAnalyzer.



12
13
14
# File 'lib/liquidbook/template_analyzer.rb', line 12

def initialize(source)
  @source = source
end

Instance Method Details

#external_variablesObject



16
17
18
19
20
21
22
23
24
25
# File 'lib/liquidbook/template_analyzer.rb', line 16

def external_variables
  clean_source = strip_schema(@source)
  template = Liquid::Template.parse(clean_source)
  vars = {}
  scope = Scope.new

  template.root.nodelist&.each { |node| walk(node, vars, scope) }

  vars.values
end

#section_variable?(var) ⇒ Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/liquidbook/template_analyzer.rb', line 27

def section_variable?(var)
  var[:name] == "section"
end