Class: Dependabot::Conda::UpdateChecker::RequirementTranslator

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/dependabot/conda/update_checker/requirement_translator.rb

Class Method Summary collapse

Class Method Details

.conda_to_pip(conda_requirement) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/dependabot/conda/update_checker/requirement_translator.rb', line 14

def self.conda_to_pip(conda_requirement)
  return nil unless conda_requirement

  # Handle different conda requirement patterns
  case conda_requirement
  when /^=([0-9]+(?:\.[0-9]+)*)\.\*$/
    # Handle wildcards: =1.21.* -> >=1.21.0,<1.22.0
    convert_wildcard_requirement(conda_requirement)
  when /^=([0-9]+(?:\.[0-9]+)*)$/
    # Handle exact equality: =1.2.3 -> ==1.2.3
    conda_requirement.gsub(/^=/, "==")
  when /^(>=|>|<=|<|!=)(.+)$/
    # Handle comparison operators: >=1.2.0 -> >=1.2.0 (no change)
    conda_requirement
  when /^([0-9]+(?:\.[0-9]+)*)$/
    # Handle bare version: 1.2.3 -> ==1.2.3
    "==#{conda_requirement}"
  else
    # Handle complex constraints: >=3.8,<3.11 -> >=3.8,<3.11 (no change)
    conda_requirement
  end
end

.convert_wildcard_requirement(wildcard_requirement) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/dependabot/conda/update_checker/requirement_translator.rb', line 38

def self.convert_wildcard_requirement(wildcard_requirement)
  # Extract version pattern: =1.21.* -> 1.21
  version_match = wildcard_requirement.match(/^=([0-9]+(?:\.[0-9]+)*)\.\*$/)
  return wildcard_requirement unless version_match

  base_version = version_match[1]
  version_parts = T.must(base_version).split(".")

  # Calculate next version for upper bound
  next_version_parts = version_parts.dup
  next_version_parts[-1] = (next_version_parts[-1].to_i + 1).to_s
  next_version = next_version_parts.join(".")

  # Return range: >=1.21.0,<1.22.0
  ">=#{base_version}.0,<#{next_version}.0"
end