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
- #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.
67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/vseries/semantic_version.rb', line 67 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.
65 66 67 |
# File 'lib/vseries/semantic_version.rb', line 65 def major @major end |
#minor ⇒ Object
Returns the value of attribute minor.
65 66 67 |
# File 'lib/vseries/semantic_version.rb', line 65 def minor @minor end |
#patch ⇒ Object
Returns the value of attribute patch.
65 66 67 |
# File 'lib/vseries/semantic_version.rb', line 65 def patch @patch end |
#pre_release ⇒ Object
Returns the value of attribute pre_release.
65 66 67 |
# File 'lib/vseries/semantic_version.rb', line 65 def pre_release @pre_release end |
Instance Method Details
#<=>(other) ⇒ Object
117 118 119 120 121 122 123 124 125 |
# File 'lib/vseries/semantic_version.rb', line 117 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
113 114 115 |
# File 'lib/vseries/semantic_version.rb', line 113 def pre_release? pre_release.present? end |
#to_s ⇒ Object
127 128 129 130 131 |
# File 'lib/vseries/semantic_version.rb', line 127 def to_s version = "#{@major}.#{@minor}.#{@patch}" version << @pre_release.to_s if @pre_release version end |
#up(version_type) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/vseries/semantic_version.rb', line 80 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
103 104 105 106 107 108 109 110 111 |
# File 'lib/vseries/semantic_version.rb', line 103 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 |