class Safedep::Runner

Constants

GEMFILE_LOCK_PATH
GEMFILE_PATH

Attributes

configuration[R]

Public Class Methods

new(configuration = Configuration.new) click to toggle source
# File lib/safedep/runner.rb, line 14
def initialize(configuration = Configuration.new)
  @configuration = configuration
end

Public Instance Methods

check_file_existence!(path, additional_message = nil) click to toggle source
# File lib/safedep/runner.rb, line 71
def check_file_existence!(path, additional_message = nil)
  return if File.exist?(path)
  message = "#{path} is not found."
  message << ' ' + additional_message if additional_message
  raise Error, message
end
dependencies() click to toggle source
# File lib/safedep/runner.rb, line 42
def dependencies
  @dependencies ||= gemfiles.map(&:dependencies).reduce(:+)
end
gemfile() click to toggle source
# File lib/safedep/runner.rb, line 57
def gemfile
  @gemfile ||= begin
    check_file_existence!(GEMFILE_PATH)
    Gemologist::Gemfile.new(GEMFILE_PATH)
  end
end
gemfile_lock() click to toggle source
# File lib/safedep/runner.rb, line 64
def gemfile_lock
  @gemfile_lock ||= begin
    check_file_existence!(GEMFILE_LOCK_PATH, 'Please run `bundle install`.')
    Safedep::GemfileLock.new(GEMFILE_LOCK_PATH)
  end
end
gemfiles() click to toggle source
# File lib/safedep/runner.rb, line 46
def gemfiles
  @gemfiles ||= [gemspec, gemfile].compact
end
gemspec() click to toggle source
# File lib/safedep/runner.rb, line 50
def gemspec
  @gemspec ||= begin
    path = Dir['*.gemspec'].first
    Gemologist::Gemspec.new(path) if path
  end
end
run() click to toggle source
# File lib/safedep/runner.rb, line 18
def run
  validate!

  dependencies.each do |dep|
    next if should_ignore?(dep)

    lockfile_dep = gemfile_lock.find_dependency(dep.name)

    unless lockfile_dep
      raise Error, "#{dep.name.inspect} definition is not found in #{gemfile_lock.path}. " \
                  'Please run `bundle install`.'
    end

    dep.version_specifiers = version_specifiers(lockfile_dep.version)
  end

  gemfiles.each(&:save)
end
should_ignore?(dependency) click to toggle source
# File lib/safedep/runner.rb, line 78
def should_ignore?(dependency)
  return true unless dependency.version_specifiers.empty?
  return true unless (dependency.groups & configuration.skipped_groups).empty?
  %i[git github path].any? { |key| dependency.options[key] }
end
validate!() click to toggle source
# File lib/safedep/runner.rb, line 37
def validate!
  gemfile_lock
  gemfile
end
version_specifiers(version) click to toggle source
# File lib/safedep/runner.rb, line 84
def version_specifiers(version)
  Policy::SemVer.version_specifiers(version)
end