brew/Library/Homebrew/livecheck/livecheck_version.rb

70 lines
1.6 KiB
Ruby
Raw Normal View History

# typed: strict
# frozen_string_literal: true
module Homebrew
module Livecheck
# A formula or cask version, split into its component sub-versions.
#
# @api private
class LivecheckVersion
include Comparable
sig {
params(package_or_resource: T.any(Formula, Cask::Cask, Resource), version: Version).returns(LivecheckVersion)
}
def self.create(package_or_resource, version)
versions = case package_or_resource
when Formula, Resource
[version]
when Cask::Cask
version.to_s.split(",").map { |s| Version.new(s) }
else
T.absurd(package_or_resource)
end
new(versions)
end
sig { returns(T::Array[Version]) }
attr_reader :versions
sig { params(versions: T::Array[Version]).void }
def initialize(versions)
@versions = versions
end
sig { params(other: T.untyped).returns(T.nilable(Integer)) }
def <=>(other)
return unless other.is_a?(LivecheckVersion)
lversions = versions
rversions = other.versions
max = [lversions.count, rversions.count].max
l = r = 0
while l < max
a = lversions[l] || Version::NULL
b = rversions[r] || Version::NULL
if a == b
l += 1
r += 1
next
elsif !a.null? && b.null?
return 1 if a > Version::NULL
l += 1
elsif a.null? && !b.null?
return -1 if b > Version::NULL
r += 1
else
return a <=> b
end
end
0
end
end
end
end