OUTPUT = File.join(‘app’,‘assets’,‘javascripts’,‘ender’)

namespace :ender do

namespace :node do

  desc "install nvm"
  task :install_nvm do
    begin
      if `which curl`.size.>(0)
        sh "curl https://raw.github.com/creationix/nvm/master/install.sh | sh"
      else
        sh "wget -qO- https://raw.github.com/creationix/nvm/master/install.sh | sh"
      end
      puts "NVM : https://github.com/creationix/nvm"
      puts "has been installed for your account. NVM is the node/npm version manager."
      puts "If you liked RVM, you will feel like at home."
      puts
    rescue Exception => e
      puts e
      puts e.backtrace
    end
  end

  desc "install node version NODE_VERSION (default 0.8.16)"
  task :install do
    Rake::Task['ender:node:install_nvm'].invoke unless ENV['NVM_DIR']
    node_version = ENV['NODE_VERSION'] || '0.8.16'
    sh "/bin/bash -c 'source ~/.nvm/nvm.sh && nvm install #{node_version}'"
  end

end

desc "install files from ender"
task :install do
  node_version = ENV['NODE_VERSION'] || '0.8.16'
  if `which npm`.size.<=(0)
    if ENV['NVM_DIR']
      sh "/bin/bash -c 'source #{ENV['NVM_DIR']}/nvm.sh && nvm install #{node_version} && nvm use #{node_version}'"
    else
      Rake::Task['ender:node:install'].invoke
    end
  end
  sh 'npm install ender -g'
  puts "Please run 'source ~/.nvm/nvm.sh && nvm use #{node_version}' to reload nodejs environment '"
end

desc "check if ender is installed"
task :check do
  Rake::Task['ender:install'].invoke unless `which ender`.size.>(0)
end

desc "build ender base Jeesh package (careful it rebuilds from scratch)"
task :build => :check do
  sh "ender build jeesh --output #{OUTPUT}"
  FileUtils.rm("#{OUTPUT}.min.js") if File.exist?("#{OUTPUT}.min.js")
end

desc "refresh the build"
task :refresh => :check do
  sh "ender refresh --use #{OUTPUT}"
  FileUtils.rm("#{OUTPUT}.min.js") if File.exist?("#{OUTPUT}.min.js")
end

desc "show list of installed packages"
task :info => :check do
  sh "ender info --use #{OUTPUT}"
end

desc "display ender help"
task :help => :check do
  sh "ender"
end

desc "add a package to the ender build"
task :add, [:package] => [:check] do |t,p|
  sh "ender add #{p[:package]} --use #{OUTPUT}"
  FileUtils.rm("#{OUTPUT}.min.js") if File.exist?("#{OUTPUT}.min.js")
end

desc "remove a package from the ender build"
task :remove, [:package] => [:check] do |t,p|
  sh "ender remove #{p[:package]} --use #{OUTPUT}"
  FileUtils.rm("#{OUTPUT}.min.js") if File.exist?("#{OUTPUT}.min.js")
end

end