Module: Vers::ConanVersion
Instance Method Summary collapse
- #compare(left, right) ⇒ Object
- #compare_main(left, right) ⇒ Object
- #compare_optional(left, right, prerelease:) ⇒ Object
- #normalize(value) ⇒ Object
- #prerelease?(value) ⇒ Boolean
- #significant_parts(value) ⇒ Object
- #split(value) ⇒ Object
- #valid?(value) ⇒ Boolean
Instance Method Details
#compare(left, right) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/vers/conan_version.rb', line 9 def compare(left, right) left_main, left_pre, left_build = split(left) right_main, right_pre, right_build = split(right) comparison = compare_main(left_main, right_main) return comparison unless comparison.zero? comparison = compare_optional(left_pre, right_pre, prerelease: true) return comparison unless comparison.zero? compare_optional(left_build, right_build, prerelease: false) end |
#compare_main(left, right) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/vers/conan_version.rb', line 55 def compare_main(left, right) left_parts = significant_parts(left) right_parts = significant_parts(right) left_parts.zip(right_parts).each do |left_part, right_part| break unless left_part && right_part comparison = if VersionComparison.numeric?(left_part) && VersionComparison.numeric?(right_part) VersionComparison.compare_numbers(left_part, right_part) else left_part <=> right_part end return comparison unless comparison.zero? end left_parts.length <=> right_parts.length end |
#compare_optional(left, right, prerelease:) ⇒ Object
79 80 81 82 83 84 85 |
# File 'lib/vers/conan_version.rb', line 79 def compare_optional(left, right, prerelease:) return 0 if left.nil? && right.nil? return prerelease ? 1 : -1 if left.nil? return prerelease ? -1 : 1 if right.nil? compare(left, right) end |
#normalize(value) ⇒ Object
47 48 49 |
# File 'lib/vers/conan_version.rb', line 47 def normalize(value) value.to_s.strip end |
#prerelease?(value) ⇒ Boolean
51 52 53 |
# File 'lib/vers/conan_version.rb', line 51 def prerelease?(value) !split(value.to_s.strip)[1].nil? end |
#significant_parts(value) ⇒ Object
73 74 75 76 77 |
# File 'lib/vers/conan_version.rb', line 73 def significant_parts(value) parts = value.split(".", -1) parts.pop while parts.last && VersionComparison.numeric?(parts.last) && VersionComparison.compare_numbers(parts.last, "0").zero? parts end |
#split(value) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/vers/conan_version.rb', line 22 def split(value) main = value.to_s build = nil prerelease = nil separator = main.rindex("+") if separator build = main[(separator + 1)..] main = main[0...separator] end separator = main.rindex("-") if separator prerelease = main[(separator + 1)..] main = main[0...separator] end [main, prerelease, build] end |
#valid?(value) ⇒ Boolean
42 43 44 45 |
# File 'lib/vers/conan_version.rb', line 42 def valid?(value) string = value.to_s.strip !string.empty? && !string.match?(/[[:space:]]/) end |