class SemanticVersion
Attributes
prefix_delimiter[R]
prefix_segments[R]
segments[R]
suffix_segments[R]
version_string[R]
Public Class Methods
new(version_string, segments = nil)
click to toggle source
# File lib/semver_dialects/semantic_version/semantic_version.rb, line 8 def initialize(version_string, segments = nil) @version_string = version_string @prefix_segments = [] @suffix_segments = [] @prefix_delimiter = 0 version, _ = version_string.split('+') if segments.nil? @segments = split_version_string!(version) else @prefix_segments = segments @prefix_delimiter = segments.size - 1 @segments = segments end end
Public Instance Methods
!=(other_semver)
click to toggle source
# File lib/semver_dialects/semantic_version/semantic_version.rb, line 159 def !=(other_semver) return !(self == other_semver) end
<(other_semver)
click to toggle source
# File lib/semver_dialects/semantic_version/semantic_version.rb, line 91 def <(other_semver) self_array, other_array = get_equalized_arrays_for(self, other_semver) (0..self_array.size - 1).each { |i| if self_array[i] < other_array[i] return true elsif self_array[i] > other_array[i] return false end } false end
<=(other_semver)
click to toggle source
# File lib/semver_dialects/semantic_version/semantic_version.rb, line 133 def <=(other_semver) self == other_semver || self < other_semver end
==(other_semver)
click to toggle source
# File lib/semver_dialects/semantic_version/semantic_version.rb, line 137 def ==(other_semver) segments_a = [] segments_b = [] segments_a += other_semver.segments segments_b += @segments if other_semver.segments.size < @segments.size (@segments.size - other_semver.segments.size).times {|_| segments_a << SemanticVersionSegment.new("0")} elsif other_semver.segments.size > @segments.size (other_semver.segments.size - @segments.size).times {|_| segments_b << SemanticVersionSegment.new("0") } end (0..segments_a.size - 1).each { |i| if segments_a[i] != segments_b[i] return false end } true end
>(other_semver)
click to toggle source
# File lib/semver_dialects/semantic_version/semantic_version.rb, line 116 def >(other_semver) self_array, other_array = get_equalized_arrays_for(self, other_semver) (0..self_array.size - 1).each { |i| if self_array[i] > other_array[i] return true elsif self_array[i] < other_array[i] return false end } false end
>=(other_semver)
click to toggle source
# File lib/semver_dialects/semantic_version/semantic_version.rb, line 129 def >=(other_semver) self == other_semver || self > other_semver || self == other_semver end
_get_equalized_arrays_for(array_a, array_b)
click to toggle source
# File lib/semver_dialects/semantic_version/semantic_version.rb, line 59 def _get_equalized_arrays_for(array_a, array_b) first_array = array_a.clone() second_array = array_b.clone() if first_array.size < second_array.size (second_array.size - first_array.size).times do first_array << SemanticVersionSegment.new("0") end elsif first_array.size > second_array.size (first_array.size - second_array.size).times do second_array << SemanticVersionSegment.new("0") end end [first_array, second_array] end
cross_total()
click to toggle source
# File lib/semver_dialects/semantic_version/semantic_version.rb, line 200 def cross_total() [self.major, self.minor, self.patch].reject { |i| i.empty? }.map { |i| i.to_i }.inject(0) { |sum, x| sum + x } end
diff(other_semver, abs = true)
click to toggle source
# File lib/semver_dialects/semantic_version/semantic_version.rb, line 163 def diff(other_semver, abs = true) diffs = [] self_array, other_array = get_equalized_prefix_arrays_for(self, other_semver) (0..self_array.size - 1).each { |i| # diff semantic groups diffs << (self_array[i].diff(other_array[i], abs)) } diffs end
get_equalized_arrays_for(semver_a, semver_b)
click to toggle source
# File lib/semver_dialects/semantic_version/semantic_version.rb, line 74 def get_equalized_arrays_for(semver_a, semver_b) first_array_prefix = semver_a.prefix_segments.clone() second_array_prefix = semver_b.prefix_segments.clone() first_array_suffix = semver_a.suffix_segments.clone() second_array_suffix = semver_b.suffix_segments.clone() first_array_prefix, second_array_prefix = _get_equalized_arrays_for(first_array_prefix, second_array_prefix) first_array_suffix, second_array_suffix = _get_equalized_arrays_for(first_array_suffix, second_array_suffix) [first_array_prefix.concat(first_array_suffix), second_array_prefix.concat(second_array_suffix)] end
get_equalized_prefix_arrays_for(semver_a, semver_b)
click to toggle source
# File lib/semver_dialects/semantic_version/semantic_version.rb, line 84 def get_equalized_prefix_arrays_for(semver_a, semver_b) first_array_prefix = semver_a.prefix_segments.clone() second_array_prefix = semver_b.prefix_segments.clone() first_array_prefix, second_array_prefix = _get_equalized_arrays_for(first_array_prefix, second_array_prefix) [first_array_prefix, second_array_prefix] end
is_successor_of?(other_semver)
click to toggle source
# File lib/semver_dialects/semantic_version/semantic_version.rb, line 195 def is_successor_of?(other_semver) filtered_segments = self.diff(other_semver, false).reject { |i| i.to_i == 0 } filtered_segments.size == 1 && filtered_segments.last.to_i == 1 end
is_zero?()
click to toggle source
# File lib/semver_dialects/semantic_version/semantic_version.rb, line 104 def is_zero? @prefix_segments.empty? || @prefix_segments.all? { |segment| segment.is_zero? } end
major()
click to toggle source
# File lib/semver_dialects/semantic_version/semantic_version.rb, line 187 def major @prefix_segments.size >= 2 ? @prefix_segments[0].to_s : "0" end
minor()
click to toggle source
# File lib/semver_dialects/semantic_version/semantic_version.rb, line 183 def minor @prefix_segments.size >= 1 ? @prefix_segments[1].to_s : "0" end
patch()
click to toggle source
# File lib/semver_dialects/semantic_version/semantic_version.rb, line 191 def patch @prefix_segments.size >= 3 ? @prefix_segments[2].to_s : "0" end
post_release?()
click to toggle source
# File lib/semver_dialects/semantic_version/semantic_version.rb, line 112 def post_release? @suffix_segments.any?(&:is_post_release) end
pre_release?()
click to toggle source
# File lib/semver_dialects/semantic_version/semantic_version.rb, line 108 def pre_release? @suffix_segments.any?(&:is_pre_release) end
split_version_string!(version_string)
click to toggle source
# File lib/semver_dialects/semantic_version/semantic_version.rb, line 23 def split_version_string!(version_string) delim_pattern = /[\.\-]/ split_array = version_string.split(delim_pattern).map { |grp| grp.split(/(\d+)/).reject { |cell| cell.nil? || cell.empty? } }.flatten # go as far to the right as possible considering numbers and placeholders (0..split_array.size - 1).each do |i| if split_array[i].number? || split_array[i] == "X" || split_array[i] == "x" @prefix_delimiter = i else break end end # remove redundant trailing zeros @prefix_delimiter.downto(0).each do |i| if split_array[i] == "0" split_array.delete_at(i) @prefix_delimiter -= 1 else break end end @prefix_segments = split_array[0..@prefix_delimiter].map { |group_string| SemanticVersionSegment.new(group_string) } unless @prefix_delimiter < 0 if split_array.size - 1 >= @prefix_delimiter + 1 @suffix_segments = split_array[@prefix_delimiter + 1, split_array.size].map { |group_string| SemanticVersionSegment.new(group_string) } end @prefix_segments.clone().concat(@suffix_segments) end
to_normalized_s()
click to toggle source
# File lib/semver_dialects/semantic_version/semantic_version.rb, line 175 def to_normalized_s @segments.map { |group| group.to_normalized_s }.join(":").to_s end
to_s()
click to toggle source
# File lib/semver_dialects/semantic_version/semantic_version.rb, line 179 def to_s @segments.map { |group| group.to_s }.join(":").to_s end