Class: Version
- Inherits:
-
Object
- Object
- Version
- Includes:
- Comparable
- Defined in:
- Library/Homebrew/version.rb,
Library/Homebrew/version/null.rb
Overview
typed: true frozen_string_literal: true
Direct Known Subclasses
Defined Under Namespace
Classes: AlphaToken, BetaToken, CompositeToken, NumericToken, PatchToken, PostToken, PreToken, RCToken, StringToken, Token
Constant Summary collapse
- NULL_TOKEN =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Represents the absence of a token.
NullToken.new.freeze
- NULL =
Represents the absence of a version.
Class.new do include Comparable def <=>(_other) -1 end 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 def detected_from_url? false end def head? false end def null? true end # For {OS::Mac::Version} compatibility. def requires_nehalem_cpu? false end alias_method :requires_sse4?, :requires_nehalem_cpu? alias_method :requires_sse41?, :requires_nehalem_cpu? alias_method :requires_sse42?, :requires_nehalem_cpu? alias_method :requires_popcnt?, :requires_nehalem_cpu? def major NULL_TOKEN end def minor NULL_TOKEN end def patch NULL_TOKEN end def major_minor self end def major_minor_patch self end def to_f Float::NAN end def to_i 0 end def to_s "" end alias_method :to_str, :to_s def inspect "#<Version::NULL>" end end.new.freeze
Class Method Summary collapse
- .create(val) ⇒ Object private
- .detect(url, **specs) ⇒ Object private
- .formula_optionally_versioned_regex(name, full: true) ⇒ Object private
- .parse(spec, detected_from_url: false) ⇒ Object private
Instance Method Summary collapse
- #<=>(other) ⇒ Object private
- #detected_from_url? ⇒ Boolean private
- #empty? ⇒ Boolean private
- #hash ⇒ Object private
- #head? ⇒ Boolean private
-
#initialize(val, detected_from_url: false) ⇒ Version
constructor
private
A new instance of Version.
- #major ⇒ Object private
- #major_minor ⇒ Object private
- #major_minor_patch ⇒ Object private
- #minor ⇒ Object private
- #null? ⇒ Boolean private
- #patch ⇒ Object private
- #to_f ⇒ Object private
- #to_i ⇒ Object private
- #to_s ⇒ Object (also: #to_str) private
Constructor Details
#initialize(val, detected_from_url: false) ⇒ Version
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of Version.
459 460 461 462 463 464 |
# File 'Library/Homebrew/version.rb', line 459 def initialize(val, detected_from_url: false) raise TypeError, "Version value must be a string; got a #{val.class} (#{val})" unless val.respond_to?(:to_str) @version = val.to_str @detected_from_url = detected_from_url end |
Class Method Details
.create(val) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
298 299 300 301 302 303 304 305 306 |
# File 'Library/Homebrew/version.rb', line 298 def self.create(val) raise TypeError, "Version value must be a string; got a #{val.class} (#{val})" unless val.respond_to?(:to_str) if val.to_str.start_with?("HEAD") HeadVersion.new(val) else Version.new(val) end end |
.detect(url, **specs) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
294 295 296 |
# File 'Library/Homebrew/version.rb', line 294 def self.detect(url, **specs) parse(specs.fetch(:tag, url), detected_from_url: true) end |
.formula_optionally_versioned_regex(name, full: true) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
12 13 14 |
# File 'Library/Homebrew/version.rb', line 12 def self.formula_optionally_versioned_regex(name, full: true) /#{"^" if full}#{Regexp.escape(name)}(@\d[\d.]*)?#{"$" if full}/ end |
.parse(spec, detected_from_url: false) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
308 309 310 311 |
# File 'Library/Homebrew/version.rb', line 308 def self.parse(spec, detected_from_url: false) version = _parse(spec) version.nil? ? NULL : new(version, detected_from_url: detected_from_url) end |
Instance Method Details
#<=>(other) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 |
# File 'Library/Homebrew/version.rb', line 478 def <=>(other) # Needed to retain API compatibility with older string comparisons # for compiler versions, etc. other = Version.new(other) if other.is_a? String # Used by the *_build_version comparisons, which formerly returned Fixnum other = Version.new(other.to_s) if other.is_a? Integer return 1 if other.nil? return 1 if other.respond_to?(:null?) && other.null? other = Version.new(other.to_s) if other.is_a? Token return unless other.is_a?(Version) return 0 if version == other.version return 1 if head? && !other.head? return -1 if !head? && other.head? return 0 if head? && other.head? ltokens = tokens rtokens = other.tokens max = max(ltokens.length, rtokens.length) l = r = 0 while l < max a = ltokens[l] || NULL_TOKEN b = rtokens[r] || NULL_TOKEN if a == b l += 1 r += 1 next elsif a.numeric? && b.numeric? return a <=> b elsif a.numeric? return 1 if a > NULL_TOKEN l += 1 elsif b.numeric? return -1 if b > NULL_TOKEN r += 1 else return a <=> b end end 0 end |
#detected_from_url? ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
466 467 468 |
# File 'Library/Homebrew/version.rb', line 466 def detected_from_url? @detected_from_url end |
#empty? ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
546 547 548 |
# File 'Library/Homebrew/version.rb', line 546 def empty? version.empty? end |
#hash ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
550 551 552 |
# File 'Library/Homebrew/version.rb', line 550 def hash version.hash end |
#head? ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
470 471 472 |
# File 'Library/Homebrew/version.rb', line 470 def head? false end |
#major ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
526 527 528 |
# File 'Library/Homebrew/version.rb', line 526 def major tokens.first end |
#major_minor ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
538 539 540 |
# File 'Library/Homebrew/version.rb', line 538 def major_minor Version.new([major, minor].compact.join(".")) end |
#major_minor_patch ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
542 543 544 |
# File 'Library/Homebrew/version.rb', line 542 def major_minor_patch Version.new([major, minor, patch].compact.join(".")) end |
#minor ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
530 531 532 |
# File 'Library/Homebrew/version.rb', line 530 def minor tokens.second end |
#null? ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
474 475 476 |
# File 'Library/Homebrew/version.rb', line 474 def null? false end |
#patch ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
534 535 536 |
# File 'Library/Homebrew/version.rb', line 534 def patch tokens.third end |
#to_f ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
554 555 556 |
# File 'Library/Homebrew/version.rb', line 554 def to_f version.to_f end |
#to_i ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
558 559 560 |
# File 'Library/Homebrew/version.rb', line 558 def to_i version.to_i end |
#to_s ⇒ Object Also known as: to_str
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
562 563 564 |
# File 'Library/Homebrew/version.rb', line 562 def to_s version.dup end |