require 'bower-rails/performer'

namespace :bower do

desc "Install components from bower"
task :install, :options do |_, args|
  if ENV['RAILS_ENV'] && ENV['RAILS_ENV'] == 'development'
    Rake::Task["bower:install:development"].invoke(args[:options])
  else
    Rake::Task["bower:install:production"].invoke(args[:options])
  end
end

namespace :install do
  desc "Install components from bower using previously generated bower.json"
  task :deployment, :options do |_, args|
    args.with_defaults(:options => '')
    BowerRails::Performer.perform false do |bower|
      sh "#{bower} install #{args[:options]}"
    end
  end

  desc "Install both dependencies and devDependencies from bower"
  task :development, :options do |_, args|
    args.with_defaults(:options => '')
    BowerRails::Performer.perform do |bower|
      sh "#{bower} install #{args[:options]}"
    end
  end

  desc "Install only dependencies, excluding devDependencies from bower"
  task :production, :options do |_, args|
    args.with_defaults(:options => '')
    BowerRails::Performer.perform do |bower|
      sh "#{bower} install -p #{args[:options]}"
    end
  end
end

desc "Update bower components"
task :update, :options do |_, args|
  args.with_defaults(:options => '')
  BowerRails::Performer.perform do |bower|
    sh "#{bower} update #{args[:options]}"
  end
end

desc "List bower components"
task :list do
  BowerRails::Performer.perform false do |bower|
    sh "#{bower} list"
  end
end

namespace :update do
  desc "Update existing components and uninstalls extraneous components"
  task :prune, :options do |_, args|
    args.with_defaults(:options => '')
    BowerRails::Performer.perform do |bower|
      sh "#{bower} update #{args[:options]} && #{bower} prune #{args[:options]}"
    end
  end
end

desc "Resolve assets paths in bower components"
task :resolve, :relative_directory do |_, args|
  BowerRails::Performer.perform false do
    resolve_asset_paths(
      args[:relative_directory] || BowerRails.bower_components_directory)
  end
end

desc "Attempt to keep only files listed in 'main' of each component's bower.json"
task :clean do
  BowerRails::Performer.perform false do
    remove_extra_files
  end
end

namespace :cache do
  desc "Clear the bower cache ('bower cache clean')"
  task :clean do
    BowerRails::Performer.perform false do |bower|
      sh "#{bower} cache clean"
    end
  end
end

task :before_precompile do
  BowerRails.tasks.each do |task|
    Rake.application.invoke_task(task)
  end
end

end

task “assets:precompile” => [“bower:before_precompile”]