Class: Semverify::IncrementableSemver

Inherits:
Semver
  • Object
show all
Defined in:
lib/semverify/incrementable_semver.rb

Overview

A Semverify::Semver with additional constraints on the pre-release part of the version

A IncrementableSemver is valid if one of the two following conditions is met:

  1. The pre-release part is empty
  2. The pre-release part is composed of two dot-separated identifiers:
    • the first being a String representing the pre-release type (e.g. 'alpha', 'beta', etc.). The default pre-release type is 'pre'
    • the second being an Integer representing the pre-release sequence number (starting at 1)

Valid versions with pre-release parts: 1.2.3-alpha.1, 1.2.3-beta.2, 1.2.3-pre.3

Constant Summary collapse

DEFAULT_PRE_TYPE =

The default pre-release identifier

'pre'

Instance Attribute Summary

Attributes inherited from Semver

#build_metadata, #major, #minor, #patch, #pre_release, #pre_release_identifiers, #version

Instance Method Summary collapse

Methods inherited from Semver

#<=>, #==, #initialize, #to_s

Constructor Details

This class inherits a constructor from Semverify::Semver

Instance Method Details

#next_major(pre: false, pre_type: DEFAULT_PRE_TYPE, build_metadata: nil) ⇒ IncrementableSemver

Increment the major version

Examples:

IncrementableSemverify::Semver.new('1.2.3').next_major # => IncrementableSemverify::Semver.new('2.0.0')

Returns:

  • (IncrementableSemver)

    a new IncrementableSemver object with the major version incremented



53
54
55
56
57
58
59
# File 'lib/semverify/incrementable_semver.rb', line 53

def next_major(pre: false, pre_type: DEFAULT_PRE_TYPE, build_metadata: nil)
  version_string = "#{major.to_i + 1}.0.0"
  version_string += "-#{pre_type}.1" if pre
   = self. if .nil?
  version_string += "+#{build_metadata}" unless .empty?
  IncrementableSemver.new(version_string)
end

#next_minor(pre: false, pre_type: DEFAULT_PRE_TYPE, build_metadata: nil) ⇒ IncrementableSemver

Increment the minor version

Examples:

IncrementableSemverify::Semver.new('1.2.3').next_minor # => IncrementableSemverify::Semver.new('1.3.0')

Returns:

  • (IncrementableSemver)

    a new IncrementableSemver object with the major version incremented



68
69
70
71
72
73
74
# File 'lib/semverify/incrementable_semver.rb', line 68

def next_minor(pre: false, pre_type: DEFAULT_PRE_TYPE, build_metadata: nil)
  version_string = "#{major}.#{minor.to_i + 1}.0"
  version_string += "-#{pre_type}.1" if pre
   = self. if .nil?
  version_string += "+#{build_metadata}" unless .empty?
  IncrementableSemver.new(version_string)
end

#next_patch(pre: false, pre_type: DEFAULT_PRE_TYPE, build_metadata: nil) ⇒ IncrementableSemver

Increment the patch version

Examples:

IncrementableSemverify::Semver.new('1.2.3').next_patch # => IncrementableSemverify::Semver.new('1.2.1')

Returns:



83
84
85
86
87
88
89
# File 'lib/semverify/incrementable_semver.rb', line 83

def next_patch(pre: false, pre_type: DEFAULT_PRE_TYPE, build_metadata: nil)
  version_string = "#{major}.#{minor}.#{patch.to_i + 1}"
  version_string += "-#{pre_type}.1" if pre
   = self. if .nil?
  version_string += "+#{build_metadata}" unless .empty?
  IncrementableSemver.new(version_string)
end

#next_pre(pre_type: nil, build_metadata: nil) ⇒ IncrementableSemver

Increment the pre_release part of the version

Examples:

IncrementableSemverify::Semver.new('1.2.3-pre.1').next_patch.to_s # => '1.2.3-pre.2'

Returns:

  • (IncrementableSemver)

    a new IncrementableSemver object with the pre_release part incremented



98
99
100
101
102
103
104
105
# File 'lib/semverify/incrementable_semver.rb', line 98

def next_pre(pre_type: nil, build_metadata: nil)
  assert_is_a_pre_release_version
  version_string = "#{major}.#{minor}.#{patch}"
  version_string += next_pre_part(pre_type)
   ||= self.
  version_string += "+#{build_metadata}" unless .empty?
  IncrementableSemver.new(version_string)
end

#next_release(build_metadata: nil) ⇒ IncrementableSemver

Drop the pre-release part of the version

Examples:

IncrementableSemverify::Semver.new('1.2.3-pre.1').next_release.to_s # => '1.2.3'

Returns:

Raises:



115
116
117
118
119
120
121
# File 'lib/semverify/incrementable_semver.rb', line 115

def next_release(build_metadata: nil)
  assert_is_a_pre_release_version
  version_string = "#{major}.#{minor}.#{patch}"
   ||= self.
  version_string += "+#{build_metadata}" unless .empty?
  IncrementableSemver.new(version_string)
end

#pre_numberInteger

The pre-release sequence number

The pre-release sequence number starts at 1 for each pre-release type.

Examples:

IncrementableSemverify::Semver.new('1.2.3-pre.1').pre_number # => 1

Returns:

  • (Integer)


143
144
145
# File 'lib/semverify/incrementable_semver.rb', line 143

def pre_number
  pre_release_identifiers[1]
end

#pre_typeString

The pre-release type (for example, 'alpha', 'beta', 'pre', etc.)

Examples:

IncrementableSemverify::Semver.new('1.2.3-pre.1').pre_type # => 'pre'

Returns:

  • (String)


130
131
132
# File 'lib/semverify/incrementable_semver.rb', line 130

def pre_type
  pre_release_identifiers[0]
end

#valid?Boolean

Create a new IncrementableSemver object

Examples:

Semverify::Semver.new('1.2.3').valid? # => true
Semverify::Semver.new('1.2.3-alpha.1+build.001').valid? # => true
Semverify::Semver.new('1.2.3-alpha').valid? # => raise Semverify::Error
Semverify::Semver.new('1.2.3-alpha.1.2').valid? # => raise Semverify::Error
Semverify::Semver.new('1.2.3-alpha.one').valid? # => raise Semverify::Error

Returns:

  • (Boolean)

    true if the version string is a valid semver and meets the conditions above



32
33
34
35
36
37
38
39
40
41
# File 'lib/semverify/incrementable_semver.rb', line 32

def valid?
  super && (
    pre_release.empty? ||
    (
      pre_release_identifiers.size == 2 &&
      pre_type.is_a?(String) &&
      pre_number.is_a?(Integer)
    )
  )
end