Index: lib/rubygems/doc_manager.rb
===================================================================
RCS file: /var/cvs/rubygems/rubygems/lib/rubygems/doc_manager.rb,v
retrieving revision 1.24
diff -u -r1.24 doc_manager.rb
--- lib/rubygems/doc_manager.rb	28 Feb 2005 21:10:06 -0000	1.24
+++ lib/rubygems/doc_manager.rb	17 Feb 2006 10:19:23 -0000
@@ -21,22 +21,19 @@
       return File.exist?(File.join(@doc_dir, "rdoc"))
     end
     
-    def install_doc(rdoc = true)
-      self.generate_rdoc if rdoc
+    def generate_rdoc
       require 'fileutils'
+
+      if @spec.has_rdoc then
+        load_rdoc
+        install_ri # RDoc bug, ri goes first
+        install_rdoc
+      end
+
       FileUtils.mkdir_p @doc_dir unless File.exist?(@doc_dir)
     end
 
-    ##
-    # Return Rdoc args as specified in gem spec.  If args exist in gemspec,
-    # append any user-defined args.  This behavior is open for a vote. 
-    def rdoc_args_from_spec(non_spec_args)
-      @spec.rdoc_options << non_spec_args 
-    end
-    
-    def generate_rdoc
-      return if @spec.has_rdoc == false
-      require 'fileutils'
+    def load_rdoc
       Gem::FilePermissionError.new(@doc_dir) if File.exist?(@doc_dir) && !File.writable?(@doc_dir)
       FileUtils.mkdir_p @doc_dir unless File.exist?(@doc_dir)
       begin
@@ -44,35 +41,53 @@
       rescue LoadError => e
         raise DocumentError, "ERROR: RDoc documentation generator not installed!"
       end
+    end
+
+    def install_rdoc
       say "Installing RDoc documentation for #{@spec.full_name}..."
-      rdoc_dir = File.join(@doc_dir, "rdoc")
       begin
-        source_dirs = @spec.require_paths.clone.concat(@spec.extra_rdoc_files)
-        current_dir = Dir.pwd
-        Dir.chdir(@spec.full_gem_path)
-        begin
-          @rdoc_args = rdoc_args_from_spec(@rdoc_args)
-          @rdoc_args.concat(DocManager.configured_args)
-          r = RDoc::RDoc.new
-          begin
-            r.document(['--quiet', '--op', rdoc_dir] + @rdoc_args.flatten + source_dirs)
-          rescue Errno::EACCES => e
-            raise Gem::FilePermissionError.new(File.dirname(e.message.split("-")[1].strip))
-          end
-	 #TODO: Why is this throwing an error?
-          #ri = RDoc::RDoc.new
-          #ri.document(['-R'] + source_dirs)
-        ensure
-          Dir.chdir(current_dir)
-        end
+        run_rdoc '--op', File.join(@doc_dir, 'rdoc')
       rescue RDoc::RDocError => e
         raise DocumentError, e.message
       end
     end
-    
+
+    def install_ri
+      say "Installing ri documentation for #{@spec.full_name}..."
+      begin
+        run_rdoc '--ri', '--op', File.join(@doc_dir, 'ri')
+      rescue RDoc::RDocError => e
+        raise DocumentError, e.message
+      end
+    end
+
+    def run_rdoc(*args)
+      args << @spec.rdoc_options
+      args << DocManager.configured_args
+      args << '--quiet'
+      args << @spec.require_paths.clone
+      args << @spec.extra_rdoc_files
+      args.flatten!
+
+      r = RDoc::RDoc.new
+
+      old_pwd = Dir.pwd
+      Dir.chdir @spec.full_gem_path
+      begin
+        r.document args
+      rescue Errno::EACCES => e
+        dirname = File.dirname e.message.split("-")[1].strip
+        raise Gem::FilePermissionError.new(dirname)
+      ensure
+        Dir.chdir old_pwd
+      end
+    end
+
     def uninstall_doc
       doc_dir = File.join(@spec.installation_path, "doc", @spec.full_name)
       FileUtils.rm_rf doc_dir
+      ri_dir = File.join(@spec.installation_path, "ri", @spec.full_name)
+      FileUtils.rm_rf ri_dir
     end
 
     class << self
