Class: Pod::Version

Inherits:
Pod::Vendor::Gem::Version show all
Defined in:
lib/cocoapods-core/version.rb

Overview

The Version class stores information about the version of a Specification.

It is based on the RubyGems class adapted to support head information.

### From RubyGems:

The Version class processes string versions into comparable values. A version string should normally be a series of numbers separated by periods. Each part (digits separated by periods) is considered its own number, and these are used for sorting. So for instance, 3.10 sorts higher than 3.2 because ten is greater than two.

If any part contains letters (currently only a-z are supported) then that version is considered prerelease. Versions with a prerelease part in the Nth part sort less than versions with N-1 parts. Prerelease parts are sorted alphabetically using the normal Ruby string sorting rules. If a prerelease part contains both letters and numbers, it will be broken into multiple parts to provide expected sort behavior (1.0.a10 becomes 1.0.a.10, and is greater than 1.0.a9).

Prereleases sort between real releases (newest to oldest):

  1. 1.0

  2. 1.0.b1

  3. 1.0.a.2

  4. 0.9

Semantic Versioning collapse

SEMVER_PATTERN =
"[0-9]+(\\.[0-9]+(\\.[0-9]+(-[0-9A-Za-z\\-\\.]+)?#{METADATA_PATTERN}?)?)?"
ANCHORED_SEMANTIC_VERSION_PATTERN =
/\A\s*(#{SEMVER_PATTERN})*\s*\z/

Constant Summary collapse

METADATA_PATTERN =

Override the constants defined by the superclass to add:

  • Semantic Versioning prerelease support (with a dash). E.g.: 1.0.0-alpha1

  • Semantic Versioning metadata support (with a ) E.g: 1.0.096ef7ed

For more info, see: semver.org

'(\+[0-9a-zA-Z\-\.]+)'
VERSION_PATTERN =
"[0-9]+(\\.[0-9a-zA-Z\\-]+)*#{METADATA_PATTERN}?"
ANCHORED_VERSION_PATTERN =
/\A\s*(#{VERSION_PATTERN})*\s*\z/
ZERO =

An instance that represents version 0.

new('0')

Constants inherited from Pod::Vendor::Gem::Version

Pod::Vendor::Gem::Version::Requirement

Semantic Versioning collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Pod::Vendor::Gem::Version

#approximate_recommendation, #bump, create, #encode_with, #eql?, #hash, #init_with, #marshal_dump, #marshal_load, new, #pretty_print, #release, #segments, #to_yaml_properties, #version, #yaml_initialize

Constructor Details

#initialize(version) ⇒ Version

TODO:

Remove the ‘HEAD` code once everyone has migrated past 1.0.

Returns a new instance of Version.

Parameters:

  • version (String, Version)

    A string representing a version, or another version.

Raises:

  • (ArgumentError)


48
49
50
51
52
53
54
55
56
57
58
# File 'lib/cocoapods-core/version.rb', line 48

def initialize(version)
  if version.is_a?(String) && version =~ /HEAD based on (.*)/
    CoreUI.warn "Ignoring obsolete HEAD specifier in `#{version}`"
    version = Regexp.last_match[1]
  end

  raise ArgumentError, "Malformed version number string #{version}" unless
    self.class.correct?(version)

  @version = version.to_s.strip
end

Class Method Details

.correct?(version) ⇒ Bool

Returns Whether a string representation is correct.

Returns:

  • (Bool)

    Whether a string representation is correct.



83
84
85
# File 'lib/cocoapods-core/version.rb', line 83

def self.correct?(version)
  version.to_s =~ ANCHORED_VERSION_PATTERN
end

Instance Method Details

#<=(other) ⇒ Boolean

Note:

Attempts to compare something that’s not a Pod::Version return nil

Compares the versions for equality.

Parameters:

  • other (Version)

    The other version to compare.

Returns:

  • (Boolean)

    whether the receiver is less than or equal to other.



180
181
182
183
# File 'lib/cocoapods-core/version.rb', line 180

def <=(other)
  comparison = compare_segments(other)
  comparison <= 0
end

#<=>(other) ⇒ Fixnum

Note:

Attempts to compare something that’s not a Pod::Version return nil

Compares the versions for sorting.

Parameters:

  • other (Version)

    The other version to compare.

Returns:

  • (Fixnum)

    -1, 0, or +1 depending on whether the receiver is less than, equal to, or greater than other.



133
134
135
136
# File 'lib/cocoapods-core/version.rb', line 133

def <=>(other)
  comparison = compare_segments(other)
  comparison == 0 ? version <=> other.version : comparison
end

#==(other) ⇒ Boolean

Note:

Attempts to compare something that’s not a Pod::Version return nil

Compares the versions for equality.

Parameters:

  • other (Version)

    The other version to compare.

Returns:

  • (Boolean)

    whether the receiver is equal to other.



149
150
151
# File 'lib/cocoapods-core/version.rb', line 149

def ==(other)
  compare_segments(other) == 0
end

#>=(other) ⇒ Boolean

Note:

Attempts to compare something that’s not a Pod::Version return nil

Compares the versions for equality.

Parameters:

  • other (Version)

    The other version to compare.

Returns:

  • (Boolean)

    whether the receiver is greater than or equal to other.



164
165
166
167
# File 'lib/cocoapods-core/version.rb', line 164

def >=(other)
  comparison = compare_segments(other)
  comparison >= 0
end

#inspectString

Returns a string representation suitable for debugging.

Returns:

  • (String)

    a string representation suitable for debugging.



66
67
68
# File 'lib/cocoapods-core/version.rb', line 66

def inspect
  "<#{self.class} version=#{version}>"
end

#majorFixnum

Returns The semver major identifier.

Returns:

  • (Fixnum)

    The semver major identifier.



107
108
109
# File 'lib/cocoapods-core/version.rb', line 107

def major
  numeric_segments[0].to_i
end

#minorFixnum

Returns The semver minor identifier.

Returns:

  • (Fixnum)

    The semver minor identifier.



113
114
115
# File 'lib/cocoapods-core/version.rb', line 113

def minor
  numeric_segments[1].to_i
end

#patchFixnum

Returns The semver patch identifier.

Returns:

  • (Fixnum)

    The semver patch identifier.



119
120
121
# File 'lib/cocoapods-core/version.rb', line 119

def patch
  numeric_segments[2].to_i
end

#prerelease?Boolean

Note:

Prerelease Pods can contain a hyphen and/or a letter (conforms to Semantic Versioning instead of RubyGems).

For more info, see: semver.org

Returns indicates whether or not the version is a prerelease.

Returns:

  • (Boolean)

    indicates whether or not the version is a prerelease.



77
78
79
# File 'lib/cocoapods-core/version.rb', line 77

def prerelease?
  @prerelease ||= @version =~ /[a-zA-Z\-]/
end

#semantic?Bool

Note:

This comparison is lenient.

Note:

It doesn’t support build identifiers.

Returns Whether the version conforms to the Semantic Versioning specification (2.0.0-rc.1).

Returns:

  • (Bool)

    Whether the version conforms to the Semantic Versioning specification (2.0.0-rc.1).



101
102
103
# File 'lib/cocoapods-core/version.rb', line 101

def semantic?
  version.to_s =~ ANCHORED_SEMANTIC_VERSION_PATTERN
end