require 'rake' require 'rake/tasklib' class Bueller # (Mostly deprecated) Rake tasks for putting a Bueller gem on Rubyforge. # # Bueller::Tasks.new needs to be used before this. # # Basic usage: # # Bueller::RubyforgeTasks.new # # There are a few options you can tweak: # # * project: the rubyforge project to operate on. This defaults to whatever you specified in your gemspec. Defaults to your gem name. # * remote_doc_path: the place to upload docs to on Rubyforge under /var/www/gforge-projects/#{project}/ # # See also http://wiki.github.com/technicalpickles/bueller/rubyforge class RubyforgeTasks < ::Rake::TaskLib # The RubyForge project to interact with. Defaults to whatever is in your bueller gemspec. attr_accessor :project # The path to upload docs to. It is relative to /var/www/gforge-projects/#{project}/, and defaults to your gemspec's name attr_accessor :remote_doc_path # Task to be used for generating documentation, before they are uploaded. Defaults to rdoc. attr_accessor :doc_task attr_accessor :bueller def initialize yield self if block_given? define end def bueller @bueller ||= Rake.application.bueller end def remote_doc_path @remote_doc_path ||= bueller.gemspec.name end def project @project ||= bueller.gemspec.rubyforge_project end def define namespace :rubyforge do namespace :release do desc "Pretend to release the current gem version to RubyForge, but actually release to Gemcutter." task :gem => 'gemcutter:release' if publish_documentation? desc "Publish docs to RubyForge." task :docs => doc_task do config = YAML.load( File.read(File.expand_path('~/.rubyforge/user-config.yml')) ) host = "#{config['username']}@rubyforge.org" remote_dir = "/var/www/gforge-projects/#{project}/#{remote_doc_path}" local_dir = case self.doc_task.to_sym when :rdoc then 'rdoc' when :yardoc then 'doc' else raise "Unsure what to run to generate documentation. Please set doc_task and re-run." end sh %{rsync --archive --verbose --delete #{local_dir}/ #{host}:#{remote_dir}} end end end if publish_documentation? desc "Release RDoc documentation to RubyForge" task :release => "rubyforge:release:docs" end end task :release => 'rubyforge:release' end def publish_documentation? ! (doc_task == false || doc_task == :none) end end end