class Railroader::TemplateParser
Constants
- KNOWN_TEMPLATE_EXTENSIONS
- TemplateFile
Attributes
tracker[R]
Public Class Methods
new(tracker, file_parser)
click to toggle source
# File lib/railroader/parsers/template_parser.rb, line 9 def initialize tracker, file_parser @tracker = tracker @file_parser = file_parser @file_parser.file_list[:templates] ||= [] end
parse_inline_erb(tracker, text)
click to toggle source
# File lib/railroader/parsers/template_parser.rb, line 99 def self.parse_inline_erb tracker, text fp = Railroader::FileParser.new(tracker, nil) tp = self.new(tracker, fp) src = tp.parse_erb '_inline_', text type = tp.erubis? ? :erubis : :erb return type, fp.parse_ruby(src, "_inline_") end
Public Instance Methods
erubis?()
click to toggle source
# File lib/railroader/parsers/template_parser.rb, line 71 def erubis? tracker.config.escape_html? or tracker.config.erubis? end
parse_erb(path, text)
click to toggle source
# File lib/railroader/parsers/template_parser.rb, line 47 def parse_erb path, text if tracker.config.escape_html? if tracker.options[:rails3] require 'railroader/parsers/rails3_erubis' Railroader::Rails3Erubis.new(text, :filename => path).src else require 'railroader/parsers/rails2_xss_plugin_erubis' Railroader::Rails2XSSPluginErubis.new(text, :filename => path).src end elsif tracker.config.erubis? require 'railroader/parsers/rails2_erubis' Railroader::ScannerErubis.new(text, :filename => path).src else require 'erb' src = if ERB.instance_method(:initialize).parameters.assoc(:key) # Ruby 2.6+ ERB.new(text, trim_mode: path).src else ERB.new(text, nil, path).src end src.sub!(/^#.*\n/, '') if Railroader::Scanner::RUBY_1_9 src end end
parse_haml(path, text)
click to toggle source
# File lib/railroader/parsers/template_parser.rb, line 76 def parse_haml path, text Railroader.load_railroader_dependency 'haml' Railroader.load_railroader_dependency 'sass' Haml::Engine.new(text, :filename => path, :escape_html => tracker.config.escape_html?).precompiled.gsub(/([^\\])\\n/, '\1') rescue Haml::Error => e tracker.error e, ["While compiling HAML in #{path}"] << e.backtrace nil rescue Sass::SyntaxError => e tracker.error e, "While processing #{path}" nil end
parse_slim(path, text)
click to toggle source
# File lib/railroader/parsers/template_parser.rb, line 91 def parse_slim path, text Railroader.load_railroader_dependency 'slim' Slim::Template.new(path, :disable_capture => true, :generator => Temple::Generators::RailsOutputBuffer) { text }.precompiled_template end
parse_template(path, text)
click to toggle source
# File lib/railroader/parsers/template_parser.rb, line 15 def parse_template path, text type = path.match(KNOWN_TEMPLATE_EXTENSIONS)[1].to_sym type = :erb if type == :rhtml name = template_path_to_name path Railroader.debug "Parsing #{path}" begin src = case type when :erb type = :erubis if erubis? parse_erb path, text when :haml parse_haml path, text when :slim parse_slim path, text else tracker.error "Unknown template type in #{path}" nil end if src and ast = @file_parser.parse_ruby(src, path) @file_parser.file_list[:templates] << TemplateFile.new(path, ast, name, type) end rescue Racc::ParseError => e tracker.error e, "Could not parse #{path}" rescue StandardError, LoadError => e tracker.error e.exception(e.message + "\nWhile processing #{path}"), e.backtrace end nil end