class ERBLint::Linters::ErbSafety

Detect unsafe ruby interpolations into javascript.

Public Class Methods

new(file_loader, config) click to toggle source
Calls superclass method ERBLint::Linter::new
# File lib/erb_lint/linters/erb_safety.rb, line 18
def initialize(file_loader, config)
  super
  @config_filename = @config.better_html_config
end

Public Instance Methods

run(processed_source) click to toggle source
# File lib/erb_lint/linters/erb_safety.rb, line 23
def run(processed_source)
  testers_for(processed_source.parser).each do |tester|
    tester.validate
    tester.errors.each do |error|
      add_offense(
        error.location,
        error.message
      )
    end
  end
end

Private Instance Methods

better_html_config() click to toggle source
# File lib/erb_lint/linters/erb_safety.rb, line 52
def better_html_config
  @better_html_config ||= begin
    config_hash =
      if @config_filename.nil?
        {}
      else
        @file_loader.yaml(@config_filename).symbolize_keys
      end
    BetterHtml::Config.new(**config_hash)
  end
end
tester_classes() click to toggle source
# File lib/erb_lint/linters/erb_safety.rb, line 37
def tester_classes
  [
    BetterHtml::TestHelper::SafeErb::NoStatements,
    BetterHtml::TestHelper::SafeErb::AllowedScriptType,
    BetterHtml::TestHelper::SafeErb::TagInterpolation,
    BetterHtml::TestHelper::SafeErb::ScriptInterpolation,
  ]
end
testers_for(parser) click to toggle source
# File lib/erb_lint/linters/erb_safety.rb, line 46
def testers_for(parser)
  tester_classes.map do |tester_klass|
    tester_klass.new(parser, config: better_html_config)
  end
end