class Temple::Filters::StaticAnalyzer

Convert [:dynamic, code] to [:static, text] if code is static Ruby expression.

Public Instance Methods

call(exp) click to toggle source
Calls superclass method
# File lib/temple/filters/static_analyzer.rb, line 6
def call(exp)
  # Optimize only when Ripper is available.
  if ::Temple::StaticAnalyzer.available?
    super
  else
    exp
  end
end
on_dynamic(code) click to toggle source
# File lib/temple/filters/static_analyzer.rb, line 15
def on_dynamic(code)
  if ::Temple::StaticAnalyzer.static?(code)
    exp = [:static, eval(code).to_s]

    newlines = code.count("\n")
    if newlines == 0
      exp
    else
      [:multi, exp, *newlines.times.map { [:newline] }]
    end
  else
    [:dynamic, code]
  end
end