class Dependabot::Config::UpdateConfig

Configuration for a single ecosystem

def self.wildcard_match?(wildcard_string, candidate_string)

def self.wildcard_match?(wildcard_string, candidate_string)
  return false unless wildcard_string && candidate_string
  regex_string = "a#{wildcard_string.downcase}a".split("*")
                                                .map { |p| Regexp.quote(p) }
                                                .join(".*").gsub(/^a|a$/, "")
  regex = /^#{regex_string}$/
  regex.match?(candidate_string.downcase)
end

def extract_base_version_from_requirement(dependency)

def extract_base_version_from_requirement(dependency)
  requirements = dependency.requirements
  requirement = T.must(requirements.first)[:requirement]
  version = requirement&.match(/\d+\.\d+\.\d+/)&.to_s
  Dependabot::Dependency.new(
    name: dependency.name,
    version: version,
    requirements: dependency.requirements,
    package_manager: dependency.package_manager
  )
end

def ignored_versions_for(dependency, security_updates_only: false)

def ignored_versions_for(dependency, security_updates_only: false)
  normalizer = name_normaliser_for(dependency)
  dep_name = T.must(normalizer).call(dependency.name)
  if dependency.version.nil? && dependency.requirements.any?
    dependency = extract_base_version_from_requirement(dependency)
  end
  @ignore_conditions
    .select { |ic| self.class.wildcard_match?(T.must(normalizer).call(ic.dependency_name), dep_name) }
    .map { |ic| ic.ignored_versions(dependency, security_updates_only) }
    .flatten
    .compact
    .uniq
end

def initialize(ignore_conditions: nil, commit_message_options: nil)

def initialize(ignore_conditions: nil, commit_message_options: nil)
  @ignore_conditions = T.let(ignore_conditions || [], T::Array[IgnoreCondition])
  @commit_message_options = commit_message_options
end

def name_normaliser_for(dep)

def name_normaliser_for(dep)
  name_normaliser ||= {}
  name_normaliser[dep] ||= Dependency.name_normaliser_for_package_manager(dep.package_manager)
end