| 
									
										
										
										
											2020-10-10 14:16:11 +02:00
										 |  |  | # typed: true | 
					
						
							| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  | require "singleton" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-03 16:28:16 -07:00
										 |  |  | class Version | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   # A pseudo-version representing the absence of a version. | 
					
						
							|  |  |  |   # | 
					
						
							|  |  |  |   # @api private | 
					
						
							|  |  |  |   class NullVersion < Version | 
					
						
							| 
									
										
										
										
											2020-10-20 12:03:48 +02:00
										 |  |  |     extend T::Sig | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-03 16:28:16 -07:00
										 |  |  |     include Comparable | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     include Singleton | 
					
						
							| 
									
										
										
										
											2016-11-03 16:28:16 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.params(_other: T.untyped).returns(Integer) } | 
					
						
							| 
									
										
										
										
											2016-11-03 16:28:16 -07:00
										 |  |  |     def <=>(_other) | 
					
						
							|  |  |  |       -1
 | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.params(_other: T.untyped).returns(T::Boolean) } | 
					
						
							| 
									
										
										
										
											2016-11-03 16:28:16 -07:00
										 |  |  |     def eql?(_other) | 
					
						
							|  |  |  |       # Makes sure that the same instance of Version::NULL | 
					
						
							|  |  |  |       # will never equal itself; normally Comparable#== | 
					
						
							|  |  |  |       # will return true for this regardless of the return | 
					
						
							|  |  |  |       # value of #<=> | 
					
						
							|  |  |  |       false | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.returns(T::Boolean) } | 
					
						
							| 
									
										
										
										
											2016-11-03 16:28:16 -07:00
										 |  |  |     def detected_from_url? | 
					
						
							|  |  |  |       false | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.returns(T::Boolean) } | 
					
						
							| 
									
										
										
										
											2016-11-03 16:28:16 -07:00
										 |  |  |     def head? | 
					
						
							|  |  |  |       false | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.returns(T::Boolean) } | 
					
						
							| 
									
										
										
										
											2016-11-03 16:28:16 -07:00
										 |  |  |     def null? | 
					
						
							|  |  |  |       true | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-05 17:17:03 -05:00
										 |  |  |     # For {OS::Mac::Version} compatibility. | 
					
						
							| 
									
										
										
										
											2020-10-20 12:03:48 +02:00
										 |  |  |     sig { returns(T::Boolean) } | 
					
						
							| 
									
										
										
										
											2019-01-28 19:31:21 +00:00
										 |  |  |     def requires_nehalem_cpu? | 
					
						
							|  |  |  |       false | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     alias requires_sse4? requires_nehalem_cpu? | 
					
						
							|  |  |  |     alias requires_sse41? requires_nehalem_cpu? | 
					
						
							|  |  |  |     alias requires_sse42? requires_nehalem_cpu? | 
					
						
							|  |  |  |     alias requires_popcnt? requires_nehalem_cpu? | 
					
						
							| 
									
										
										
										
											2022-04-13 07:54:54 -04:00
										 |  |  |     alias outdated_release? requires_nehalem_cpu? | 
					
						
							| 
									
										
										
										
											2019-01-28 19:31:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.returns(Token) } | 
					
						
							| 
									
										
										
										
											2020-08-11 13:01:10 -07:00
										 |  |  |     def major | 
					
						
							|  |  |  |       NULL_TOKEN | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.returns(Token) } | 
					
						
							| 
									
										
										
										
											2020-08-11 13:01:10 -07:00
										 |  |  |     def minor | 
					
						
							|  |  |  |       NULL_TOKEN | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.returns(Token) } | 
					
						
							| 
									
										
										
										
											2020-08-11 13:01:10 -07:00
										 |  |  |     def patch | 
					
						
							|  |  |  |       NULL_TOKEN | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-06 17:51:27 +01:00
										 |  |  |     sig { override.returns(T.self_type) } | 
					
						
							| 
									
										
										
										
											2020-08-11 13:01:10 -07:00
										 |  |  |     def major_minor | 
					
						
							|  |  |  |       self | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-06 17:51:27 +01:00
										 |  |  |     sig { override.returns(T.self_type) } | 
					
						
							| 
									
										
										
										
											2020-08-11 13:01:10 -07:00
										 |  |  |     def major_minor_patch | 
					
						
							|  |  |  |       self | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.returns(Float) } | 
					
						
							| 
									
										
										
										
											2016-11-03 16:28:16 -07:00
										 |  |  |     def to_f | 
					
						
							|  |  |  |       Float::NAN | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.returns(Integer) } | 
					
						
							| 
									
										
										
										
											2017-11-30 09:42:14 +00:00
										 |  |  |     def to_i | 
					
						
							|  |  |  |       0
 | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.returns(String) } | 
					
						
							| 
									
										
										
										
											2016-11-03 16:28:16 -07:00
										 |  |  |     def to_s | 
					
						
							|  |  |  |       "" | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     alias to_str to_s | 
					
						
							| 
									
										
										
										
											2016-11-21 08:48:26 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.returns(String) } | 
					
						
							| 
									
										
										
										
											2016-11-21 08:48:26 +00:00
										 |  |  |     def inspect | 
					
						
							| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  |       "#<Version::NULL>" | 
					
						
							| 
									
										
										
										
											2016-11-21 08:48:26 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   end | 
					
						
							|  |  |  |   private_constant :NullVersion | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # Represents the absence of a version. | 
					
						
							|  |  |  |   NULL = NullVersion.instance.freeze | 
					
						
							| 
									
										
										
										
											2016-11-03 16:28:16 -07:00
										 |  |  | end |