Class: Semvruler::Semversion

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/semvruler/semversion.rb

Defined Under Namespace

Classes: FormatError

Constant Summary collapse

FORMAT =
/
  ^
  (?<major>0|[1-9]\d*)\.
  (?<minor>0|[1-9]\d*)
  (\.(?<patch>0|[1-9]\d*))?
  (-(?<prerelease>(0|[1-9]\d*|\d*[a-z-][0-9a-z-]*)(\.(0|[1-9]\d*|\d*[a-z-][0-9a-z-]*))*))?
  (\+(?<build>[0-9a-z-]+(\.[0-9a-z-]+)*))?
  $
/xi.freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(format) ⇒ Semversion

Returns a new instance of Semversion.



53
54
55
56
57
58
59
60
# File 'lib/semvruler/semversion.rb', line 53

def initialize(format)
  @major = format[:major].to_i
  @minor = format[:minor].to_i
  @patch = format[:patch].to_i
  @build = format[:build]
  @prerelease = format[:prerelease]&.split('.') || []
  @order = Order.new(@major, @minor, @patch, *@prerelease)
end

Instance Attribute Details

#buildObject (readonly)

Returns the value of attribute build.



47
48
49
# File 'lib/semvruler/semversion.rb', line 47

def build
  @build
end

#majorObject (readonly)

Returns the value of attribute major.



47
48
49
# File 'lib/semvruler/semversion.rb', line 47

def major
  @major
end

#minorObject (readonly)

Returns the value of attribute minor.



47
48
49
# File 'lib/semvruler/semversion.rb', line 47

def minor
  @minor
end

#patchObject (readonly)

Returns the value of attribute patch.



47
48
49
# File 'lib/semvruler/semversion.rb', line 47

def patch
  @patch
end

#prereleaseObject (readonly)

Returns the value of attribute prerelease.



47
48
49
# File 'lib/semvruler/semversion.rb', line 47

def prerelease
  @prerelease
end

Class Method Details

.parse(value, safe: true) ⇒ Object



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

def parse(value, safe: true)
  if value.respond_to?(:map)
    value.map { |item| cast(item, safe) }
  else
    cast(value, safe)
  end
end

Instance Method Details

#<=>(other) ⇒ Object



62
63
64
# File 'lib/semvruler/semversion.rb', line 62

def <=>(other)
  order <=> other.order
end

#to_sObject



49
50
51
# File 'lib/semvruler/semversion.rb', line 49

def to_s
  "#{core_as_string}#{prerelease_as_string}#{build_as_string}"
end