#!/usr/bin/env ruby
require 'rubygems'
require 'rake'
require 'spec/rake/spectask'
require 'rake/rdoctask'
require 'rake/gempackagetask'
require 'rake/contrib/rubyforgepublisher'
Dir[File.dirname(__FILE__) + '/tasks/*'].each { |t| require(t) }
task :default => 'dm:spec'
task :environment => 'dm:environment'
dm = namespace :dm do
desc "Setup Environment"
task :environment do
require 'environment'
end
desc "Run specifications"
Spec::Rake::SpecTask.new('spec') do |t|
t.spec_opts = ["--format", "specdoc", "--colour"]
t.spec_files = FileList[(ENV['FILES'] || 'spec/**/*_spec.rb')]
unless ENV['NO_RCOV']
t.rcov = true
t.rcov_opts = ['--exclude', 'examples,spec,environment.rb']
end
end
desc "Run comparison with ActiveRecord"
task :perf do
load 'performance.rb'
end
desc "Profile DataMapper"
task :profile do
load 'profile_data_mapper.rb'
end
namespace :spec do
def set_model_mode(fl, mode)
fl.each do |fname|
contents = File.open(fname, 'r') { |f| f.read }
if mode == :compat
contents.gsub!(/#< DataMapper::Base #/, '< DataMapper::Base #')
contents.gsub!(/include DataMapper::Persistence/, '#include DataMapper::Persistence')
elsif mode == :normal
contents.gsub!(/< DataMapper::Base #/, '#< DataMapper::Base #')
contents.gsub!(/#include DataMapper::Persistence/, 'include DataMapper::Persistence')
else
raise "Unknown mode #{mode}."
end
File.open(fname, 'w') do |f|
f.write(contents)
end
end
end
desc "Run specifications with DataMapper::Base compatibilty"
task :compat do
fl = FileList['spec/**/*.rb'].exclude(/\b\.svn/)
set_model_mode(fl, :compat)
begin
dm[:spec].execute
ensure
set_model_mode(fl, :normal)
end
end
end
end
PACKAGE_VERSION = '0.3.1'
PACKAGE_FILES = FileList[
'README',
'FAQ',
'QUICKLINKS',
'CHANGELOG',
'MIT-LICENSE',
'*.rb',
'lib/**/*.rb',
'spec/**/*.{rb,yaml}',
'tasks/**/*',
'plugins/**/*'
].to_a.reject { |path| path =~ /(\/db|Makefile|\.bundle|\.log|\.o)$/ }
DOCUMENTED_FILES = PACKAGE_FILES.reject do |path|
FileTest.directory?(path) || path =~ /(^spec|\/spec|\/swig\_)/
end
PROJECT = 'datamapper'
task :ls do
p PACKAGE_FILES
end
desc "Generate Documentation"
rd = Rake::RDocTask.new do |rdoc|
rdoc.rdoc_dir = 'doc'
rdoc.title = "DataMapper -- An Object/Relational Mapper for Ruby"
rdoc.options << '--line-numbers' << '--inline-source' << '--main' << 'README'
rdoc.rdoc_files.include(*DOCUMENTED_FILES)
end
gem_spec = Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
s.name = PROJECT
s.summary = "An Object/Relational Mapper for Ruby"
s.description = "Faster, Better, Simpler."
s.version = PACKAGE_VERSION
s.authors = 'Sam Smoot'
s.email = 'ssmoot@gmail.com'
s.rubyforge_project = PROJECT
s.homepage = 'http://datamapper.org'
s.files = PACKAGE_FILES
s.require_path = 'lib'
s.requirements << 'none'
s.autorequire = 'data_mapper'
s.add_dependency('fastthread')
s.add_dependency('json')
s.add_dependency('rspec')
s.add_dependency('validatable')
s.has_rdoc = true
s.rdoc_options << '--line-numbers' << '--inline-source' << '--main' << 'README'
s.extra_rdoc_files = DOCUMENTED_FILES
end
Rake::GemPackageTask.new(gem_spec) do |p|
p.gem_spec = gem_spec
p.need_tar = true
p.need_zip = true
end
desc "Publish to RubyForge"
task :rubyforge => [ :rdoc, :gem ] do
Rake::SshDirPublisher.new("#{ENV['RUBYFORGE_USER']}@rubyforge.org", "/var/www/gforge-projects/#{PROJECT}", 'doc').upload
end
task :install => :package do
sh %{sudo gem install pkg/#{PROJECT}-#{PACKAGE_VERSION}}
end
namespace :dev do
desc "Install for development (for windows)"
task :winstall => :gem do
system %{gem install --no-rdoc --no-ri -l pkg/#{PROJECT}-#{PACKAGE_VERSION}.gem}
end
end