Class: Gem::Comparator::GemfileComparator
- Inherits:
-
Base
- Object
- Base
- Gem::Comparator::GemfileComparator
- Defined in:
- lib/rubygems/comparator/gemfile_comparator.rb
Overview
Gem::Comparator::GemfileComparator can compare dependencies between gem's Gemfiles based on the given Gem::Package objects
To compare Gemfiles it needs to extract gem packages to options
Instance Method Summary collapse
-
#compare(packages, report, options = {}) ⇒ Object
Compare Gemfiles using gem's
packages
and write the changes to thereport
. -
#initialize ⇒ GemfileComparator
constructor
A new instance of GemfileComparator.
Constructor Details
#initialize ⇒ GemfileComparator
Returns a new instance of GemfileComparator.
16 17 18 |
# File 'lib/rubygems/comparator/gemfile_comparator.rb', line 16 def initialize expect(:packages) end |
Instance Method Details
#compare(packages, report, options = {}) ⇒ Object
Compare Gemfiles using gem's packages
and write the changes to the report
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/rubygems/comparator/gemfile_comparator.rb', line 24 def compare(packages, report, = {}) info 'Checking Gemfiles for dependencies...' return report if [:param] && [:param] != 'gemfiles' @packages = packages all_same = true # Check Gemfiles from older versions to newer packages.each_with_index do |pkg, index| unpacked_gem_dirs[@packages[index].spec.version] = extract_gem(pkg, [:output]) next if index == 0 prev_gemfile = File.join(unpacked_gem_dirs[@packages[index-1].spec.version], 'Gemfile') curr_gemfile = File.join(unpacked_gem_dirs[@packages[index].spec.version], 'Gemfile') vers = "#{@packages[index-1].spec.version}->#{@packages[index].spec.version}" report['gemfiles'][vers].set_header "#{Rainbow(packages[index-1].spec.version).cyan}->" + "#{Rainbow(packages[index].spec.version).cyan}:" added, deleted, updated = compare_gemfiles(prev_gemfile, curr_gemfile) report['gemfiles'][vers]['added'].section do set_header '* Added:' puts added.map { |x| "#{x.name} #{x.requirements_list} (#{x.type})" } unless added.empty? end report['gemfiles'][vers]['deleted'].section do set_header '* Deleted' puts deleted.map { |x| "#{x.name} #{x.requirements_list} (#{x.type})" } unless deleted.empty? end report['gemfiles'][vers]['updated'].section do set_header '* Updated' puts updated unless updated.empty? end all_same = false if !added.empty? || !deleted.empty? end if all_same && [:log_all] report['gemfiles'].set_header "#{same} Gemfiles:" gemfile = File.join(unpacked_gem_dirs[@packages[1].spec.version], 'Gemfile') if File.exist? gemfile deps = gemfile_deps(gemfile) deps = '[]' if deps.empty? report['gemfiles'] << deps else report['gemfiles'] << 'No Gemfiles' end elsif !all_same report['gemfiles'].set_header "#{different} Gemfile dependencies" end report end |