Class: GemXray::Scanner

Inherits:
Object
  • Object
show all
Defined in:
lib/gemxray/scanner.rb

Constant Summary collapse

ANALYZERS =
{
  unused: GemXray::Analyzers::UnusedAnalyzer,
  redundant: GemXray::Analyzers::RedundantAnalyzer,
  version: GemXray::Analyzers::VersionAnalyzer,
  license: GemXray::Analyzers::LicenseAnalyzer,
  archive: GemXray::Analyzers::ArchiveAnalyzer
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ Scanner

Returns a new instance of Scanner.



13
14
15
16
# File 'lib/gemxray/scanner.rb', line 13

def initialize(config)
  @config = config
  @gemfile_parser = GemfileParser.new(config.gemfile_path)
end

Instance Method Details

#runObject



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/gemxray/scanner.rb', line 18

def run
  gems = gemfile_parser.parse
  results = build_analyzers.flat_map { |analyzer| analyzer.analyze(gems) }
  merged_results = merge_results(results)

  merged_results.each do |result|
    override = config.override_severity_for(result.gem_name)
    result.severity = override if override
  end

  filtered = merged_results.select { |result| config.severity_in_scope?(result.severity) }
  sorted = filtered.sort_by { |result| [result.severity_order, result.gem_name] }

  Report.new(
    version: GemXray::VERSION,
    ruby_version: gemfile_parser.ruby_version,
    rails_version: gemfile_parser.rails_version(gems),
    scanned_at: Time.now.iso8601,
    results: sorted
  )
end