Class: Vseries::SemanticVersion
- Inherits:
-
Object
- Object
- Vseries::SemanticVersion
- 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
-
#major ⇒ Object
Returns the value of attribute major.
-
#minor ⇒ Object
Returns the value of attribute minor.
-
#patch ⇒ Object
Returns the value of attribute patch.
-
#pre_release ⇒ Object
Returns the value of attribute pre_release.
Instance Method Summary collapse
- #<=>(other) ⇒ Object
-
#initialize(version, pre_release_initial_number: DEFAULT_PRE_RELEASE_INITIAL_NUMBER) ⇒ SemanticVersion
constructor
A new instance of SemanticVersion.
- #pre_release? ⇒ Boolean
- #release_version ⇒ Object
- #to_s ⇒ Object
- #up(version_type) ⇒ Object
- #with_pre_release(name) ⇒ Object
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
#major ⇒ Object
Returns the value of attribute major.
69 70 71 |
# File 'lib/vseries/semantic_version.rb', line 69 def major @major end |
#minor ⇒ Object
Returns the value of attribute minor.
69 70 71 |
# File 'lib/vseries/semantic_version.rb', line 69 def minor @minor end |
#patch ⇒ Object
Returns the value of attribute patch.
69 70 71 |
# File 'lib/vseries/semantic_version.rb', line 69 def patch @patch end |
#pre_release ⇒ Object
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
123 124 125 |
# File 'lib/vseries/semantic_version.rb', line 123 def pre_release? pre_release.present? end |
#release_version ⇒ Object
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_s ⇒ Object
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 |