Sha256: f5ecadcf920976e4b11d340ca8603870adfabaa9f79808afd615135d7eda11f2
Contents?: true
Size: 1.41 KB
Versions: 11
Compression:
Stored size: 1.41 KB
Contents
require 'ripper' module ExpressTemplates module Template class Handler def self.call(template) new.call(template) end def call(template) # returns a string to be eval'd source = "(#{ExpressTemplates.compile(template)}).html_safe" warn_contains_logic(source) if ENV['NO_TEMPLATE_WARN'].nil? # pass the source code source end def warn_contains_logic(compiled_template) keywords = %w(if until unless case for do loop while) # array of conditional keywords tokens = [] if Ripper.lex(compiled_template).select do |element| # since it outputs an array [[line, col], type, token] element[1]==:on_kw # type must match ':on_kw' type (type is keyword) end.each { |match| tokens.push(match) if keywords.include? match[2] } # check if token is in given /keyword/ array, then push to new array match tokens.each do |first| warn "PAGE TEMPLATE INCLUDES #{first[2]} STATEMENT AT LINE #{first[0][0]}: #{first}\n#{compiled_template}" # warn on first occurence of conditional logic end end end end end end
Version data entries
11 entries across 11 versions & 1 rubygems