Class: GemXray::Analyzers::VersionAnalyzer

Inherits:
Base
  • Object
show all
Defined in:
lib/gemxray/analyzers/version_analyzer.rb

Constant Summary

Constants inherited from Base

Base::AUTOLOADED_GEMS

Instance Method Summary collapse

Methods inherited from Base

#initialize

Constructor Details

This class inherits a constructor from GemXray::Analyzers::Base

Instance Method Details

#analyze(gems) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/gemxray/analyzers/version_analyzer.rb', line 6

def analyze(gems)
  ruby_version = gemfile_parser.ruby_version
  rails_version = gemfile_parser.rails_version(gems)
  default_gems = stdgems_client.default_gems_for(ruby_version)
  bundled_gems = stdgems_client.bundled_gems_for(ruby_version)

  gems.each_with_object([]) do |gem_entry, results|
    next if skipped?(gem_entry)

    if default_gems.include?(gem_entry.name) && !gem_entry.pinned_version?
      results << build_result(
        gem_entry: gem_entry,
        type: :version_redundant,
        severity: :warning,
        detail: "Ruby #{ruby_version} already ships this as a default gem"
      )
    elsif bundled_gems.include?(gem_entry.name) && !gem_entry.pinned_version?
      results << build_result(
        gem_entry: gem_entry,
        type: :version_redundant,
        severity: :warning,
        detail: "Ruby #{ruby_version} already ships this as a bundled gem"
      )
    end

    change = rails_knowledge.find_removal(gem_entry.name, rails_version)
    next unless change

    results << build_result(
      gem_entry: gem_entry,
      type: :version_redundant,
      severity: :warning,
      detail: "since Rails #{change.since}, #{change.reason}"
    )
  end
end