class Dependabot::Gradle::Requirement

Constants

PATTERN
PATTERN_RAW

Public Class Methods

new(*requirements) click to toggle source
Calls superclass method
# File lib/dependabot/gradle/requirement.rb, line 34
def initialize(*requirements)
  requirements = requirements.flatten.flat_map do |req_string|
    convert_java_constraint_to_ruby_constraint(req_string)
  end

  super(requirements)
end
parse(obj) click to toggle source
# File lib/dependabot/gradle/requirement.rb, line 15
def self.parse(obj)
  return ["=", Gradle::Version.new(obj.to_s)] if obj.is_a?(Gem::Version)

  unless (matches = PATTERN.match(obj.to_s))
    msg = "Illformed requirement [#{obj.inspect}]"
    raise BadRequirementError, msg
  end

  return DefaultRequirement if matches[1] == ">=" && matches[2] == "0"

  [matches[1] || "=", Gradle::Version.new(matches[2])]
end
requirements_array(requirement_string) click to toggle source
# File lib/dependabot/gradle/requirement.rb, line 28
def self.requirements_array(requirement_string)
  split_java_requirement(requirement_string).map do |str|
    new(str)
  end
end

Private Class Methods

split_java_requirement(req_string) click to toggle source
# File lib/dependabot/gradle/requirement.rb, line 49
def self.split_java_requirement(req_string)
  return [req_string] unless req_string.match?(Maven::Requirement::OR_SYNTAX)

  req_string.split(Maven::Requirement::OR_SYNTAX).flat_map do |str|
    next str if str.start_with?("(", "[")

    exacts, *rest = str.split(/,(?=\[|\()/)
    [*exacts.split(","), *rest]
  end
end

Public Instance Methods

satisfied_by?(version) click to toggle source
Calls superclass method
# File lib/dependabot/gradle/requirement.rb, line 42
def satisfied_by?(version)
  version = Gradle::Version.new(version.to_s)
  super
end

Private Instance Methods

convert_java_constraint_to_ruby_constraint(req_string) click to toggle source
# File lib/dependabot/gradle/requirement.rb, line 61
def convert_java_constraint_to_ruby_constraint(req_string)
  return unless req_string

  if self.class.send(:split_java_requirement, req_string).count > 1
    raise "Can't convert multiple Java reqs to a single Ruby one"
  end

  # NOTE: Support ruby-style version requirements that are created from
  # PR ignore conditions
  version_reqs = req_string.split(",").map(&:strip)
  if req_string.include?(",") && !version_reqs.all? { |s| PATTERN.match?(s) }
    convert_java_range_to_ruby_range(req_string) if req_string.include?(",")
  else
    version_reqs.map { |r| convert_java_equals_req_to_ruby(r) }
  end
end
convert_java_equals_req_to_ruby(req_string) click to toggle source
# File lib/dependabot/gradle/requirement.rb, line 96
def convert_java_equals_req_to_ruby(req_string)
  return convert_wildcard_req(req_string) if req_string&.include?("+")

  # If a soft requirement is being used, treat it as an equality matcher
  return req_string unless req_string&.start_with?("[")

  req_string.gsub(/[\[\]\(\)]/, "")
end
convert_java_range_to_ruby_range(req_string) click to toggle source
# File lib/dependabot/gradle/requirement.rb, line 78
def convert_java_range_to_ruby_range(req_string)
  lower_b, upper_b = req_string.split(",").map(&:strip)

  lower_b =
    if ["(", "["].include?(lower_b) then nil
    elsif lower_b.start_with?("(") then "> #{lower_b.sub(/\(\s*/, '')}"
    else ">= #{lower_b.sub(/\[\s*/, '').strip}"
    end

  upper_b =
    if [")", "]"].include?(upper_b) then nil
    elsif upper_b.end_with?(")") then "< #{upper_b.sub(/\s*\)/, '')}"
    else "<= #{upper_b.sub(/\s*\]/, '').strip}"
    end

  [lower_b, upper_b].compact
end
convert_wildcard_req(req_string) click to toggle source
# File lib/dependabot/gradle/requirement.rb, line 105
def convert_wildcard_req(req_string)
  version = req_string.split("+").first
  return ">= 0" if version.nil? || version.empty?

  version += "0" if version.end_with?(".")
  "~> #{version}"
end