require "rake" require "rake/clean" require "rake/gempackagetask" require "rake/rdoctask" require "fileutils" include FileUtils ############################################################################## # Configuration ############################################################################## NAME = "sequel_model" VERS = "0.4.1" CLEAN.include ["**/.*.sw?", "pkg/*", ".config", "doc/*", "coverage/*"] RDOC_OPTS = [ "--quiet", "--title", "Sequel Model: Lightweight ORM for Ruby", "--opname", "index.html", "--line-numbers", "--main", "README", "--inline-source" ] ############################################################################## # RDoc ############################################################################## task :doc => [:rdoc] Rake::RDocTask.new do |rdoc| rdoc.rdoc_dir = "doc/rdoc" rdoc.options += RDOC_OPTS rdoc.main = "README" rdoc.title = "Sequel: Lightweight ORM for Ruby" rdoc.rdoc_files.add ["README", "COPYING", "lib/sequel_model.rb", "lib/**/*.rb"] end ############################################################################## # Gem packaging ############################################################################## desc "Packages up Sequel." task :default => [:package] task :package => [:clean] spec = Gem::Specification.new do |s| s.name = NAME s.rubyforge_project = 'sequel' s.version = VERS s.platform = Gem::Platform::RUBY s.has_rdoc = true s.extra_rdoc_files = ["README", "CHANGELOG", "COPYING"] s.rdoc_options += RDOC_OPTS + ["--exclude", "^(examples|extras)\/", "--exclude", "lib/sequel_model.rb"] s.summary = "Lightweight ORM for Ruby" s.description = s.summary s.author = "Sharon Rosner" s.email = "ciconia@gmail.com" s.homepage = "http://sequel.rubyforge.org" s.required_ruby_version = ">= 1.8.4" case RUBY_PLATFORM when /java/ s.platform = "jruby" else s.platform = Gem::Platform::RUBY end s.add_dependency("assistance", '>= 0.1.2') s.add_dependency("sequel_core", '>= 1.0') s.files = %w(COPYING README Rakefile) + Dir.glob("{doc,spec,lib}/**/*") s.require_path = "lib" end Rake::GemPackageTask.new(spec) do |p| p.need_tar = true p.gem_spec = spec end ############################################################################## # installation & removal ############################################################################## task :install do sh %{rake package} sh %{sudo gem install pkg/#{NAME}-#{VERS}} end task :install_no_docs do sh %{rake package} sh %{sudo gem install pkg/#{NAME}-#{VERS} --no-rdoc --no-ri} end task :uninstall => [:clean] do sh %{sudo gem uninstall #{NAME}} end task :tag do cwd = FileUtils.pwd sh %{rm -rf doc/*} sh %{rm -rf pkg/*} sh %{rm -rf coverage/*} sh %{cd ../.. && svn copy #{cwd} tags/#{NAME}-#{VERS} && svn commit -m "#{NAME}-#{VERS} tag." tags} end ############################################################################## # gem and rdoc release ############################################################################## task :release => [:package] do sh %{rubyforge login} sh %{rubyforge add_release sequel #{NAME} #{VERS} pkg/#{NAME}-#{VERS}.tgz} sh %{rubyforge add_file sequel #{NAME} #{VERS} pkg/#{NAME}-#{VERS}.gem} end ############################################################################## # specs ############################################################################## require "spec/rake/spectask" desc "Run specs with coverage" Spec::Rake::SpecTask.new("spec") do |t| t.spec_files = FileList["spec/**/*_spec.rb"] t.spec_opts = File.read("spec/spec.opts").split("\n") t.rcov_opts = File.read("spec/rcov.opts").split("\n") t.rcov = true end desc "Run specs without coverage" Spec::Rake::SpecTask.new("spec_no_cov") do |t| t.spec_files = FileList["spec/**/*_spec.rb"] t.spec_opts = File.read("spec/spec.opts").split("\n") end desc "check documentation coverage" task :dcov do sh "find lib -name '*.rb' | xargs dcov" end ############################################################################## # Statistics ############################################################################## STATS_DIRECTORIES = [ %w(Code lib/), %w(Spec spec/) ].collect { |name, dir| [ name, "./#{dir}" ] }.select { |name, dir| File.directory?(dir) } desc "Report code statistics (KLOCs, etc) from the application" task :stats do require "extra/stats" verbose = true CodeStatistics.new(*STATS_DIRECTORIES).to_s end