Class: SemanticVersion
- Inherits:
-
Object
- Object
- SemanticVersion
- Includes:
- Comparable
- Defined in:
- lib/prefab/semver.rb
Constant Summary collapse
- SEMVER_PATTERN =
/ ^ (?<major>0|[1-9]\d*) \. (?<minor>0|[1-9]\d*) \. (?<patch>0|[1-9]\d*) (?:-(?<prerelease> (?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*) (?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))* ))? (?:\+(?<buildmetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))? $ /x
Instance Attribute Summary collapse
-
#build_metadata ⇒ Object
readonly
Returns the value of attribute build_metadata.
-
#major ⇒ Object
readonly
Returns the value of attribute major.
-
#minor ⇒ Object
readonly
Returns the value of attribute minor.
-
#patch ⇒ Object
readonly
Returns the value of attribute patch.
-
#prerelease ⇒ Object
readonly
Returns the value of attribute prerelease.
Class Method Summary collapse
Instance Method Summary collapse
- #<=>(other) ⇒ Object
- #==(other) ⇒ Object
- #eql?(other) ⇒ Boolean
- #hash ⇒ Object
-
#initialize(major:, minor:, patch:, prerelease: nil, build_metadata: nil) ⇒ SemanticVersion
constructor
A new instance of SemanticVersion.
- #to_s ⇒ Object
Constructor Details
#initialize(major:, minor:, patch:, prerelease: nil, build_metadata: nil) ⇒ SemanticVersion
Returns a new instance of SemanticVersion.
45 46 47 48 49 50 51 |
# File 'lib/prefab/semver.rb', line 45 def initialize(major:, minor:, patch:, prerelease: nil, build_metadata: nil) @major = major @minor = minor @patch = patch @prerelease = prerelease @build_metadata = end |
Instance Attribute Details
#build_metadata ⇒ Object (readonly)
Returns the value of attribute build_metadata.
21 22 23 |
# File 'lib/prefab/semver.rb', line 21 def @build_metadata end |
#major ⇒ Object (readonly)
Returns the value of attribute major.
21 22 23 |
# File 'lib/prefab/semver.rb', line 21 def major @major end |
#minor ⇒ Object (readonly)
Returns the value of attribute minor.
21 22 23 |
# File 'lib/prefab/semver.rb', line 21 def minor @minor end |
#patch ⇒ Object (readonly)
Returns the value of attribute patch.
21 22 23 |
# File 'lib/prefab/semver.rb', line 21 def patch @patch end |
#prerelease ⇒ Object (readonly)
Returns the value of attribute prerelease.
21 22 23 |
# File 'lib/prefab/semver.rb', line 21 def prerelease @prerelease end |
Class Method Details
.parse(version_string) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/prefab/semver.rb', line 23 def self.parse(version_string) raise ArgumentError, "version string cannot be nil" if version_string.nil? raise ArgumentError, "version string cannot be empty" if version_string.empty? match = SEMVER_PATTERN.match(version_string) raise ArgumentError, "invalid semantic version format: #{version_string}" unless match new( major: match[:major].to_i, minor: match[:minor].to_i, patch: match[:patch].to_i, prerelease: match[:prerelease], build_metadata: match[:buildmetadata] ) end |
.parse_quietly(version_string) ⇒ Object
39 40 41 42 43 |
# File 'lib/prefab/semver.rb', line 39 def self.parse_quietly(version_string) parse(version_string) rescue ArgumentError nil end |
Instance Method Details
#<=>(other) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/prefab/semver.rb', line 53 def <=>(other) return nil unless other.is_a?(SemanticVersion) # Compare major.minor.patch return major <=> other.major if major != other.major return minor <=> other.minor if minor != other.minor return patch <=> other.patch if patch != other.patch # Compare pre-release versions compare_prerelease(prerelease, other.prerelease) end |
#==(other) ⇒ Object
65 66 67 68 69 70 71 72 73 |
# File 'lib/prefab/semver.rb', line 65 def ==(other) return false unless other.is_a?(SemanticVersion) major == other.major && minor == other.minor && patch == other.patch && prerelease == other.prerelease # Build metadata is ignored in equality checks end |
#eql?(other) ⇒ Boolean
75 76 77 |
# File 'lib/prefab/semver.rb', line 75 def eql?(other) self == other end |
#hash ⇒ Object
79 80 81 |
# File 'lib/prefab/semver.rb', line 79 def hash [major, minor, patch, prerelease].hash end |
#to_s ⇒ Object
83 84 85 86 87 88 |
# File 'lib/prefab/semver.rb', line 83 def to_s result = "#{major}.#{minor}.#{patch}" result += "-#{prerelease}" if prerelease result += "+#{}" if result end |