class Bundler::Resolver

def requirement_to_range(requirement)

def requirement_to_range(requirement)
  ranges = requirement.requirements.map do |(op, version)|
    ver = Resolver::Candidate.new(version).generic!
    platform_ver = Resolver::Candidate.new(version).platform_specific!
    case op
    when "~>"
      name = "~> #{ver}"
      bump = Resolver::Candidate.new(version.bump.to_s + ".A")
      PubGrub::VersionRange.new(name: name, min: ver, max: bump, include_min: true)
    when ">"
      PubGrub::VersionRange.new(min: platform_ver)
    when ">="
      PubGrub::VersionRange.new(min: ver, include_min: true)
    when "<"
      PubGrub::VersionRange.new(max: ver)
    when "<="
      PubGrub::VersionRange.new(max: platform_ver, include_max: true)
    when "="
      PubGrub::VersionRange.new(min: ver, max: platform_ver, include_min: true, include_max: true)
    when "!="
      PubGrub::VersionRange.new(min: ver, max: platform_ver, include_min: true, include_max: true).invert
    else
      raise "bad version specifier: #{op}"
    end
  end
  ranges.inject(&:intersect)
end