class Bundler::PubGrub::VersionUnion

def intersect(other)

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