require "rake" require "rake/clean" require "rake/gempackagetask" require "rake/rdoctask" require "fileutils" include FileUtils ############################################################################## # Configuration ############################################################################## NAME = "sequel_core" VERS = "1.1" CLEAN.include ["**/.*.sw?", "pkg/*", ".config", "doc/*", "coverage/*"] RDOC_OPTS = [ "--quiet", "--title", "Sequel: Database access 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: Database access for Ruby" rdoc.rdoc_files.add ["README", "COPYING", "lib/sequel_core.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_core.rb"] s.summary = "Database access for Ruby" s.description = s.summary s.author = "Sharon Rosner" s.email = "ciconia@gmail.com" s.homepage = "http://sequel.rubyforge.org" s.executables = ["sequel"] s.required_ruby_version = ">= 1.8.4" s.add_dependency("metaid") s.add_dependency("assistance", ">= 0.1") case RUBY_PLATFORM when /java/ s.platform = "jruby" else s.platform = Gem::Platform::RUBY # ParseTree on win32 requires PT2.1.1 and RI3.6.6 s.add_dependency("RubyInline", ">= 3.6.6") s.add_dependency("ParseTree", ">= 2.1.1") s.add_dependency("ruby2ruby") end s.files = %w(COPYING README Rakefile) + Dir.glob("{bin,doc,spec,lib}/**/*") s.require_path = "lib" s.bindir = "bin" 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 "Run adapter specs without coverage" Spec::Rake::SpecTask.new("spec_adapters") do |t| t.spec_files = FileList["spec/adapters/*_spec.rb"] t.spec_opts = File.read("spec/spec.opts").split("\n") end desc "Run all specs with coverage" Spec::Rake::SpecTask.new("spec_all") do |t| t.spec_files = FileList["spec/*_spec.rb", "spec/adapters/*_spec.rb"] t.rcov_opts = File.read("spec/rcov.opts").split("\n") t.spec_opts = File.read("spec/spec.opts").split("\n") t.rcov = true end desc "Run rcov only" Spec::Rake::SpecTask.new("rcov") do |t| t.rcov_opts = File.read("spec/rcov.opts").split("\n") t.spec_opts = File.read("spec/spec.opts").split("\n") t.spec_files = FileList["spec/*_spec.rb"] t.rcov = true 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