tasks/github-gem.rake in request-log-analyzer-1.0.3 vs tasks/github-gem.rake in request-log-analyzer-1.0.4

- old
+ new

@@ -1,10 +1,9 @@ require 'rubygems' require 'rubyforge' require 'rake' require 'rake/tasklib' -require 'rake/gempackagetask' require 'date' module Rake class GithubGem < TaskLib @@ -24,17 +23,60 @@ def register_all_tasks! namespace(:gem) do desc "Updates the file lists for this gem" task(:manifest) { manifest_task } + + desc "Releases a new version of #{@name}" + task(:build => [:manifest]) { build_task } desc "Releases a new version of #{@name}" - task(:release => :package) { release_task } + task(:release => [:check_clean_master_branch, :version, :build]) { release_task } - Rake::GemPackageTask.new(@specification) do |pkg| + # helper task for releasing + task(:check_clean_master_branch) { verify_clean_status('master') } + task(:check_version) { verify_version(ENV['VERSION'] || @specification.version) } + task(:version => [:check_version]) { set_gem_version! } + end + + # Register RDoc tasks + if @specification.has_rdoc + require 'rake/rdoctask' + + namespace(:doc) do + desc 'Generate documentation for request-log-analyzer' + Rake::RDocTask.new(:compile) do |rdoc| + rdoc.rdoc_dir = 'doc' + rdoc.title = @name + rdoc.options += @specification.rdoc_options + rdoc.rdoc_files.include(@specification.extra_rdoc_files) + rdoc.rdoc_files.include('lib/**/*.rb') + end end - end + end + + # Setup :spec task if RSpec files exist + if Dir['spec/**/*_spec.rb'].any? + require 'spec/rake/spectask' + + desc "Run all specs for #{@name}" + Spec::Rake::SpecTask.new(:spec) do |t| + t.spec_files = FileList['spec/**/*_spec.rb'] + end + end + + # Setup :test task if unit test files exist + if Dir['test/**/*_test.rb'].any? + require 'rake/testtask' + + desc "Run all unit tests for #{@name}" + Rake::TestTask.new(:test) do |t| + t.pattern = 'test/**/*_test.rb' + t.verbose = true + t.libs << 'test' + end + end end protected def reload_gemspec! @@ -108,10 +150,16 @@ def verify_version(new_version) newest_version = run_command('git tag').map { |tag| tag.split(name + '-').last }.compact.map { |v| Gem::Version.new(v) }.max raise "This version number (#{new_version}) is not higher than the highest tagged version (#{newest_version})" if !newest_version.nil? && newest_version >= Gem::Version.new(new_version.to_s) end + + def set_gem_version! + # update gemspec file + self.gemspec_version = ENV['VERSION'] if Gem::Version.correct?(ENV['VERSION']) + self.gemspec_date = Date.today + end def manifest_task verify_current_branch('master') list = Dir['**/*'].sort @@ -137,29 +185,25 @@ reload_gemspec! end def build_task sh "gem build #{gemspec_file}" + Dir.mkdir('pkg') unless File.exist?('pkg') + sh "mv #{name}-#{specification.version}.gem pkg/#{name}-#{specification.version}.gem" end def install_task - raise "#{name} .gem file not found" unless File.exist?("#{name}-#{specification.version}.gem") - sh "gem install #{name}-#{specification.version}.gem" + raise "#{name} .gem file not found" unless File.exist?("pkg/#{name}-#{specification.version}.gem") + sh "gem install pkg/#{name}-#{specification.version}.gem" end def uninstall_task - raise "#{name} .gem file not found" unless File.exist?("#{name}-#{specification.version}.gem") + raise "#{name} .gem file not found" unless File.exist?("pkg/#{name}-#{specification.version}.gem") sh "gem uninstall #{name}" end def release_task - verify_clean_status('master') - verify_version(ENV['VERSION'] || @specification.version) - - # update gemspec file - self.gemspec_version = ENV['VERSION'] if Gem::Version.correct?(ENV['VERSION']) - self.gemspec_date = Date.today - manifest_task + # commit the gemspec file git_commit_file(gemspec_file, "Updated #{gemspec_file} for release of version #{@specification.version}") if git_modified?(gemspec_file) # create tag and push changes git_create_tag("#{@name}-#{@specification.version}", "Tagged version #{@specification.version}") git_push('origin', 'master', [:tags]) \ No newline at end of file