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)


29
30
31
32
33
# File 'lib/dependabot/version.rb', line 29

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

.valid_semver?(version) ⇒ Boolean

Returns:

  • (Boolean)


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

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

Instance Method Details

#ignored_major_versionsObject



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

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



52
53
54
55
56
57
58
59
60
61
# File 'lib/dependabot/version.rb', line 52

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



41
42
43
44
45
46
47
48
49
# File 'lib/dependabot/version.rb', line 41

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



73
74
75
# File 'lib/dependabot/version.rb', line 73

def lowest_prerelease_suffix
  "a"
end

#semver_partsObject



100
101
102
103
104
105
106
107
108
109
110
# File 'lib/dependabot/version.rb', line 100

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



36
37
38
# File 'lib/dependabot/version.rb', line 36

def to_semver
  @original_version
end