class Danger::DangerLocalRules

Attributes

rules_file[RW]

Public Instance Methods

check() click to toggle source
# File lib/local_rules/plugin.rb, line 12
def check
  diff = github.pr_diff
  return if diff.nil?

  failure_rules = rules['failure']
  warning_rules = rules['warning']
  return if failure_rules.nil? && warning_rules.nil?

  if diff.match(Regexp.union(failure_rules.keys + warning_rules.keys))
    regexp_to_fail = Regexp.union(failure_rules.keys)
    regexp_to_warn = Regexp.union(warning_rules.keys)

    GitDiffParser.parse(diff).each do |changed_file|
      next if changed_file.file == rules_file
      changed_file.changed_lines.each do |changed_line|
        content = changed_line.content
        # Only checks added contents
        next unless content.start_with?('+')

        if (content.match(regexp_to_fail))
          content.match(regexp_to_fail) do |data|
            fail(failure_rules[data[0]], file: changed_file.file, line: changed_line.number)
          end
        end

        if (content.match(regexp_to_warn))
          content.match(regexp_to_warn) do |data|
            warn(warning_rules[data[0]], file: changed_file.file, line: changed_line.number)
          end
        end
      end
    end
  end
end

Private Instance Methods

rules() click to toggle source
# File lib/local_rules/plugin.rb, line 49
def rules
  YAML.load_file(rules_file)
end