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

Returns a new instance of Version.

Parameters:

  • version (String, Version)

    A string representing a version, or another version.

Raises:

  • (ArgumentError)


46
47
48
49
50
51
# File 'lib/cocoapods-core/version.rb', line 46

def initialize(version)
  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.



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

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.



173
174
175
176
# File 'lib/cocoapods-core/version.rb', line 173

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.



126
127
128
129
# File 'lib/cocoapods-core/version.rb', line 126

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.



142
143
144
# File 'lib/cocoapods-core/version.rb', line 142

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.



157
158
159
160
# File 'lib/cocoapods-core/version.rb', line 157

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.



59
60
61
# File 'lib/cocoapods-core/version.rb', line 59

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

#majorFixnum

Returns The semver major identifier.

Returns:

  • (Fixnum)

    The semver major identifier.



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

def major
  numeric_segments[0].to_i
end

#minorFixnum

Returns The semver minor identifier.

Returns:

  • (Fixnum)

    The semver minor identifier.



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

def minor
  numeric_segments[1].to_i
end

#patchFixnum

Returns The semver patch identifier.

Returns:

  • (Fixnum)

    The semver patch identifier.



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

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.



70
71
72
# File 'lib/cocoapods-core/version.rb', line 70

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).



94
95
96
# File 'lib/cocoapods-core/version.rb', line 94

def semantic?
  version.to_s =~ ANCHORED_SEMANTIC_VERSION_PATTERN
end