/
lockfile.rb
40 lines (32 loc) · 1.06 KB
/
lockfile.rb
1
2
3
4
5
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
# frozen_string_literal: true
module RuboCop
# Encapsulation of a lockfile for use when checking for gems.
# Does not actually resolve gems, just parses the lockfile.
# @api private
class Lockfile
# Gems that the bundle depends on
def dependencies
return [] unless parser
parser.dependencies.values
end
# All activated gems, including transitive dependencies
def gems
return [] unless parser
# `Bundler::LockfileParser` returns `Bundler::LazySpecification` objects
# which are not resolved, so extract the dependencies from them
parser.dependencies.values.concat(parser.specs.flat_map(&:dependencies))
end
def includes_gem?(name)
gems.any? { |gem| gem.name == name }
end
private
def parser
return unless defined?(Bundler) && Bundler.default_lockfile
return @parser if defined?(@parser)
lockfile = Bundler.read_file(Bundler.default_lockfile)
@parser = lockfile ? Bundler::LockfileParser.new(lockfile) : nil
rescue Bundler::BundlerError
nil
end
end
end