| 1 | # $Id$ |
|---|
| 2 | require 'rubygems' |
|---|
| 3 | require 'rake' |
|---|
| 4 | require 'rake/testtask' |
|---|
| 5 | require 'rake/rdoctask' |
|---|
| 6 | require 'rake/packagetask' |
|---|
| 7 | require 'rake/gempackagetask' |
|---|
| 8 | require 'rake/contrib/sshpublisher' |
|---|
| 9 | require 'rbconfig' |
|---|
| 10 | require 'rubyforge' |
|---|
| 11 | |
|---|
| 12 | $: << './lib' |
|---|
| 13 | require 'ruby-hl7' |
|---|
| 14 | full_name = "Ruby-HL7" |
|---|
| 15 | short_name = full_name.downcase |
|---|
| 16 | |
|---|
| 17 | # Many of these tasks were garnered from zenspider's Hoe |
|---|
| 18 | # just forced to work my way |
|---|
| 19 | |
|---|
| 20 | desc 'Default: run unit tests.' |
|---|
| 21 | task :default => :test |
|---|
| 22 | |
|---|
| 23 | spec = Gem::Specification.new do |s| |
|---|
| 24 | s.name = short_name |
|---|
| 25 | s.full_name |
|---|
| 26 | s.version = HL7::VERSION |
|---|
| 27 | s.author = "Mark Guzman" |
|---|
| 28 | s.email = "segfault@hasno.info" |
|---|
| 29 | s.homepage = "http://rubyforge.org/ruby-hl7" |
|---|
| 30 | s.platform = Gem::Platform::RUBY |
|---|
| 31 | s.summary = "Ruby HL7 Library" |
|---|
| 32 | s.rubyforge_project = short_name |
|---|
| 33 | s.description = "A simple library to parse and generate HL7 2.x messages" |
|---|
| 34 | s.files = FileList["{bin,lib,test_data}/**/*"].to_a |
|---|
| 35 | s.require_path = "lib" |
|---|
| 36 | s.autorequire = short_name |
|---|
| 37 | s.test_files = FileList["{test}/**/test*.rb"].to_a |
|---|
| 38 | s.has_rdoc = true |
|---|
| 39 | s.extra_rdoc_files = %w[README LICENSE] |
|---|
| 40 | s.add_dependency("rake", ">= #{RAKEVERSION}") |
|---|
| 41 | s.add_dependency("rubyforge", ">= #{::RubyForge::VERSION}") |
|---|
| 42 | end |
|---|
| 43 | |
|---|
| 44 | |
|---|
| 45 | Rake::TestTask.new do |t| |
|---|
| 46 | t.test_files = FileList[ 'test/test*.rb', 'test/*test.rb' ] |
|---|
| 47 | t.verbose = true |
|---|
| 48 | end |
|---|
| 49 | |
|---|
| 50 | namespace :test do |
|---|
| 51 | desc 'Measures test coverage' |
|---|
| 52 | task :coverage do |
|---|
| 53 | rm_f "coverage" |
|---|
| 54 | rm_f "coverage.data" |
|---|
| 55 | rcov = "rcov --aggregate coverage.data --text-summary -Ilib" |
|---|
| 56 | system("#{rcov} --html test/test*.rb") |
|---|
| 57 | system("open coverage/index.html") if PLATFORM['darwin'] |
|---|
| 58 | end |
|---|
| 59 | |
|---|
| 60 | desc 'Heckle the tests' |
|---|
| 61 | task :heckle do |
|---|
| 62 | system("heckle HL7::Message") |
|---|
| 63 | end |
|---|
| 64 | |
|---|
| 65 | desc 'Show which test files fail when run alone.' |
|---|
| 66 | task :deps do |
|---|
| 67 | tests = Dir["test/**/test_*.rb"] + Dir["test/**/*_test.rb"] |
|---|
| 68 | |
|---|
| 69 | tests.each do |test| |
|---|
| 70 | if not system "ruby -Ibin:lib:test #{test} &> /dev/null" then |
|---|
| 71 | puts "Dependency Issues: #{test}" |
|---|
| 72 | end |
|---|
| 73 | end |
|---|
| 74 | end |
|---|
| 75 | end |
|---|
| 76 | |
|---|
| 77 | |
|---|
| 78 | desc "Task for cruise Control" |
|---|
| 79 | task :cruise => ["test","test:coverage"] do |
|---|
| 80 | out = ENV['CC_BUILD_ARTIFACTS'] |
|---|
| 81 | return unless out |
|---|
| 82 | system "mv coverage #{out}" |
|---|
| 83 | end |
|---|
| 84 | |
|---|
| 85 | |
|---|
| 86 | Rake::RDocTask.new do |rd| |
|---|
| 87 | rd.main = "README" |
|---|
| 88 | rd.rdoc_files.include("README", "LICENSE", "lib/**/*.rb") |
|---|
| 89 | rd.title = "%s (%s) Documentation" % [ full_name, spec.version ] |
|---|
| 90 | rd.rdoc_dir = 'doc' |
|---|
| 91 | end |
|---|
| 92 | |
|---|
| 93 | |
|---|
| 94 | Rake::GemPackageTask.new(spec) do |pkg| |
|---|
| 95 | pkg.need_tar = true |
|---|
| 96 | end |
|---|
| 97 | |
|---|
| 98 | desc 'Clean up all the extras' |
|---|
| 99 | task :clean => [ :clobber_rdoc, :clobber_package ] do |
|---|
| 100 | %w[*.gem ri coverage*].each do |pattern| |
|---|
| 101 | files = Dir[pattern] |
|---|
| 102 | rm_rf files unless files.empty? |
|---|
| 103 | end |
|---|
| 104 | end |
|---|
| 105 | |
|---|
| 106 | desc 'Publish RDoc to RubyForge' |
|---|
| 107 | task :publish_docs => [:clean, :rdoc] do |
|---|
| 108 | config = YAML.load(File.read(File.expand_path("~/.rubyforge/user-config.yml"))) |
|---|
| 109 | host = "#{config["username"]}@rubyforge.org" |
|---|
| 110 | remote_dir = "/var/www/gforge-projects/#{spec.rubyforge_project}" |
|---|
| 111 | local_dir = 'doc' |
|---|
| 112 | sh %{rsync -av --delete #{local_dir}/ #{host}:#{remote_dir}} |
|---|
| 113 | end |
|---|
| 114 | |
|---|
| 115 | desc 'Package and upload the release to rubyforge.' |
|---|
| 116 | task :release => [:clean, :package] do |t| |
|---|
| 117 | v = ENV["VERSION"] or abort "Must supply VERSION=x.y.z" |
|---|
| 118 | abort "Versions don't match '#{v}' vs '#{spec.version}'" if v != spec.version.to_s |
|---|
| 119 | pkg = "pkg/#{spec.name}-#{spec.version}" |
|---|
| 120 | |
|---|
| 121 | if $DEBUG then |
|---|
| 122 | puts "release_id = rf.add_release #{spec.rubyforge_project.inspect}, #{spec.name.inspect}, #{version.inspect}, \"#{pkg}.tgz\"" |
|---|
| 123 | puts "rf.add_file #{spec.rubyforge_project.inspect}, #{spec.name.inspect}, release_id, \"#{pkg}.gem\"" |
|---|
| 124 | end |
|---|
| 125 | |
|---|
| 126 | rf = RubyForge.new |
|---|
| 127 | puts "Logging in" |
|---|
| 128 | rf.login |
|---|
| 129 | |
|---|
| 130 | changes = open("NOTES").readlines.join("") if File.exists?("NOTES") |
|---|
| 131 | c = rf.userconfig |
|---|
| 132 | c["release_notes"] = spec.description if spec.description |
|---|
| 133 | c["release_changes"] = changes if changes |
|---|
| 134 | c["preformatted"] = true |
|---|
| 135 | |
|---|
| 136 | files = ["#{pkg}.tgz", "#{pkg}.gem"].compact |
|---|
| 137 | |
|---|
| 138 | puts "Releasing #{spec.name} v. #{spec.version}" |
|---|
| 139 | rf.add_release spec.rubyforge_project, spec.name, spec.version.to_s, *files |
|---|
| 140 | end |
|---|
| 141 | |
|---|
| 142 | desc 'Install the package as a gem' |
|---|
| 143 | task :install_gem => [:clean, :package] do |
|---|
| 144 | sh "sudo gem install pkg/*.gem" |
|---|
| 145 | end |
|---|