Publish plugin for hoe.
Create news email file and post to rubyforge.
Generate email announcement file.
Post announcement to blog.
Post announcement to rubyforge.
Generate ri locally for testing.
Run publish_docs
when you run release
.
An array of hashes of blog settings.
The blogs entry can either look like:
- path: ~/Work/p4/zss/www/blog.zenspider.com/releases type: zenweb cmd: rake sync (optional)
or:
- url: http://example.com/cgi-bin/blog.cgi blog_id: 1 user: username password: passwd extra_headers: blah: whatever
Optional: An array of the project's blog categories. Defaults to project name.
Optional: Name of destination directory for RDoc generated files.
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"]
# File lib/hoe/publish.rb, line 100 def activate_publish_deps dependency "rdoc", "~> 3.10", :developer if need_rdoc end
Define tasks for plugin.
# File lib/hoe/publish.rb, line 107 def define_publish_tasks if need_rdoc then task :isolate # ensure it exists desc "Generate rdoc" task :docs => [:clobber_docs, :isolate] do sh(*make_rdoc_cmd) end desc "Generate rdoc coverage report" task :dcov => :isolate do sh(*make_rdoc_cmd('-C')) end desc "Remove RDoc files" task :clobber_docs do rm_rf local_rdoc_dir end task :clobber => :clobber_docs desc 'Generate ri locally for testing.' task :ridocs => [:clean, :isolate] do ruby(*make_rdoc_cmd('--ri', '-o', 'ri')) 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. Uses the "blogs" array in your hoerc.' task :post_blog do with_config do |config, path| break unless config['blogs'] config['blogs'].each do |site| if site['path'] then msg = "post_blog_#{site['type']}" send msg, site system site["cmd"] if site["cmd"] else require 'xmlrpc/client' _, title, body, urls = announcement body += "\n\n#{urls}" 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 end desc 'Announce your release.' task :announce => [:post_blog, :publish_on_announce ] end
# File lib/hoe/publish.rb, line 232 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 91 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 -O --delete' end
# File lib/hoe/publish.rb, line 190 def make_rdoc_cmd(*extra_args) title = "#{name}-#{version} Documentation" title = "#{rubyforge_name}'s #{title}" if rubyforge_name != name rdoc = Gem.bin_wrapper "rdoc" %W[#{rdoc} --title #{title} -o #{local_rdoc_dir} ] + spec.rdoc_options + extra_args + spec.require_paths + spec.extra_rdoc_files end
# File lib/hoe/publish.rb, line 205 def post_blog_zenweb site dir = site["path"] _, title, body, urls = announcement body += "\n\n#{urls}" Dir.chdir File.expand_path dir do time = Time.at Time.now.to_i # nukes fractions path = [time.strftime("%Y-%m-%d-"), title.sub(%r\W+$/, '').gsub(%r\W+/, '-'), ".html.md"].join header = { "title" => title, "categories" => blog_categories, "date" => time, } File.open path, "w" do |f| f.puts header.to_yaml.gsub(%r\s$/, '') f.puts "..." f.puts f.puts body end end end