lib/keep_up/bundle.rb in keep_up-0.4.0 vs lib/keep_up/bundle.rb in keep_up-0.5.0
- old
+ new
@@ -9,40 +9,49 @@
def initialize(definition_builder:)
@definition_builder = definition_builder
end
def direct_dependencies
- (gemspec_dependencies + gemfile_dependencies).map do |dep|
- spec = locked_spec dep
- next unless spec
- Dependency.new(name: dep.name,
- version: dep.requirements_list.first,
- locked_version: spec.version)
- end.compact
+ gemspec_dependencies + gemfile_dependencies
end
def apply_updated_dependency(dependency)
puts "Updating #{dependency.name} to #{dependency.version}"
update_gemfile_contents(dependency)
update_gemspec_contents(dependency)
update_lockfile(dependency)
end
+ def check?
+ bundler_definition.to_lock == File.read('Gemfile.lock')
+ end
+
private
attr_reader :definition_builder
def gemfile_dependencies
- bundler_lockfile.dependencies
+ build_dependencies bundler_lockfile.dependencies
end
def gemspec_dependencies
- gemspec_source = bundler_lockfile.sources.find { |it| it.is_a? Bundler::Source::Gemspec }
+ gemspec_source = bundler_lockfile.sources.
+ find { |it| it.is_a? Bundler::Source::Gemspec }
return [] unless gemspec_source
- gemspec_source.gemspec.dependencies
+ build_dependencies gemspec_source.gemspec.dependencies
end
+ def build_dependencies(deps)
+ deps.map { |dep| build_dependency dep }.compact
+ end
+
+ def build_dependency(dep)
+ spec = locked_spec dep
+ return unless spec
+ Dependency.new(dependency: dep, locked_spec: spec)
+ end
+
def locked_spec(dep)
bundler_lockfile.specs.find { |it| it.name == dep.name }
end
def bundler_lockfile
@@ -51,25 +60,31 @@
def bundler_definition
@bundler_definition ||= definition_builder.build(false)
end
- def update_gemfile_contents(dependency)
- current_dependency = gemfile_dependencies.find { |it| it.name == dependency.name }
- return if !current_dependency
- return if current_dependency.matches_spec?(dependency)
+ def update_gemfile_contents(update)
+ current_dependency = gemfile_dependencies.find { |it| it.name == update.name }
+ return unless current_dependency
+ return if current_dependency.matches_spec?(update)
+
+ update = current_dependency.generalize_specification(update)
+
contents = File.read 'Gemfile'
- updated_contents = GemfileFilter.apply(contents, dependency)
+ updated_contents = GemfileFilter.apply(contents, update)
File.write 'Gemfile', updated_contents
end
- def update_gemspec_contents(dependency)
- current_dependency = gemspec_dependencies.find { |it| it.name == dependency.name }
- return if !current_dependency
- return if current_dependency.matches_spec?(dependency)
+ def update_gemspec_contents(update)
+ current_dependency = gemspec_dependencies.find { |it| it.name == update.name }
+ return unless current_dependency
+ return if current_dependency.matches_spec?(update)
+
+ update = current_dependency.generalize_specification(update)
+
contents = File.read gemspec_name
- updated_contents = GemspecFilter.apply(contents, dependency)
+ updated_contents = GemspecFilter.apply(contents, update)
File.write gemspec_name, updated_contents
end
def gemspec_name
@gemspec_name ||= begin
@@ -81,12 +96,12 @@
raise '???'
end
end
end
- def update_lockfile(dependency)
+ def update_lockfile(update)
Bundler.clear_gemspec_cache
- definition_builder.build(gems: [dependency.name]).lock('Gemfile.lock')
+ definition_builder.build(gems: [update.name]).lock('Gemfile.lock')
true
rescue Bundler::VersionConflict
puts 'Update failed'
false
end