require 'rubygems' require 'rake' require 'rake/clean' require 'rake/testtask' require 'rake/packagetask' require 'rake/gempackagetask' require 'rake/rdoctask' require 'rake/contrib/rubyforgepublisher' require 'fileutils' require 'hoe' begin require 'spec/rake/spectask' rescue LoadError puts 'To use rspec for testing you must install rspec gem:' puts '$ sudo gem install rspec' exit end include FileUtils require File.join(File.dirname(__FILE__), 'lib', 'qp') AUTHOR = 'Kouichirou Eto' EMAIL = "eto _at_ rubyforge _dot_ org" DESCRIPTION = '"Cute p" provide more human readable "p" function.' GEM_NAME = 'cutep' @config_file = "~/.rubyforge/user-config.yml" @config = nil def rubyforge_username unless @config begin @config = YAML.load(File.read(File.expand_path(@config_file))) rescue puts <<-EOS ERROR: No rubyforge config file found: #{@config_file}" Run 'rubyforge setup' to prepare your env for access to Rubyforge - See http://newgem.rubyforge.org/rubyforge.html for more details EOS # " exit end end @rubyforge_username ||= @config["username"] end RUBYFORGE_PROJECT = 'cutep' # The unix name for your project HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org" DOWNLOAD_PATH = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}" RUBYFORGE_ACCOUNT = 'eto' NAME = "cutep" REV = nil # UNCOMMENT IF REQUIRED: # REV = `svn info`.each {|line| if line =~ /^Revision:/ then k,v = line.split(': '); break v.chomp; else next; end} rescue nil VERS = QP::VERSION::STRING + (REV ? ".#{REV}" : "") CLEAN.include ['**/.*.sw?', '*.gem', '.config', '**/.DS_Store'] CLEAN.include ['*~'] RDOC_OPTS = ['--quiet', '--title', 'cutep documentation', "--opname", "index.html", "--line-numbers", "--main", "README", "--inline-source"] class Hoe def extra_deps @extra_deps.reject { |x| Array(x).first == 'hoe' } end end # Generate all the Rake tasks # Run 'rake -T' to see list of generated tasks (from gem root directory) hoe = Hoe.new(GEM_NAME, VERS) do |p| p.author = AUTHOR p.description = DESCRIPTION p.email = EMAIL p.summary = DESCRIPTION p.url = HOMEPATH p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT p.test_globs = ["test/**/test_*.rb"] p.clean_globs |= CLEAN #An array of file patterns to delete on clean. # == Optional p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n") #p.extra_deps = [] # An array of rubygem dependencies [name, version], e.g. [ ['active_support', '>= 1.3.1'] ] #p.spec_extras = {} # A hash of extra values to set in the gemspec. end CHANGES = hoe.paragraphs_of('History.txt', 0..1).join("\n\n") PATH = (RUBYFORGE_PROJECT == GEM_NAME) ? RUBYFORGE_PROJECT : "#{RUBYFORGE_PROJECT}/#{GEM_NAME}" hoe.remote_rdoc_dir = File.join(PATH.gsub(/^#{RUBYFORGE_PROJECT}\/?/,''), 'rdoc') desc 'Generate website files' task :website_generate do Dir['website/**/*.txt'].each do |txt| sh %{ ruby scripts/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} } end end # add chmod. task :website_generate do sh %{ chmod -R go+rx website } end desc 'Upload website files to rubyforge' task :website_upload do host = "#{rubyforge_username}@rubyforge.org" remote_dir = "/var/www/gforge-projects/#{PATH}/" local_dir = 'website' sh %{rsync -aCv #{local_dir}/ #{host}:#{remote_dir}} end desc 'Generate and upload website files' task :website => [:website_generate, :website_upload, :publish_docs] desc 'Release the website and new gem version' task :deploy => [:check_version, :website, :release] do puts "Remember to create SVN tag:" puts "svn copy svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/trunk " + "svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/tags/REL-#{VERS} " puts "Suggested comment:" puts "Tagging release #{CHANGES}" end desc 'Runs tasks website_generate and install_gem as a local deployment of the gem' task :local_deploy => [:website_generate, :install_gem] task :check_version do unless ENV['VERSION'] puts 'Must pass a VERSION=x.y.z release version' exit end unless ENV['VERSION'] == VERS puts "Please update your version.rb to match the release version, currently #{VERS}" exit end end desc "Run the specs under spec/models" Spec::Rake::SpecTask.new do |t| t.spec_opts = ['--options', "spec/spec.opts"] t.spec_files = FileList['spec/*_spec.rb'] t.libs << "lib" end # add chmod. task :docs do sh %{ chmod -R go+rx doc } end # clear current task module Rake class Task def clear_actions @actions.clear end end end # clear current task t = Rake.application.lookup(:install_gem) t.clear_actions if t # redefine task task :install_gem => [:clean, :package] do if /mswin32/ =~ RUBY_PLATFORM || /cygwin/ =~ RUBY_PLATFORM sh "gem.cmd install pkg/*.gem" # for Cygwin else sh "sudo gem install pkg/*.gem" end end task :clean => [:chmod] desc 'Change mode to erase executable bits.' task :chmod do sh "chmod 644 Rakefile ChangeLog" sh "chmod 644 *.txt */*.txt" sh "chmod 644 */*.html" sh "chmod 644 */*.rhtml" sh "chmod 644 */*/*.js" sh "chmod 644 */*/*.css" sh "chmod 644 *.rb */*.rb" sh "chmod 755 scripts/*" end desc 'Create Manifest.txt file.' task :manifest => [:chmod, :clean] do ruby "scripts/makemanifest.rb" end task :gem => [:manifest] desc "Default task is to run specs" task :default => :spec