require 'rubygems'
require 'rake'

def version
  if File.exist?('VERSION.yml')
    config = YAML.load(File.read('VERSION.yml'))
    "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
  else
    ""
  end
end

# gem builder
begin
  require 'jeweler'
  Jeweler::Tasks.new do |gem|
    gem.name = "eventable"
    gem.summary = %Q{TODO}
    gem.description = %Q{TODO}
    gem.email = "info@dutchcoastsoftware.com"
    gem.homepage = "http://github.com/dcs/eventable"
    gem.authors = ["Mathijs Kwik"]
    gem.add_development_dependency('redgreen')
    gem.files = FileList["[A-Z]*", "{app,config,generators,lib,shoulda_macros,rails}/**/*"]
    gem.rdoc_options << '--main' << 'README.textile' << '--title' << "Eventable #{version}"
    gem.extra_rdoc_files = ["*.textile", "LICENSE", "app/**/*.rb"]
  end
rescue LoadError
  puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
end



# rdoc generation
require 'rake/rdoctask'
Rake::RDocTask.new do |rdoc|
  rdoc.rdoc_dir = 'rdoc'
  rdoc.title = "Eventable #{version}"
  rdoc.rdoc_files.include('*.textile')
  rdoc.rdoc_files.include('LICENSE')
  rdoc.rdoc_files.include('lib/**/*.rb')
  rdoc.rdoc_files.include('app/**/*.rb')
  rdoc.main = "README.textile"
end


# rcov test coverage
begin
  require 'rcov/rcovtask'
  Rcov::RcovTask.new do |test|
    test.libs << 'test'
    test.pattern = 'test/**/*_test.rb'
    test.verbose = true
  end
rescue LoadError
  task :rcov do
    abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
  end
end


# testing with a full empty rails app
require 'rake/testtask'
namespace :test do
  Rake::TestTask.new(:all => ['generator:cleanup',
                              'generator:generate']) do |task|
    task.libs << 'lib'
    task.libs << "test"
    task.pattern = 'test/**/*_test.rb'
    task.verbose = false
  end
end


generators = %w(eventable)

namespace :generator do
  desc "Cleans up the test app before running the generator"
  task :cleanup do
    generators.each do |generator|
      FileList["generators/#{generator}/templates/**/*.*"].each do |each|
        file = "test/rails_root/#{each.gsub("generators/#{generator}/templates/",'')}"
        File.delete(file) if File.exists?(file)
      end
    end

    FileList["test/rails_root/db/migrate/*_setup_eventable_#{version.gsub('.', '_')}.rb"].each do |each|
      FileUtils.rm_rf(each)
    end

    FileUtils.rm_rf("test/rails_root/vendor/plugins/eventable")
    FileUtils.mkdir_p("test/rails_root/vendor/plugins")
    eventable_root = File.expand_path(File.dirname(__FILE__))
    system("ln -fns #{eventable_root} test/rails_root/vendor/plugins/eventable")
  end

  desc "Run the generator on the tests"
  task :generate do
    generators.each do |generator|
      system "cd test/rails_root && ./script/generate #{generator} && rake db:migrate db:test:prepare"
    end
  end
end

desc "Run the test suite"
task :default => 'test:all'