Class: Bundler::Spinel::Checker

Inherits:
Object
  • Object
show all
Defined in:
lib/bundler/spinel/checker.rb

Overview

The resolution-time gate. Reads a Gemfile.lock, resolves a verdict for every locked gem (from the ledger, or by probing on a cache miss), and decides pass/fail. This is what turns Spinel’s compile-time-or-never failure into a ‘bundle lock`-time failure.

Defined Under Namespace

Classes: Result

Instance Method Summary collapse

Constructor Details

#initialize(engine: Engine.new, ledger: Ledger.new) ⇒ Checker

Returns a new instance of Checker.



13
14
15
16
17
18
# File 'lib/bundler/spinel/checker.rb', line 13

def initialize(engine: Engine.new, ledger: Ledger.new)
  @engine = engine
  @ledger = ledger
  @fetcher = GemFetcher.new
  @probe = Probe.new(@engine, @ledger)
end

Instance Method Details

#check(lockfile = "Gemfile.lock", strict: false) ⇒ Object

strict: treat ‘risky` as a failure too.



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/bundler/spinel/checker.rb', line 21

def check(lockfile = "Gemfile.lock", strict: false)
  @engine.ensure!
  parsed = Bundler::LockfileParser.new(File.read(lockfile))
  lock_dir = File.dirname(File.expand_path(lockfile))
  rejected = []
  risky = []
  verdicts = []

  parsed.specs.each do |spec|
    v = verdict_for(spec, lock_dir)
    next unless v # skipped (unfetchable / TODO source)

    verdicts << v
    rejected << v if v.rejected?
    risky << v if v.risky?
  end

  ok = rejected.empty? && (!strict || risky.empty?)
  Result.new(verdict: ok, rejected: rejected, risky: risky, probed: verdicts)
end