module Hoe::Publish
Publish plugin for hoe.
Tasks Provided:¶ ↑
- announce
-
Create news email file and post to rubyforge.
- debug_email
-
Generate email announcement file.
- post_blog
-
Post announcement to blog.
- post_news
-
Post announcement to rubyforge.
- publish_docs
- ridocs
-
Generate ri locally for testing.
Extra Configuration Options:¶ ↑
- publish_on_announce
-
Run
publish_docs
when you runrelease
. - blogs
-
An array of hashes of blog settings.
Attributes
Optional: An array of the project's blog categories. Defaults to project name.
Optional: Name of destination directory for RDoc generated files.
- default: doc
Optional: Should RDoc and ri generation tasks be defined? [default: true]
Allows you to define custom RDoc tasks then use the publish_rdoc task to upload them all. See also #local_rdoc_dir
Optional: An array of remote (rsync) paths to copy rdoc to.
eg:
rdoc_locations << "user@server:Sites/rdoc/#{remote_rdoc_dir}"
Optional: Name of RDoc destination directory on Rubyforge. [default:
name
]
Optional: Flags for RDoc rsync. [default: “-av –delete”]
Public Instance Methods
Define tasks for plugin.
# File lib/hoe/publish.rb, line 86 def define_publish_tasks if need_rdoc then begin gem 'rdoc' rescue Gem::LoadError p $! end begin require 'rdoc/task' rescue LoadError require 'rake/rdoctask' end RDoc::Task.new(:docs) do |rd| rd.main = readme_file rd.options << '-d' if (%x`which dot` =~ /\/dot/) unless ENV['NODOT'] || Hoe::WINDOZE rd.rdoc_dir = local_rdoc_dir 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 task :docs do Dir.chdir local_rdoc_dir do cp "#{readme_file.gsub(/\./, '_')}.html", "index.html" sh "chmod -R g+w ." end end desc "Publish RDoc to wherever you want." task :publish_docs => [:clean, :docs] do warn "no rdoc_location values" if rdoc_locations.empty? self.rdoc_locations.each do |dest| sh %Q{rsync #{rsync_args} #{local_rdoc_dir}/ #{dest}} end 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'] _, 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) server.call('metaWeblog.newPost', site['blog_id'], site['user'], site['password'], content, true) end end end desc 'Announce your release.' task :announce => [:post_blog, :publish_on_announce ] end
# File lib/hoe/publish.rb, line 188 def generate_email full = nil require 'time' abort "No email 'to' entry. Run `rake config_hoe` to fix." unless !full || email_to from_name, from_email = author.first, email.first subject, title, body, urls = announcement [ full && "From: #{from_name} <#{from_email}>", full && "To: #{email_to.join(", ")}", full && "Date: #{Time.now.rfc2822}", "Subject: [ANN] #{subject}", "", title, "", urls, "", body, ].compact.join("\n") end
Initialize variables for plugin.
# File lib/hoe/publish.rb, line 74 def initialize_publish self.blog_categories ||= [self.name] self.local_rdoc_dir ||= 'doc' self.need_rdoc ||= true self.rdoc_locations ||= [] self.remote_rdoc_dir ||= self.name self.rsync_args ||= '-av --delete' end