Module: Vers::PubVersion
Constant Summary collapse
- PATTERN =
/\A[0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?\z/
Instance Method Summary collapse
- #compare(left, right) ⇒ Object
- #compare_build(left, right) ⇒ Object
- #normalize(value) ⇒ Object
- #parse(value) ⇒ Object
- #prerelease?(value) ⇒ Boolean
- #valid?(value) ⇒ Boolean
Instance Method Details
#compare(left, right) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/vers/pub_version.rb', line 9 def compare(left, right) parsed_left = parse(left) parsed_right = parse(right) return Version.compare(left, right) unless parsed_left && parsed_right parsed_left.core.zip(parsed_right.core).each do |left_part, right_part| comparison = VersionComparison.compare_numbers(left_part, right_part) return comparison unless comparison.zero? end comparison = SemverVersion.compare_prerelease(parsed_left.prerelease, parsed_right.prerelease) return comparison unless comparison.zero? compare_build(parsed_left.build, parsed_right.build) end |
#compare_build(left, right) ⇒ Object
51 52 53 54 55 56 57 |
# File 'lib/vers/pub_version.rb', line 51 def compare_build(left, right) return 0 if left.empty? && right.empty? return -1 if left.empty? return 1 if right.empty? SemverVersion.compare_prerelease(left, right) end |
#normalize(value) ⇒ Object
35 36 37 38 39 40 41 42 43 44 |
# File 'lib/vers/pub_version.rb', line 35 def normalize(value) normalized = SemverVersion.normalize(value.to_s.strip) core_and_prerelease, build = normalized.split("+", 2) return core_and_prerelease unless build normalized_build = build.split(".").map do |part| VersionComparison.numeric?(part) ? VersionComparison.normalize_number(part) : part end "#{core_and_prerelease}+#{normalized_build.join(".")}" end |
#parse(value) ⇒ Object
25 26 27 28 29 |
# File 'lib/vers/pub_version.rb', line 25 def parse(value) return nil unless PATTERN.match?(value.to_s) SemverVersion.parse(value) end |
#prerelease?(value) ⇒ Boolean
46 47 48 49 |
# File 'lib/vers/pub_version.rb', line 46 def prerelease?(value) parsed = parse(value.to_s.strip) parsed && !parsed.prerelease.empty? end |
#valid?(value) ⇒ Boolean
31 32 33 |
# File 'lib/vers/pub_version.rb', line 31 def valid?(value) !parse(value.to_s.strip).nil? end |