require "bundler/gem_tasks"

desc "Run unit tests"
task :default => 'test:unit'
task :test    => 'test:unit'

if RUBY_VERSION < '2.3'
  GEMFILES = ['3.0.gemfile', '4.0.gemfile', '5.0.gemfile']
else
  GEMFILES = ['4.0.gemfile', '5.0.gemfile']
end

namespace :bundle do
  desc 'Install dependencies for all the Gemfiles in /gemfiles. Optionally define env variable RAILS_VERSIONS. E.g. RAILS_VERSIONS=3.0,5.0'
  task :install do
    unless defined?(JRUBY_VERSION)
      puts '-'*80
      gemfiles = ENV['RAILS_VERSIONS'] ? ENV['RAILS_VERSIONS'].split(',').map { |v| "#{v}.gemfile"} : GEMFILES
      gemfiles.each do |gemfile|
        Bundler.with_clean_env do
          sh "bundle install --gemfile #{File.expand_path('../gemfiles/'+gemfile, __FILE__)}"
        end
        puts '-'*80
      end
    end
  end
end

# ----- Test tasks ------------------------------------------------------------

require 'rake/testtask'
namespace :test do

  desc 'Run all tests. Optionally define env variable RAILS_VERSIONS. E.g. RAILS_VERSIONS=3.0,5.0'
  task :all, [:rails_versions] do |task, args|
    gemfiles = ENV['RAILS_VERSIONS'] ? ENV['RAILS_VERSIONS'].split(',').map {|v| "#{v}.gemfile"} : GEMFILES
    puts '-' * 80
    gemfiles.each do |gemfile|
      sh "BUNDLE_GEMFILE='#{File.expand_path("../gemfiles/#{gemfile}", __FILE__)}' " +
             " bundle exec rspec"
      puts '-' * 80
    end
  end
end

# ----- Documentation tasks ---------------------------------------------------

require 'yard'
YARD::Rake::YardocTask.new(:doc) do |t|
  t.options = %w| --embed-mixins --markup=markdown |
end

# ----- Code analysis tasks ---------------------------------------------------

if defined?(RUBY_VERSION) && RUBY_VERSION > '1.9'
  require 'cane/rake_task'
  Cane::RakeTask.new(:quality) do |cane|
    cane.abc_max = 15
    cane.no_style = true
  end
end