puts_debug "read " + __FILE__ require 'rake' require 'tmpdir' if("#{RUBY_VERSION}">"1.9.1") include Rake::DSL end def task_start(task_name) puts " " if(RUBY_VERSION == "1.8.7") puts "[:#{task_name}]" + " " + Dir.pwd else puts Rainbow("[:#{task_name}]").foreground(:yellow).bright + " " + Dir.pwd end end task :clean do; task_start "clean"; end task :clobber do; task_start "clobber"; end require 'rake/clean' CLEAN.include('doc','*.taskstamp*','**/*.{suo,sdf}') CLOBBER.include('bin','obj',"#{Dir.tmpdir}/*{err,out}",'*.gem') def generate_task_hash(project) task_hash = { :info=> { :desc=> 'display information about the rakefile' }, #:test=> { :desc=> 'run unit tests' }, :loc=> { :desc=> 'count the lines of code' }, #:setup=> { :desc=> 'setup the project environment' }, :pull=> { :desc=> 'update dependencies in rakefile.rb to latest revision' }, :deep_pull=> { :desc=> 'pull and rake dependencies (nested dependencies first)' }, :check=> { :desc=> 'checks if the project default task may be skipped' } } if(!CMD[:setup].nil? && CMD[:setup].length > 0) task_hash[:setup]={ :desc=> 'setup the project environment' } end if(project[:scm_type]=="svn" || project[:scm_type]=="git") task_hash[:add] ={ :desc=> 'add files defined by src_glob to source code management' } task_hash[:commit]={ :desc=> 'commit changes to source code management' } task_hash[:update]={ :desc=> 'updates changes from source code management' } end task_hash[:compile] = { :desc=> 'compile source code' } if CMD.has_key?(:compile) && CMD[:compile].length > 0 #project.has_key?(:compile) && project[:compile].length > 0 task_hash[:replace] = { :desc=> 'replace text' } if CMD.has_key?(:replace) && CMD[:replace].length > 0 task_hash[:test]={:desc=>'run unit tests'} if CMD.has_key?(:test) && CMD[:test].length > 0 if project[:type]=="gem" || project[:type]=="ruby" task_hash[:features] = { :desc=> 'tests cucumber features' } end return task_hash end def generate_tasks(project) puts_debug "generate_tasks" hash=generate_task_hash project hash.each do |k,v| name=k.to_s puts_debug "checking if task #{name} should be autogenerated" desc=nil desc=v[:desc] if v.has_key?(:desc) #ruby="task :#{name} do; task_start '#{name}'; PROJECT.#{name}; end" if PROJECT.respond_to?(name) ruby="task :#{name} do; task_start '#{name}'; CMD.#{name}; end" ruby="desc '#{desc}'; " + ruby unless desc.nil? if !task_exists?(name) if(RUBY_VERSION != "1.8.7") puts_debug "defining task #{name} with '#{ruby}'" eval(ruby) end end end # generate default task if(!defined?(DEV_NO_DEFAULT_TASK) && RUBY_VERSION != "1.8.7") Rake.application.instance_variable_get('@tasks').delete('default') task_list="" default_task_order=["check","setup","replace","pre_compile","compile","post_compile","pre_test","test","post_test","add","commit","update","finalize"] if(defined?(DEFAULT_TASK_ORDER)) default_task_order = DEFAULT_TASK_ORDER end default_task_order.each {|t| if(hash.has_key?(t.to_sym) || task_exists?(t) || (CMD.has_key?(t.to_sym) && CMD[t.to_sym].length > 0) ) task_list = "#{task_list}," if task_list.length > 0 task_list = "#{task_list} :#{t}" default_code = "#{default_code} :#{t}," end } desc="desc '#{task_list}'".gsub(' ',"").gsub(':',"") eval("#{desc}; task :default => [#{task_list}] do; task_start('default'); end") end end def task_exists?(name) if("#{RUBY_VERSION}">"1.9.1") return Rake::Task.task_defined?(name) else return false end end module Dev class Tasks < Hash def refresh puts_debug "Dev::Tasks.refresh" start_time=Time.now DEV.refresh CMD.refresh generate_tasks(DEV) puts_debug "Tasks refresh elapsed time " + (Time.now-start_time).to_s end end # class Tasks end # module Dev if(RUBY_VERSION=="1.8.7") task :compile do task_start "compile" CMD.compile end task :test do task_start "test" CMD.test end task :commit do task_start "commit" CMD.commit end task :update do task_start "update" CMD.update end end TASKS=Dev::Tasks.new TASKS.refresh