class Bundler::Runtime

def cache

def cache
  FileUtils.mkdir_p(cache_path)
  Bundler.ui.info "Updating .gem files in vendor/cache"
  specs.each do |spec|
    next if spec.name == 'bundler'
    spec.source.cache(spec) if spec.source.respond_to?(:cache)
  end
end

def cache_path

def cache_path
  root.join("vendor/cache")
end

def dependencies_for(*groups)

def dependencies_for(*groups)
  if groups.empty?
    dependencies
  else
    dependencies.select { |d| (groups & d.groups).any? }
  end
end

def initialize(*)

def initialize(*)
  super
  lock
end

def prune_cache

def prune_cache
  FileUtils.mkdir_p(cache_path)
  Bundler.ui.info "Removing outdated .gem files from vendor/cache"
  Pathname.glob(cache_path.join("*.gem").to_s).each do |gem_path|
    cached_spec = Gem::Format.from_file_by_path(gem_path).spec
    next unless Gem::Platform.match(cached_spec.platform)
    unless specs.any?{|s| s.full_name == cached_spec.full_name }
      Bundler.ui.info "  * #{File.basename(gem_path)}"
      gem_path.rmtree
    end
  end
end

def require(*groups)

def require(*groups)
  groups.map! { |g| g.to_sym }
  groups = [:default] if groups.empty?
  @definition.dependencies.each do |dep|
    # Skip the dependency if it is not in any of the requested
    # groups
    next unless (dep.groups & groups).any?
    begin
      # Loop through all the specified autorequires for the
      # dependency. If there are none, use the dependency's name
      # as the autorequire.
      Array(dep.autorequire || dep.name).each do |file|
        Kernel.require file
      end
    rescue LoadError
      # Only let a LoadError through if the autorequire was explicitly
      # specified by the user.
      raise if dep.autorequire
    end
  end
end

def setup(*groups)

def setup(*groups)
  # Has to happen first
  clean_load_path
  specs = groups.any? ? @definition.specs_for(groups) : requested_specs
  cripple_rubygems(specs)
  # Activate the specs
  specs.each do |spec|
    unless spec.loaded_from
      raise GemNotFound, "#{spec.full_name} is missing. Run `bundle` to get it."
    end
    if activated_spec = Gem.loaded_specs[spec.name] and activated_spec.version != spec.version
      e = Gem::LoadError.new "You have already activated #{activated_spec.name} #{activated_spec.version}, " \
                             "but your Gemfile requires #{spec.name} #{spec.version}. Consider using bundle exec."
      e.name = spec.name
      e.version_requirement = Gem::Requirement.new(spec.version.to_s)
      raise e
    end
    Gem.loaded_specs[spec.name] = spec
    load_paths = spec.load_paths.reject {|path| $LOAD_PATH.include?(path)}
    $LOAD_PATH.unshift(*load_paths)
  end
  self
end