Class: Package::Audit::Ruby::BundlerSpecs

Inherits:
Object
  • Object
show all
Defined in:
lib/package/audit/ruby/bundler_specs.rb

Class Method Summary collapse

Class Method Details

.all(dir) ⇒ Object



11
12
13
14
15
16
17
# File 'lib/package/audit/ruby/bundler_specs.rb', line 11

def self.all(dir)
  specs = Bundler.with_unbundled_env do
    ENV['BUNDLE_GEMFILE'] = "#{dir}/Gemfile"
    Bundler.ui.silence { Bundler.definition.resolve }
  end
  filter_local_dependencies(specs)
end

.filter_local_dependencies(specs) ⇒ Object



35
36
37
# File 'lib/package/audit/ruby/bundler_specs.rb', line 35

def self.filter_local_dependencies(specs)
  specs.reject { |spec| local_dependency?(spec) }
end

.gemfile(dir) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/package/audit/ruby/bundler_specs.rb', line 19

def self.gemfile(dir)
  current_dependencies = Bundler.with_unbundled_env do
    ENV['BUNDLE_GEMFILE'] = "#{dir}/Gemfile"
    Bundler.ui.level = 'error'
    Bundler.reset!
    Bundler.ui.silence do
      Bundler.load.dependencies.to_h { |dep| [dep.name, dep] }
    end
  end

  gemfile_specs, = all(dir).partition do |spec|
    current_dependencies.key? spec.name
  end
  gemfile_specs
end

.local_dependency?(spec) ⇒ Boolean

Returns:

  • (Boolean)


39
40
41
42
43
44
45
46
# File 'lib/package/audit/ruby/bundler_specs.rb', line 39

def self.local_dependency?(spec)
  # Check if the gem has a local source (path or git with local path)
  source = spec.source
  return true if source.is_a?(Bundler::Source::Path)
  return true if source.is_a?(Bundler::Source::Git) && source.uri.start_with?('file:', './', '../')

  false
end