Class: Vseries::SemanticVersion::PreRelease

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/vseries/semantic_version.rb

Constant Summary collapse

REGEXP =
/-?(.+)\.(\d+)/
BlankPreReleaseError =
Class.new(StandardError)

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(pre_release, initial_number: DEFAULT_PRE_RELEASE_INITIAL_NUMBER) ⇒ PreRelease

Returns a new instance of PreRelease.



23
24
25
26
27
28
29
30
31
# File 'lib/vseries/semantic_version.rb', line 23

def initialize(pre_release, initial_number: DEFAULT_PRE_RELEASE_INITIAL_NUMBER)
  name, number = pre_release.match(REGEXP)&.captures

  @initial_number = initial_number
  return if name.nil? && number.nil?

  @name = name
  @number = number ? number.to_i : initial_number
end

Instance Attribute Details

#nameObject

Returns the value of attribute name.



14
15
16
# File 'lib/vseries/semantic_version.rb', line 14

def name
  @name
end

#numberObject

Returns the value of attribute number.



14
15
16
# File 'lib/vseries/semantic_version.rb', line 14

def number
  @number
end

Class Method Details

.with(name:, number: DEFAULT_PRE_RELEASE_INITIAL_NUMBER) ⇒ Object



16
17
18
19
20
21
# File 'lib/vseries/semantic_version.rb', line 16

def self.with(name:, number: DEFAULT_PRE_RELEASE_INITIAL_NUMBER)
  instance = allocate
  instance.name = name
  instance.number = number
  instance
end

Instance Method Details

#<=>(other) ⇒ Object



41
42
43
44
45
46
47
48
# File 'lib/vseries/semantic_version.rb', line 41

def <=>(other)
  return  0 if blank? && other.blank?
  return -1 if present? && other.blank?
  return  1 if blank? && other.present?
  return  1 if @name > other.name

  @number <=> other.number
end

#blank?Boolean

Returns:

  • (Boolean)


50
51
52
# File 'lib/vseries/semantic_version.rb', line 50

def blank?
  name.nil? && number.nil?
end

#present?Boolean

Returns:

  • (Boolean)


54
55
56
# File 'lib/vseries/semantic_version.rb', line 54

def present?
  !blank?
end

#to_sObject



58
59
60
61
62
# File 'lib/vseries/semantic_version.rb', line 58

def to_s
  return '' if blank?

  "-#{@name}.#{@number}"
end

#upObject



33
34
35
36
37
38
39
# File 'lib/vseries/semantic_version.rb', line 33

def up
  raise BlankPreReleaseError if blank?

  new_pre_release = self.dup
  new_pre_release.number = number ? number + 1 : @initial_number
  new_pre_release
end