class Bundler::PubGrub::VersionUnion
Attributes
ranges[R]
Public Class Methods
new(ranges)
click to toggle source
# File bundler/vendor/pub_grub/lib/pub_grub/version_union.rb, line 42 def initialize(ranges) raise ArgumentError unless ranges.all? { |r| r.instance_of?(VersionRange) } @ranges = ranges end
normalize_ranges(ranges)
click to toggle source
# File bundler/vendor/pub_grub/lib/pub_grub/version_union.rb, line 7 def self.normalize_ranges(ranges) ranges = ranges.flat_map do |range| range.ranges end ranges.reject!(&:empty?) return [] if ranges.empty? mins, ranges = ranges.partition { |r| !r.min } original_ranges = mins + ranges.sort_by { |r| [r.min, r.include_min ? 0 : 1] } ranges = [original_ranges.shift] original_ranges.each do |range| if ranges.last.contiguous_to?(range) ranges << ranges.pop.span(range) else ranges << range end end ranges end
union(ranges, normalize: true)
click to toggle source
# File bundler/vendor/pub_grub/lib/pub_grub/version_union.rb, line 30 def self.union(ranges, normalize: true) ranges = normalize_ranges(ranges) if normalize if ranges.size == 0 VersionRange.empty elsif ranges.size == 1 ranges[0] else new(ranges) end end
Public Instance Methods
==(other)
click to toggle source
# File bundler/vendor/pub_grub/lib/pub_grub/version_union.rb, line 173 def ==(other) self.class == other.class && self.ranges == other.ranges end
allows_all?(other)
click to toggle source
# File bundler/vendor/pub_grub/lib/pub_grub/version_union.rb, line 89 def allows_all?(other) my_ranges = ranges.dup my_range = my_ranges.shift other.ranges.all? do |other_range| while my_range break if my_range.allows_all?(other_range) my_range = my_ranges.shift end !!my_range end end
any?()
click to toggle source
# File bundler/vendor/pub_grub/lib/pub_grub/version_union.rb, line 108 def any? false end
empty?()
click to toggle source
# File bundler/vendor/pub_grub/lib/pub_grub/version_union.rb, line 104 def empty? false end
eql?(other)
click to toggle source
# File bundler/vendor/pub_grub/lib/pub_grub/version_union.rb, line 51 def eql?(other) ranges.eql?(other.ranges) end
hash()
click to toggle source
# File bundler/vendor/pub_grub/lib/pub_grub/version_union.rb, line 47 def hash ranges.hash end
include?(version)
click to toggle source
# File bundler/vendor/pub_grub/lib/pub_grub/version_union.rb, line 55 def include?(version) !!ranges.bsearch {|r| r.compare_version(version) } end
inspect()
click to toggle source
# File bundler/vendor/pub_grub/lib/pub_grub/version_union.rb, line 169 def inspect "#<#{self.class} #{to_s}>" end
intersect(other)
click to toggle source
# File bundler/vendor/pub_grub/lib/pub_grub/version_union.rb, line 112 def intersect(other) my_ranges = ranges.dup other_ranges = other.ranges.dup new_ranges = [] my_range = my_ranges.shift other_range = other_ranges.shift while my_range && other_range new_ranges << my_range.intersect(other_range) if !my_range.max || other_range.empty? || (other_range.max && other_range.max < my_range.max) other_range = other_ranges.shift else my_range = my_ranges.shift end end new_ranges.reject!(&:empty?) VersionUnion.union(new_ranges, normalize: false) end
intersects?(other)
click to toggle source
# File bundler/vendor/pub_grub/lib/pub_grub/version_union.rb, line 69 def intersects?(other) my_ranges = ranges.dup other_ranges = other.ranges.dup my_range = my_ranges.shift other_range = other_ranges.shift while my_range && other_range if my_range.intersects?(other_range) return true end if !my_range.max || other_range.empty? || (other_range.max && other_range.max < my_range.max) other_range = other_ranges.shift else my_range = my_ranges.shift end end end
Also aliased as: allows_any?
invert()
click to toggle source
# File bundler/vendor/pub_grub/lib/pub_grub/version_union.rb, line 136 def invert ranges.map(&:invert).inject(:intersect) end
select_versions(all_versions)
click to toggle source
# File bundler/vendor/pub_grub/lib/pub_grub/version_union.rb, line 59 def select_versions(all_versions) versions = [] ranges.inject(all_versions) do |acc, range| _, matching, higher = range.partition_versions(acc) versions.concat matching higher end versions end
to_s()
click to toggle source
# File bundler/vendor/pub_grub/lib/pub_grub/version_union.rb, line 144 def to_s output = [] ranges = self.ranges.dup while !ranges.empty? ne = [] range = ranges.shift while !ranges.empty? && ranges[0].min.to_s == range.max.to_s ne << range.max range = range.span(ranges.shift) end ne.map! {|x| "!= #{x}" } if ne.empty? output << range.to_s elsif range.any? output << ne.join(', ') else output << "#{range}, #{ne.join(', ')}" end end output.join(" OR ") end
union(other)
click to toggle source
# File bundler/vendor/pub_grub/lib/pub_grub/version_union.rb, line 140 def union(other) VersionUnion.union([self, other]) end
upper_invert()
click to toggle source
# File bundler/vendor/pub_grub/lib/pub_grub/version_union.rb, line 132 def upper_invert ranges.last.upper_invert end