define_publish_tasks (Hoe::Publish)

    # File lib/hoe/publish.rb, line 87
      def define_publish_tasks
        if need_rdoc then
          Rake::RDocTask.new(:docs) do |rd|
            rd.main = readme_file
            rd.options << '-d' if (`which dot` =~ /\/dot/) unless
              ENV['NODOT'] || Hoe::WINDOZE
            rd.rdoc_dir = 'doc'

            rd.rdoc_files += spec.require_paths
            rd.rdoc_files += spec.extra_rdoc_files

            title = spec.rdoc_options.grep(/^(-t|--title)=?$/).first

            if title then
              rd.options << title

              unless title =~ /=/ then # for ['-t', 'title here']
                title_index = spec.rdoc_options.index(title)
                rd.options << spec.rdoc_options[title_index + 1]
              end
            else
              title = "#{name}-#{version} Documentation"
              title = "#{rubyforge_name}'s " + title if rubyforge_name != name
              rd.options << '--title' << title
            end
          end

          desc 'Generate ri locally for testing.'
          task :ridocs => :clean do
            sh %q{ rdoc --ri -o ri . }
          end
        end

        desc 'Publish RDoc to RubyForge.'
        task :publish_docs => [:clean, :docs] do
          config = YAML.load(File.read(File.expand_path("~/.rubyforge/user-config.yml")))
          host = "#{config["username"]}@rubyforge.org"

          remote_dir = "/var/www/gforge-projects/#{rubyforge_name}/#{remote_rdoc_dir}"
          local_dir = local_rdoc_dir

          sh %{rsync #{rsync_args} #{local_dir}/ #{host}:#{remote_dir}}
        end

        # no doco for this one
        task :publish_on_announce do
          with_config do |config, _|
            Rake::Task['publish_docs'].invoke if config["publish_on_announce"]
          end
        end

        desc 'Generate email announcement file.'
        task :debug_email do
          puts generate_email
        end

        desc 'Post announcement to blog.'
        task :post_blog do
          require 'xmlrpc/client'

          with_config do |config, path|
            break unless config['blogs']

            subject, title, body, urls = announcement
            body += "\n\n#{urls}"

            config['blogs'].each do |site|
              server = XMLRPC::Client.new2(site['url'])
              content = site['extra_headers'].merge(:title => title,
                                                    :description => body,
                                                    :categories => blog_categories)

              result = server.call('metaWeblog.newPost',
                                   site['blog_id'],
                                   site['user'],
                                   site['password'],
                                   content,
                                   true)
            end
          end
        end

        desc 'Post announcement to rubyforge.'
        task :post_news do
          require 'rubyforge'
          subject, title, body, urls = announcement

          rf = RubyForge.new.configure
          rf.login
          rf.post_news(rubyforge_name, subject, "#{title}\n\n#{body}")
          puts "Posted to rubyforge"
        end

        desc 'Announce your release.'
        task :announce => [:post_news, :post_blog, :publish_on_announce ]
      end