class Dependabot::FileParsers::Base::DependencySet
Attributes
dependencies[R]
Public Class Methods
new(dependencies = [], case_sensitive: false)
click to toggle source
# File lib/dependabot/file_parsers/base/dependency_set.rb, line 11 def initialize(dependencies = [], case_sensitive: false) unless dependencies.is_a?(Array) && dependencies.all? { |dep| dep.is_a?(Dependency) } raise ArgumentError, "must be an array of Dependency objects" end @dependencies = dependencies @case_sensitive = case_sensitive end
Public Instance Methods
+(other)
click to toggle source
# File lib/dependabot/file_parsers/base/dependency_set.rb, line 40 def +(other) raise ArgumentError, "must be a DependencySet" unless other.is_a?(DependencySet) other.dependencies.each { |dep| self << dep } self end
<<(dep)
click to toggle source
# File lib/dependabot/file_parsers/base/dependency_set.rb, line 23 def <<(dep) raise ArgumentError, "must be a Dependency object" unless dep.is_a?(Dependency) existing_dependency = dependency_for_name(dep.name) return self if existing_dependency&.to_h == dep.to_h if existing_dependency dependencies[dependencies.index(existing_dependency)] = combined_dependency(existing_dependency, dep) else dependencies << dep end self end
Private Instance Methods
case_sensitive?()
click to toggle source
# File lib/dependabot/file_parsers/base/dependency_set.rb, line 49 def case_sensitive? @case_sensitive end
combined_dependency(old_dep, new_dep)
click to toggle source
# File lib/dependabot/file_parsers/base/dependency_set.rb, line 59 def combined_dependency(old_dep, new_dep) package_manager = old_dep.package_manager v_cls = Utils.version_class_for_package_manager(package_manager) # If we already have a requirement use the existing version # (if present). Otherwise, use whatever the lowest version is new_version = if old_dep.requirements.any? then old_dep.version || new_dep.version elsif !v_cls.correct?(new_dep.version) then old_dep.version elsif !v_cls.correct?(old_dep.version) then new_dep.version elsif v_cls.new(new_dep.version) > v_cls.new(old_dep.version) old_dep.version else new_dep.version end subdependency_metadata = ( (old_dep.subdependency_metadata || []) + (new_dep.subdependency_metadata || []) ).uniq Dependency.new( name: old_dep.name, version: new_version, requirements: (old_dep.requirements + new_dep.requirements).uniq, package_manager: package_manager, subdependency_metadata: subdependency_metadata ) end
dependency_for_name(name)
click to toggle source
# File lib/dependabot/file_parsers/base/dependency_set.rb, line 53 def dependency_for_name(name) return dependencies.find { |d| d.name == name } if case_sensitive? dependencies.find { |d| d.name&.downcase == name&.downcase } end