Class: SemiSemantic::Version
- Inherits:
-
Object
- Object
- SemiSemantic::Version
- Includes:
- Comparable
- Defined in:
- lib/semi_semantic/version.rb
Constant Summary collapse
- PRE_RELEASE_PREFIX =
'-'
- POST_RELEASE_PREFIX =
'+'
Instance Attribute Summary collapse
-
#post_release ⇒ Object
readonly
Returns the value of attribute post_release.
-
#pre_release ⇒ Object
readonly
Returns the value of attribute pre_release.
-
#release ⇒ Object
readonly
Returns the value of attribute release.
-
#segments ⇒ Object
readonly
Returns the value of attribute segments.
Class Method Summary collapse
-
.parse(version_string) ⇒ Object
Parses a semi-semantic version string into up to three segments Raises a ParseError if the string format is invalid Raises an ArgumentError if version_string is nil.
Instance Method Summary collapse
- #<=>(other) ⇒ Object
-
#initialize(release, pre_release = nil, post_release = nil) ⇒ Version
constructor
A new instance of Version.
- #to_s ⇒ Object
Constructor Details
#initialize(release, pre_release = nil, post_release = nil) ⇒ Version
34 35 36 37 38 39 40 41 42 43 |
# File 'lib/semi_semantic/version.rb', line 34 def initialize(release, pre_release=nil, post_release=nil) raise ArgumentError.new 'Invalid Release: nil' if release.nil? @release = release @pre_release = pre_release @post_release = post_release @segments = [release] @segments << pre_release unless pre_release.nil? @segments << post_release unless post_release.nil? end |
Instance Attribute Details
#post_release ⇒ Object (readonly)
Returns the value of attribute post_release.
11 12 13 |
# File 'lib/semi_semantic/version.rb', line 11 def post_release @post_release end |
#pre_release ⇒ Object (readonly)
Returns the value of attribute pre_release.
11 12 13 |
# File 'lib/semi_semantic/version.rb', line 11 def pre_release @pre_release end |
#release ⇒ Object (readonly)
Returns the value of attribute release.
11 12 13 |
# File 'lib/semi_semantic/version.rb', line 11 def release @release end |
#segments ⇒ Object (readonly)
Returns the value of attribute segments.
11 12 13 |
# File 'lib/semi_semantic/version.rb', line 11 def segments @segments end |
Class Method Details
.parse(version_string) ⇒ Object
Parses a semi-semantic version string into up to three segments Raises a ParseError if the string format is invalid Raises an ArgumentError if version_string is nil
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/semi_semantic/version.rb', line 16 def self.parse(version_string) raise ArgumentError.new 'Invalid Version String: nil' if version_string.nil? raise ArgumentError.new "Invalid Version String: '#{version_string}'" if version_string == '' matches = /^(?<release>[0-9A-Za-z_\.]+)(\-(?<pre_release>[0-9A-Za-z_\-\.]+))?(\+(?<post_release>[0-9A-Za-z_\-\.]+))?$/.match(version_string) raise ParseError.new "Invalid Version Format: '#{version_string}'" if matches.nil? release = VersionSegment.parse matches[:release] pre_release = nil if matches[:pre_release] pre_release = VersionSegment.parse matches[:pre_release] end post_release = nil if matches[:post_release] post_release = VersionSegment.parse matches[:post_release] end self.new(release, pre_release, post_release) end |
Instance Method Details
#<=>(other) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/semi_semantic/version.rb', line 45 def <=>(other) result = (@release <=> other.release) return result unless result == 0 unless @pre_release.nil? && other.pre_release.nil? return 1 if @pre_release.nil? return -1 if other.pre_release.nil? result = (@pre_release <=> other.pre_release) return result unless result == 0 end unless @post_release.nil? && other.post_release.nil? return -1 if @post_release.nil? return 1 if other.post_release.nil? result = (@post_release <=> other.post_release) return result unless result == 0 end 0 end |
#to_s ⇒ Object
66 67 68 69 70 71 |
# File 'lib/semi_semantic/version.rb', line 66 def to_s str = @release.to_s str += PRE_RELEASE_PREFIX + @pre_release.to_s unless @pre_release.nil? str += POST_RELEASE_PREFIX + @post_release.to_s unless @post_release.nil? str end |