require 'capistrano/dsl/nodenv_install'

include Capistrano::DSL::NodenvInstall

# Heavily depends on 'capistrano-nodenv' variables: # github.com/capistrano/nodenv/blob/master/lib/capistrano/tasks/nodenv.rake#L33-49 # set :nodenv_type # :user or :system # set :nodenv_node, '6.3.0' # node version # set :nodenv_roles, :all # where nodenv should be installed # set :nodenv_path, # ~/.nodenv or /usr/local/nodenv, depends on :nodenv_type # set :nodenv_node_dir # “#{fetch(:nodenv_path)}/versions/#{fetch(:nodenv_node)}” }

namespace :nodenv do

desc 'Install nodenv'
task :install_nodenv do
  on roles fetch(:nodenv_roles) do
    next if test "[ -d #{fetch(:nodenv_path)} ]"
    execute :git, :clone, nodenv_repo_url, fetch(:nodenv_path)
  end
end

desc 'Install node build - nodenv plugin'
task :install_node_build do
  on roles fetch(:nodenv_roles) do
    next if test "[ -d #{nodenv_node_build_path} ]"
    execute :git, :clone, node_build_repo_url, nodenv_node_build_path
  end
end

desc 'Update node build - nodenv plugin'
task :update_node_build do
  on roles fetch(:nodenv_roles) do
    next unless test "[ -d #{nodenv_node_build_path} ]"
    within nodenv_node_build_path do
      execute :git, :pull
    end
  end
end

desc 'Install node'
task :install_node do
  on roles fetch(:nodenv_roles) do
    next if test "[ -d #{fetch(:nodenv_node_dir)} ]"
    invoke 'nodenv:update_node_build'
    execute nodenv_bin_executable_path, :install, fetch(:nodenv_node)
  end
end

desc 'Install nodenv, node build and node version'
task :install do
  invoke 'nodenv:install_nodenv'
  invoke 'nodenv:install_node_build'
  invoke 'nodenv:install_node'
end

before 'nodenv:validate', 'nodenv:install'
before 'bundler:map_bins', 'nodenv:install' if Rake::Task.task_defined?('bundler:map_bins')

end