# File lib/rubygems/source_index.rb, line 203
    def search(gem_pattern, platform_only = false)
      version_requirement = nil
      only_platform = false

      case gem_pattern # TODO warn after 2008/03, remove three months after
      when Regexp then
        version_requirement = platform_only || Gem::Requirement.default
      when Gem::Dependency then
        only_platform = platform_only
        version_requirement = gem_pattern.version_requirements
        gem_pattern = if gem_pattern.name.empty? then
                        //
                      else
                        /^#{Regexp.escape gem_pattern.name}$/
                      end
      else
        version_requirement = platform_only || Gem::Requirement.default
        gem_pattern = /#{gem_pattern}/i
      end

      unless Gem::Requirement === version_requirement then
        version_requirement = Gem::Requirement.create version_requirement
      end

      specs = @gems.values.select do |spec|
        spec.name =~ gem_pattern and
          version_requirement.satisfied_by? spec.version
      end

      if only_platform then
        specs = specs.select do |spec|
          Gem::Platform.match spec.platform
        end
      end

      specs.sort_by { |s| s.sort_obj }
    end