lib/keep_up/updater.rb in keep_up-0.6.3 vs lib/keep_up/updater.rb in keep_up-0.7.0
- old
+ new
@@ -1,22 +1,25 @@
+# frozen_string_literal: true
+
require_relative 'null_filter'
module KeepUp
# Apply potential updates to a Gemfile.
class Updater
- attr_reader :bundle, :repository, :version_control, :filter
+ attr_reader :bundle, :version_control, :filter
- def initialize(bundle:, repository:, version_control:, filter: NullFilter.new)
+ def initialize(bundle:, version_control:,
+ filter: NullFilter.new, out: STDOUT)
@bundle = bundle
- @repository = repository
@version_control = version_control
@filter = filter
+ @out = out
end
def run
possible_updates.each do |update|
- result = bundle.apply_updated_dependency update
+ result = apply_updated_dependency update
if result
version_control.commit_changes result
else
version_control.revert_changes
end
@@ -24,9 +27,41 @@
end
def possible_updates
bundle.dependencies.
select { |dep| filter.call dep }.
- map { |dep| repository.updated_dependency_for dep }.compact.uniq
+ map { |dep| updated_dependency_for dep }.compact.uniq
+ end
+
+ private
+
+ 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
+
+ def report_intent(dependency)
+ @out.print "Updating #{dependency.name}"
+ end
+
+ def report_result(dependency, result)
+ if result
+ @out.puts " to #{result.version}"
+ else
+ @out.puts " to #{dependency.version}"
+ @out.puts 'Update failed'
+ end
+ end
+
+ 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
end
end