70 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			70 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | # 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 | ||
|  |       extend T::Sig | ||
|  | 
 | ||
|  |       include Comparable | ||
|  | 
 | ||
|  |       sig { params(formula_or_cask: T.any(Formula, Cask::Cask), version: Version).returns(LivecheckVersion) } | ||
|  |       def self.create(formula_or_cask, version) | ||
|  |         versions = case formula_or_cask | ||
|  |         when Formula | ||
|  |           [version] | ||
|  |         when Cask::Cask | ||
|  |           version.to_s.split(/[,:]/).map { |s| Version.new(s) } | ||
|  |         else | ||
|  |           T.absurd(formula_or_cask) | ||
|  |         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 |