class KeepUp::Updater

Apply potential updates to a Gemfile.

Attributes

bundle[R]
filter[R]
version_control[R]

Public Class Methods

new(bundle:, version_control:, filter: NullFilter.new, out: $stdout) click to toggle source
# File lib/keep_up/updater.rb, line 10
def initialize(bundle:, version_control:,
               filter: NullFilter.new, out: $stdout)
  @bundle = bundle
  @version_control = version_control
  @filter = filter
  @out = out
end

Public Instance Methods

possible_updates() click to toggle source
# File lib/keep_up/updater.rb, line 29
def possible_updates
  bundle.dependencies
    .select { |dep| filter.call dep }
    .map { |dep| updated_dependency_for dep }.compact.uniq
end
run() click to toggle source
# File lib/keep_up/updater.rb, line 18
def run
  possible_updates.each do |update|
    result = apply_updated_dependency update
    if result
      version_control.commit_changes result
    else
      version_control.revert_changes
    end
  end
end

Private Instance Methods

apply_updated_dependency(dependency) click to toggle source
# File lib/keep_up/updater.rb, line 37
def apply_updated_dependency(dependency)
  report_intent dependency
  bundle.update_gemfile_contents(dependency)
  bundle.update_gemspec_contents(dependency)
  result = bundle.update_lockfile(dependency)
  report_result dependency, result
  result
end
report_intent(dependency) click to toggle source
# File lib/keep_up/updater.rb, line 46
def report_intent(dependency)
  @out.print "Updating #{dependency.name}"
end
report_result(dependency, result) click to toggle source
# File lib/keep_up/updater.rb, line 50
def report_result(dependency, result)
  if result
    @out.puts " to #{result.version}"
  else
    @out.puts " to #{dependency.version}"
    @out.puts "Update failed"
  end
end
updated_dependency_for(dependency) click to toggle source
# File lib/keep_up/updater.rb, line 59
def updated_dependency_for(dependency)
  locked_version = dependency.locked_version
  newest_version = dependency.newest_version
  return unless newest_version > locked_version

  Gem::Specification.new(dependency.name, newest_version)
end