Class: Dependabot::Maven::Version

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

Constant Summary collapse

PRERELEASE_QUALIFIERS =
T.let(
  [
    Dependabot::Maven::VersionParser::ALPHA,
    Dependabot::Maven::VersionParser::BETA,
    Dependabot::Maven::VersionParser::MILESTONE,
    Dependabot::Maven::VersionParser::RC,
    Dependabot::Maven::VersionParser::SNAPSHOT
  ].freeze,
  T::Array[Integer]
)
VERSION_PATTERN =
"[0-9a-zA-Z]+" \
'(?>\.[0-9a-zA-Z]*)*' \
'([_\-\+.][0-9A-Za-z]*)*'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(version) ⇒ Version

Returns a new instance of Version.

Raises:

  • (BadRequirementError)


46
47
48
49
50
51
52
# File 'lib/dependabot/maven/version.rb', line 46

def initialize(version)
  raise BadRequirementError, "Malformed version string - string is nil" if version.nil?

  @version_string = T.let(version.to_s, String)
  @token_bucket = T.let(Dependabot::Maven::VersionParser.parse(version_string), Dependabot::Maven::TokenBucket)
  super(version.to_s.tr("_", "-"))
end

Instance Attribute Details

#token_bucketObject

Returns the value of attribute token_bucket.



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

def token_bucket
  @token_bucket
end

Class Method Details

.correct?(version) ⇒ Boolean

Returns:

  • (Boolean)


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

def self.correct?(version)
  return false if version.to_s.empty?

  Dependabot::Maven::VersionParser.parse(version.to_s).to_a.any?
rescue ArgumentError
  Dependabot.logger.info("Malformed version string #{version}")
  false
end

Instance Method Details

#<=>(other) ⇒ Object



77
78
79
80
# File 'lib/dependabot/maven/version.rb', line 77

def <=>(other)
  other = Dependabot::Maven::Version.new(other.to_s) unless other.is_a? Dependabot::Maven::Version
  T.must(token_bucket <=> T.cast(other, Dependabot::Maven::Version).token_bucket)
end

#ignored_major_versionsObject



111
112
113
114
115
116
117
118
119
# File 'lib/dependabot/maven/version.rb', line 111

def ignored_major_versions
  version_parts = token_bucket.tokens # e.g [1,2,3] if version is 1.2.3-alpha3
  return [] if version_parts.empty? # for non-semver versions

  lower_parts = [version_parts[0].to_i + 1] + [lowest_prerelease_suffix] # earliest next major version prerelease
  lower_bound = ">= #{lower_parts.join('.')}"

  [lower_bound]
end

#ignored_minor_versionsObject



97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/dependabot/maven/version.rb', line 97

def ignored_minor_versions
  parts = token_bucket.tokens # e.g [1,2,3] if version is 1.2.3-alpha3
  return [] if parts.empty? # for non-semver versions

  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] + [lowest_prerelease_suffix]
  lower_bound = ">= #{lower_parts.join('.')}"
  upper_bound = "< #{upper_parts.join('.')}"

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

#ignored_patch_versionsObject



83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/dependabot/maven/version.rb', line 83

def ignored_patch_versions
  parts = token_bucket.tokens # e.g [1,2,3] if version is 1.2.3-alpha3
  return [] if parts.empty? # for non-semver versions

  version_parts = parts.fill("0", parts.length...2)
  # the a0 is so we can get the next earliest prerelease patch version
  upper_parts = version_parts.first(1) + [version_parts[1].to_i + 1] + [lowest_prerelease_suffix]
  lower_bound = "> #{to_semver}"
  upper_bound = "< #{upper_parts.join('.')}"

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

#inspectObject



55
56
57
# File 'lib/dependabot/maven/version.rb', line 55

def inspect
  "#<#{self.class} #{version_string}>"
end

#lowest_prerelease_suffixObject



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

def lowest_prerelease_suffix
  "a0"
end

#prerelease?Boolean

Returns:

  • (Boolean)


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

def prerelease?
  token_bucket.to_a.flatten.any? do |token|
    token.is_a?(Integer) && token.negative?
  end
end

#to_sObject



60
61
62
# File 'lib/dependabot/maven/version.rb', line 60

def to_s
  version_string
end