# File lib/rubygems.rb, line 229
    def activate(gem, autorequire, *version_requirements)
      unless version_requirements.size > 0
        version_requirements = [">= 0.0.0"]
      end
      unless gem.respond_to?(:name) && gem.respond_to?(:version_requirements)
        gem = Gem::Dependency.new(gem, version_requirements)
      end

      matches = Gem.source_index.find_name(gem.name, gem.version_requirements)
      report_activate_error(gem) if matches.empty?

      if @loaded_specs[gem.name]
        # This gem is already loaded.  If the currently loaded gem is
        # not in the list of candidate gems, then we have a version
        # conflict.
        existing_spec = @loaded_specs[gem.name]
        if ! matches.any? { |spec| spec.version == existing_spec.version }
          fail Gem::Exception, "can't activate #{gem}, already activated #{existing_spec.full_name}]"
        end
        return false
      end

      # new load
      spec = matches.last
      if spec.loaded?
        return false unless autorequire
        result = spec.autorequire ? require(spec.autorequire) : false
        return result || false 
      end

      spec.loaded = true
      @loaded_specs[spec.name] = spec
      
      # Load dependent gems first
      spec.dependencies.each do |dep_gem|
        activate(dep_gem, autorequire)
      end
      
      # add bin dir to require_path
      if(spec.bindir) then
        spec.require_paths << spec.bindir
      end
      
      # Now add the require_paths to the LOAD_PATH
      spec.require_paths.each do |path|
        $:.unshift File.join(spec.full_gem_path, path)
      end
      
      if autorequire && spec.autorequire then
        Array(spec.autorequire).each do |a_lib|
          require a_lib
        end
      end

      return true
    end