Class: Vseries::SemanticVersion

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

Defined Under Namespace

Classes: PreRelease

Constant Summary collapse

REGEXP =
/(\d+)\.(\d+)\.(\d+)(-?.*)/
DEFAULT_PRE_RELEASE_INITIAL_NUMBER =
1

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(version, pre_release_initial_number: DEFAULT_PRE_RELEASE_INITIAL_NUMBER) ⇒ SemanticVersion

Returns a new instance of SemanticVersion.



71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/vseries/semantic_version.rb', line 71

def initialize(version, pre_release_initial_number: DEFAULT_PRE_RELEASE_INITIAL_NUMBER)
  major, minor, patch, pre_release = version.match(REGEXP).captures

  @major = major.to_i
  @minor = minor.to_i
  @patch = patch.to_i
  @pre_release = PreRelease.new(pre_release)

  @pre_release_initial_number = pre_release_initial_number

  freeze
end

Instance Attribute Details

#majorObject

Returns the value of attribute major.



69
70
71
# File 'lib/vseries/semantic_version.rb', line 69

def major
  @major
end

#minorObject

Returns the value of attribute minor.



69
70
71
# File 'lib/vseries/semantic_version.rb', line 69

def minor
  @minor
end

#patchObject

Returns the value of attribute patch.



69
70
71
# File 'lib/vseries/semantic_version.rb', line 69

def patch
  @patch
end

#pre_releaseObject

Returns the value of attribute pre_release.



69
70
71
# File 'lib/vseries/semantic_version.rb', line 69

def pre_release
  @pre_release
end

Instance Method Details

#<=>(other) ⇒ Object



127
128
129
130
131
132
133
134
135
# File 'lib/vseries/semantic_version.rb', line 127

def <=>(other)
  return 1 if major > other.major
  return 1 if major == other.major && minor > other.minor
  return 1 if major == other.major && minor == other.minor && patch > other.patch
  return 1 if major == other.major && minor == other.minor && patch == other.patch && pre_release > other.pre_release
  return 0 if major == other.major && minor == other.minor && patch == other.patch && pre_release == other.pre_release

  -1
end

#pre_release?Boolean

Returns:

  • (Boolean)


123
124
125
# File 'lib/vseries/semantic_version.rb', line 123

def pre_release?
  pre_release.present?
end

#release_versionObject



117
118
119
120
121
# File 'lib/vseries/semantic_version.rb', line 117

def release_version
  new_version = self.dup
  new_version.pre_release = PreRelease.empty
  new_version
end

#to_sObject



137
138
139
140
141
# File 'lib/vseries/semantic_version.rb', line 137

def to_s
  version = "#{@major}.#{@minor}.#{@patch}"
  version << @pre_release.to_s if @pre_release
  version
end

#up(version_type) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/vseries/semantic_version.rb', line 84

def up(version_type)
  new_version = self.dup

  case version_type
  when :major
    new_version.major += 1
    new_version.minor = 0
    new_version.patch = 0
    new_version.pre_release.number = @pre_release_initial_number if pre_release?
  when :minor
    new_version.minor += 1
    new_version.patch = 0
    new_version.pre_release.number = @pre_release_initial_number if pre_release?
  when :patch
    new_version.patch += 1
    new_version.pre_release.number = @pre_release_initial_number if pre_release?
  when :pre_release
    new_version.pre_release = new_version.pre_release.up
  end

  new_version
end

#with_pre_release(name) ⇒ Object



107
108
109
110
111
112
113
114
115
# File 'lib/vseries/semantic_version.rb', line 107

def with_pre_release(name)
  new_version = self.dup

  return new_version if new_version.pre_release? && new_version.pre_release.name == name

  new_version.pre_release = PreRelease.with(name: name)

  new_version
end