0
+# http://rubyforge.org/projects/mime-types/
0
+# Copyright 2003 - 2005 Austin Ziegler.
0
+# Licensed under a MIT-style licence.
0
+# $Id: Rakefile,v 1.8 2006/02/12 22:05:20 austin Exp $
0
+require 'rake/gempackagetask'
0
+require 'rake/contrib/xforge'
0
+require 'archive/tar/minitar'
0
+$LOAD_PATH.unshift('lib')
0
+$version = MIME::Types::VERSION
0
+$name = MIME::Types.to_s
0
+$project = MetaProject::Project::XForge::RubyForge.new('mime-types')
0
+$distdir = "mime-types-#$version"
0
+$tardist = "../#$distdir.tar.gz"
0
+$release_date = Time.parse(ENV['RELEASE_DATE']) if ENV['RELEASE_DATE']
0
+desc "Run the tests for #$name."
0
+ require 'test/unit/testsuite'
0
+ require 'test/unit/ui/console/testrunner'
0
+ runner = Test::Unit::UI::Console::TestRunner
0
+ $LOAD_PATH.unshift('tests')
0
+ $stderr.puts "Checking for test cases:" if t.verbose
0
+ Dir['tests/tc_*.rb'].each do |testcase|
0
+ $stderr.puts "\t#{testcase}" if t.verbose
0
+ suite = Test::Unit::TestSuite.new($name)
0
+ ObjectSpace.each_object(Class) do |testcase|
0
+ suite << testcase.suite if testcase < Test::Unit::TestCase
0
+desc "Look for TODO and FIXME tags in the code"
0
+ rx = %r{#.*(FIXME|TODO|TBD|DEPRECATED)}
0
+ Pathname.new(File.dirname(__FILE__)).egrep(rx) do |match|
0
+spec = eval(File.read("mime-types.gemspec"))
0
+spec.version = $version
0
+desc "Build the RubyGem for #$name."
0
+Rake::GemPackageTask.new(spec) do |g|
0
+desc "Build a #$name .tar.gz distribution."
0
+task :tar => [ $tardist ]
0
+file $tardist => [ :test ] do |t|
0
+ current = File.basename(Dir.pwd)
0
+ files = %W(bin/**/* lib/**/* tests/**/* ChangeLog README LICENCE
0
+ Rakefile mime-types.gemspec setup.rb pre-setup.rb)
0
+ files = FileList[files.map { |file| File.join(current, file) }].to_a
0
+ ddnew = dd.gsub(/^#{current}/, $distdir)
0
+ mtime = $release_date || File.stat(dd).mtime
0
+ if File.directory?(dd)
0
+ { :name => ddnew, :mode => 0755, :dir => true, :mtime => mtime }
0
+ data = File.open(dd, "rb") { |ff| ff.read }
0
+ { :name => ddnew, :mode => mode, :data => data, :size =>
0
+ data.size, :mtime => mtime }
0
+ ff = File.open(t.name.gsub(%r{^\.\./}o, ''), "wb")
0
+ gz = Zlib::GzipWriter.new(ff)
0
+ tw = Archive::Tar::Minitar::Writer.new(gz)
0
+ tw.mkdir(entry[:name], entry)
0
+ tw.add_file_simple(entry[:name], entry) { |os| os.write(entry[:data]) }
0
+task $tardist => [ :test ]
0
+desc "Build the RDoc documentation for #$name."
0
+ rdoc_options = %W(--title #$name --main README --line-numbers)
0
+ files = FileList[*%w(README LICENCE ChangeLog bin/**/*.rb lib/**/*.rb)]
0
+ rdoc_options += files.to_a
0
+ RDoc::RDoc.new.document(rdoc_options)
0
+task :verify_rubyforge do
0
+ raise "RUBYFORGE_USER environment variable not set!" unless ENV['RUBYFORGE_USER']
0
+ raise "RUBYFORGE_PASSWORD environment variable not set!" unless ENV['RUBYFORGE_PASSWORD']
0
+ raise "GMAIL_USER environment variable not set!" unless ENV['GMAIL_USER']
0
+ raise "GMAIL_PASSWORD environment variable not set!" unless ENV['GMAIL_PASSWORD']
0
+desc "Release files on RubyForge."
0
+task :release_files => [ :verify_rubyforge, :tar, :gem ] do
0
+ release_files = FileList[$tardist, "../#$distdir.gem"]
0
+ Rake::XForge::Release.new($project) do |release|
0
+ release.user_name = ENV['RUBYFORGE_USER']
0
+ release.password = ENV['RUBYFORGE_PASSWORD']
0
+ release.files = release_files.to_a
0
+ release.release_name = "#$name #$version"
0
+ release.package_name = "mime-types"
0
+ File.open("README") do |file|
0
+ line.gsub!(/^#.*$/, '') and next
0
+ release.release_notes = notes.join("\n")
0
+ File.open("ChangeLog") do |file|
0
+ current = false if current and line =~ /^==/
0
+ break if line.empty? and not current
0
+ release.release_changes = changes.join("\n")
0
+desc "Publish news on RubyForge"
0
+task :publish_news => [ :verify_rubyforge, :tar, :gem ] do
0
+ Rake::XForge::NewsPublisher.new($project) do |news|
0
+ news.user_name = ENV['RUBYFORGE_USER']
0
+ news.password = ENV['RUBYFORGE_PASSWORD']
0
+ news.subject = "#$name #$version Released"
0
+ news.changes_file = nil
0
+ File.open("Release-Announcement") do |file|
0
+ news.details = details.join("\n")
0
+desc "Post a release announcement via GMail."
0
+task :email_announcement => [ :verify_gmail ] do
0
+ GMailer.connect(ENV["GMAIL_USER"], ENV["GMAIL_PASSWORD"]) do |gmail|
0
+ gmail.send :to => "ruby-talk@ruby-lang.org",
0
+ :subject => "[ANN] #$name #$version",
0
+ :body => File.read("Release-Announcement")
0
+desc "Release the latest version."
0
+task :release => [ :verify_rubyforge, :verify_gmail, :release_files,
0
+ :publish_news, :email_announcement, :docs ]
0
+desc "Build everything."
0
+task :default => [ :tar, :gem ]