Class: GemCP::Tools::CheckCompatibility

Inherits:
Base
  • Object
show all
Defined in:
lib/gemcp/tools/check_compatibility.rb

Overview

Check if two gems can coexist by comparing their dependency constraints. Detects hard conflicts where declared requirements are mutually exclusive.

Instance Method Summary collapse

Methods inherited from Base

#initialize

Constructor Details

This class inherits a constructor from GemCP::Tools::Base

Instance Method Details

#call(gem_a:, version_a:, gem_b:, version_b:) ⇒ Hash

Returns MCP response.

Parameters:

  • gem_a (String)

    first gem name

  • version_a (String)

    first gem version

  • gem_b (String)

    second gem name

  • version_b (String)

    second gem version

Returns:

  • (Hash)

    MCP response



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/gemcp/tools/check_compatibility.rb', line 25

def call(gem_a:, version_a:, gem_b:, version_b:)
  result = with_errors do
    meta_a = client.version(gem_a, version_a)
    meta_b = client.version(gem_b, version_b)

    deps_a = normalize_deps(meta_a)
    deps_b = normalize_deps(meta_b)

    shared_deps = deps_a.keys & deps_b.keys
    conflicts = find_conflicts(shared_deps, deps_a, deps_b)

    {
      gem_a: { name: gem_a, version: version_a },
      gem_b: { name: gem_b, version: version_b },
      compatible: conflicts.empty?,
      shared_dependencies: shared_deps.length,
      conflicts: conflicts
    }
  end
  render(result)
end