| 
									
										
										
										
											2021-01-20 09:06:37 -08:00
										 |  |  | # 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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-27 20:43:07 +02:00
										 |  |  |       sig { | 
					
						
							|  |  |  |         params(package_or_resource: T.any(Formula, Cask::Cask, Resource), version: Version).returns(LivecheckVersion) | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2022-07-27 13:26:48 +02:00
										 |  |  |       def self.create(package_or_resource, version) | 
					
						
							|  |  |  |         versions = case package_or_resource | 
					
						
							| 
									
										
										
										
											2022-07-31 12:38:00 +05:00
										 |  |  |         when Formula, Resource | 
					
						
							| 
									
										
										
										
											2021-01-20 09:06:37 -08:00
										 |  |  |           [version] | 
					
						
							|  |  |  |         when Cask::Cask | 
					
						
							| 
									
										
										
										
											2023-02-10 17:28:58 -08:00
										 |  |  |           version.to_s.split(",").map { |s| Version.new(s) } | 
					
						
							| 
									
										
										
										
											2021-01-20 09:06:37 -08:00
										 |  |  |         else | 
					
						
							| 
									
										
										
										
											2022-07-27 13:26:48 +02:00
										 |  |  |           T.absurd(package_or_resource) | 
					
						
							| 
									
										
										
										
											2021-01-20 09:06:37 -08:00
										 |  |  |         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 |