Sha256: 9cf5e2ca1ea5cff92941469756a6724c4f9ab645c6e9d5f51352577b06ca3c66

Contents?: true

Size: 1.35 KB

Versions: 1

Compression:

Stored size: 1.35 KB

Contents

require 'git_diff_parser'

module Danger
  class DangerLocalRules < Plugin
    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 == 'Dangerfile'
          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

    def rules
      YAML.load_file('.danger_local_rules.yml')
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
danger-local_rules-0.0.1 lib/local_rules/plugin.rb