require "bundler/gem_tasks" require 'cucumber/rake/task' require 'cane/rake_task' require 'tailor/rake_task' require "open-uri" namespace :behave do url = "https://github.com/behave/behave/archive/master.tar.gz" tarball = "tmp/behave-master.tar.gz" vendor = "vendor/behave" desc "Vendors behave latest source code into gem codebase" task :vendor => "#{vendor}/VERSION.txt" directory File.dirname(tarball) directory vendor file tarball => File.dirname(tarball) do |t| begin src = open(url).binmode dst = open(t.name, "wb") IO.copy_stream(src, dst) ensure src.close dst.close end end file "#{vendor}/VERSION.txt" => [vendor, tarball] do |t| abs_tarball = File.expand_path(tarball) Dir.chdir(vendor) { sh "tar xzf #{abs_tarball} --strip-components=1" } rm_rf "#{vendor}/test" IO.write(t.name, url + "\n") end desc "Clean up a vendored behave in preparation for a new vendored version" task :clean do rm_rf [vendor, tarball] end end Cucumber::Rake::Task.new(:features) do |t| t.cucumber_opts = ['features', '-x', '--format progress'] end desc "Run all test suites" task :test => [:features] desc "Run cane to check quality metrics" Cane::RakeTask.new do |cane| cane.canefile = './.cane' end Tailor::RakeTask.new desc "Display LOC stats" task :stats do puts "\n## Production Code Stats" sh "countloc -r lib" puts "\n## Test Code Stats" sh "countloc -r features" end desc "Run all quality tasks" task :quality => [:cane, :tailor, :stats] task :default => [:test, :quality]