Class: SpmVersionUpdates::Semver

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/spm_version_updates/semver.rb

Overview

SemVer value object used by both the GitHub Action and legacy Danger plugin.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(value) ⇒ Semver

Returns a new instance of Semver.



18
19
20
21
22
# File 'lib/spm_version_updates/semver.rb', line 18

def initialize(value)
  @version = Semverify::Semver.new(self.class.normalize(value))
rescue Semverify::Error => error
  raise(ArgumentError, error.message)
end

Class Method Details

.normalize(value) ⇒ Object



12
13
14
15
16
# File 'lib/spm_version_updates/semver.rb', line 12

def self.normalize(value)
  value.to_s
    .sub(/\Av(?=\d)/, "")
    .sub(/\A(\d+)\.(\d+)(?=\z|[-+])/, '\1.\2.0')
end

Instance Method Details

#<=>(other) ⇒ Object



24
25
26
27
28
29
30
# File 'lib/spm_version_updates/semver.rb', line 24

def <=>(other)
  semver_class = self.class
  other_version = other.kind_of?(semver_class) ? other.version : semver_class.new(other).version
  version <=> other_version
rescue ArgumentError
  nil
end

#majorObject



32
33
34
# File 'lib/spm_version_updates/semver.rb', line 32

def major
  version.major.to_i
end

#minorObject



36
37
38
# File 'lib/spm_version_updates/semver.rb', line 36

def minor
  version.minor.to_i
end

#patchObject



40
41
42
# File 'lib/spm_version_updates/semver.rb', line 40

def patch
  version.patch.to_i
end

#preObject Also known as: pre_release



44
45
46
# File 'lib/spm_version_updates/semver.rb', line 44

def pre
  version.pre_release.to_s.then { |value| value.empty? ? nil : value }
end

#to_sObject



49
50
51
# File 'lib/spm_version_updates/semver.rb', line 49

def to_s
  version.to_s
end