Class: Gemcompat::CompatibilityChecker
- Inherits:
-
Object
- Object
- Gemcompat::CompatibilityChecker
- Defined in:
- lib/gemcompat/compatibility_checker.rb
Overview
Check a lockfile for compatibility
Constant Summary collapse
- DATA_DIR =
Pathname.new(__FILE__).join('../../../data')
Instance Attribute Summary collapse
-
#found_incompatibilities ⇒ Object
readonly
Returns the value of attribute found_incompatibilities.
-
#package_incompatibilities ⇒ Object
readonly
Returns the value of attribute package_incompatibilities.
-
#package_name ⇒ Object
readonly
Returns the value of attribute package_name.
-
#target_version ⇒ Object
readonly
Returns the value of attribute target_version.
Instance Method Summary collapse
- #incompatibility_datafile(package_name:, target_version:) ⇒ Object
-
#initialize(package_name:, target_version:) ⇒ CompatibilityChecker
constructor
A new instance of CompatibilityChecker.
- #load_package_data!(package_name:, target_version:) ⇒ Object
- #package_version_to_path_part(version) ⇒ Object
- #parse_lockfile!(lockfile:) ⇒ Object
- #report(found_incompatibilities: @found_incompatibilities) ⇒ Object
- #welcome(package_name:, target_version:) ⇒ Object
Constructor Details
#initialize(package_name:, target_version:) ⇒ CompatibilityChecker
Returns a new instance of CompatibilityChecker.
9 10 11 12 13 |
# File 'lib/gemcompat/compatibility_checker.rb', line 9 def initialize(package_name:, target_version:) @package_name = package_name @target_version = target_version load_package_data!(package_name: package_name, target_version: target_version) end |
Instance Attribute Details
#found_incompatibilities ⇒ Object (readonly)
Returns the value of attribute found_incompatibilities.
6 7 8 |
# File 'lib/gemcompat/compatibility_checker.rb', line 6 def found_incompatibilities @found_incompatibilities end |
#package_incompatibilities ⇒ Object (readonly)
Returns the value of attribute package_incompatibilities.
6 7 8 |
# File 'lib/gemcompat/compatibility_checker.rb', line 6 def package_incompatibilities @package_incompatibilities end |
#package_name ⇒ Object (readonly)
Returns the value of attribute package_name.
6 7 8 |
# File 'lib/gemcompat/compatibility_checker.rb', line 6 def package_name @package_name end |
#target_version ⇒ Object (readonly)
Returns the value of attribute target_version.
6 7 8 |
# File 'lib/gemcompat/compatibility_checker.rb', line 6 def target_version @target_version end |
Instance Method Details
#incompatibility_datafile(package_name:, target_version:) ⇒ Object
23 24 25 |
# File 'lib/gemcompat/compatibility_checker.rb', line 23 def incompatibility_datafile(package_name:, target_version:) DATA_DIR.join("#{package_name}/#{package_version_to_path_part(target_version)}.yaml") end |
#load_package_data!(package_name:, target_version:) ⇒ Object
27 28 29 30 31 32 33 34 35 |
# File 'lib/gemcompat/compatibility_checker.rb', line 27 def load_package_data!(package_name:, target_version:) path = incompatibility_datafile(package_name: package_name, target_version: target_version) @package_incompatibilities = YAML.load_file(path).then do |data| data.transform_values { |entry| Gem::Version.new(entry[:first_compatible_version]) } end rescue Errno::ENOENT puts "#{package_name} v#{target_version} not supported yet" exit(1) end |
#package_version_to_path_part(version) ⇒ Object
19 20 21 |
# File 'lib/gemcompat/compatibility_checker.rb', line 19 def package_version_to_path_part(version) version&.gsub('.', '_') end |
#parse_lockfile!(lockfile:) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/gemcompat/compatibility_checker.rb', line 49 def parse_lockfile!(lockfile:) @found_incompatibilities = [] Bundler::LockfileParser.new(lockfile).specs.each do |spec| next unless (required_version = package_incompatibilities[spec.name]) && required_version > spec.version found_incompatibilities << { name: spec.name, using_version: spec.version.to_s, required_version: required_version.to_s, } end end |
#report(found_incompatibilities: @found_incompatibilities) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/gemcompat/compatibility_checker.rb', line 37 def report(found_incompatibilities: @found_incompatibilities) welcome(package_name: package_name, target_version: target_version) if found_incompatibilities.empty? puts 'No incompatibilities found' else found_incompatibilities.each do |i| puts "#{i[:name]}: Using #{i[:using_version]}. Upgrade to #{i[:required_version]}" end end end |
#welcome(package_name:, target_version:) ⇒ Object
15 16 17 |
# File 'lib/gemcompat/compatibility_checker.rb', line 15 def welcome(package_name:, target_version:) puts "Checking for undocumented incompatibilities with #{package_name} v#{target_version}\n\n" end |