Class: Dependabot::Version

Inherits:
Gem::Version
  • Object
show all
Extended by:
T::Helpers, T::Sig
Defined in:
lib/dependabot/version.rb

Constant Summary collapse

VersionParameter =
T.type_alias { T.nilable(T.any(String, Integer, Gem::Version)) }
SEMVER_REGEX =
T.let(
  /
        # major.minor.patch
        ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)
        # pre-release
        (?:-(
          (?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)
          (?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*
        ))?
        # build metadata
        (?:\+(
          [0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*
        ))?$/x,
  Regexp
)

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(version) ⇒ Version

Returns a new instance of Version.



16
17
18
19
20
# File 'lib/dependabot/version.rb', line 16

def initialize(version)
  @original_version = T.let(version.to_s, String)

  super
end

Class Method Details

.correct?(version) ⇒ Boolean

Returns:

  • (Boolean)


38
39
40
41
42
# File 'lib/dependabot/version.rb', line 38

def self.correct?(version)
  return false if version.nil?

  version.to_s.match?(ANCHORED_VERSION_PATTERN)
end

.new(version) ⇒ Object



23
24
25
# File 'lib/dependabot/version.rb', line 23

def self.new(version)
  T.cast(super, Dependabot::Version)
end

.update_type(_from_version, _to_version) ⇒ Object



32
33
34
# File 'lib/dependabot/version.rb', line 32

def self.update_type(_from_version, _to_version)
  nil
end

.valid_semver?(version) ⇒ Boolean

Returns:

  • (Boolean)


117
118
119
# File 'lib/dependabot/version.rb', line 117

def self.valid_semver?(version)
  !version.match(SEMVER_REGEX).nil?
end

Instance Method Details

#compute_sort_keyObject



51
52
53
54
55
# File 'lib/dependabot/version.rb', line 51

def compute_sort_key
  return if canonical_segments.any?(String)

  super
end

#ignored_major_versionsObject



86
87
88
89
90
91
92
# File 'lib/dependabot/version.rb', line 86

def ignored_major_versions
  version_parts = to_semver.split(".")
  lower_parts = [version_parts[0].to_i + 1] + [lowest_prerelease_suffix]
  lower_bound = ">= #{lower_parts.join('.')}"

  [lower_bound]
end

#ignored_minor_versionsObject



74
75
76
77
78
79
80
81
82
83
# File 'lib/dependabot/version.rb', line 74

def ignored_minor_versions
  parts = to_semver.split(".")
  version_parts = parts.fill("0", parts.length...2)
  lower_parts = version_parts.first(1) + [version_parts[1].to_i + 1] + [lowest_prerelease_suffix]
  upper_parts = version_parts.first(0) + [version_parts[0].to_i + 1]
  lower_bound = ">= #{lower_parts.join('.')}"
  upper_bound = "< #{upper_parts.join('.')}"

  ["#{lower_bound}, #{upper_bound}"]
end

#ignored_patch_versionsObject



63
64
65
66
67
68
69
70
71
# File 'lib/dependabot/version.rb', line 63

def ignored_patch_versions
  parts = to_semver.split(".")
  version_parts = parts.fill("0", parts.length...2)
  upper_parts = version_parts.first(1) + [version_parts[1].to_i + 1]
  lower_bound = "> #{to_semver}"
  upper_bound = "< #{upper_parts.join('.')}"

  ["#{lower_bound}, #{upper_bound}"]
end

#lowest_prerelease_suffixObject



95
96
97
# File 'lib/dependabot/version.rb', line 95

def lowest_prerelease_suffix
  "a"
end

#semver_partsObject



122
123
124
125
126
127
128
129
130
131
132
# File 'lib/dependabot/version.rb', line 122

def semver_parts
  # Extracts only the numeric major.minor.patch part of the version, ensuring it starts with a number
  match = to_semver.match(/^\d+(?:\.\d+)?(?:\.\d+)?(?=[^\d]|$)/)
  return nil unless match

  first_match = match[0]
  return nil unless first_match

  major, minor, patch = first_match.split(".").map(&:to_i)
  [major || 0, minor || 0, patch || 0]
end

#to_semverObject



58
59
60
# File 'lib/dependabot/version.rb', line 58

def to_semver
  @original_version
end