Sha256: fdc4ede3edfdabb519c93076b39dd557c15cb85827d85536c5859b7f5607ce55

Contents?: true

Size: 1.27 KB

Versions: 4

Compression:

Stored size: 1.27 KB

Contents

# frozen_string_literal: true

require 'axr/scanner'
require 'axr/formatters/default'

module AxR
  class Runner
    DOT_RB = '.rb'

    attr_reader :target, :formatter, :exit_on_warnings

    def initialize(target = nil, formatter: AxR::Formatters::Default.new, exit_on_warnings: false)
      @target            = target
      @formatter         = formatter
      @exit_on_warnings = exit_on_warnings
    end

    alias exit_on_warnings? exit_on_warnings

    def invoke
      files_with_warnings = files_to_scan.each_with_object({}) do |file_path, issues|
        scan_result       = AxR::Scanner.new(source: File.open(file_path)).scan
        issues[file_path] = scan_result.warnings if scan_result.warnings.any?

        formatter.single_file(scan_result, file_path)
      end

      formatter.summary(files_to_scan, files_with_warnings)

      exit 1 if exit_on_warnings? && files_with_warnings.any?

      files_with_warnings
    end

    def files_to_scan
      @files_to_scan ||= scan_single_file? ? [target] : Dir.glob("#{target_dir}**/*#{DOT_RB}")
    end

    private

    def scan_single_file?
      return false unless target
      return false unless target.end_with?(DOT_RB)

      target
    end

    def target_dir
      return unless target

      "#{target}/"
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
axr-0.8.1 lib/axr/runner.rb
axr-0.8.0 lib/axr/runner.rb
axr-0.7.2 lib/axr/runner.rb
axr-0.7.1 lib/axr/runner.rb