atlas_recipe :puma do

during "deploy:starting", "starting"
during :provision, %w(init_d nginx_site config_rb)
during "deploy:start", "start"
during "deploy:stop", "stop"
during "deploy:restart", "restart"
during "deploy:publishing", "restart"

end

namespace :atlas do

namespace :puma do
  task :starting do
    fetch(:linked_files, []) << "config/puma.rb"
  end

  desc "Install service script for puma"
  task :init_d do
    privileged_on roles(:app) do |host, user|
      puma_user = fetch(:atlas_puma_user) || user

      template "puma_init.erb",
               "/etc/init.d/puma_#{application_basename}",
               :mode => "a+rx",
               :binding => binding

      execute "update-rc.d -f puma_#{application_basename} defaults"
    end
  end

  desc "Install puma proxy into nginx sites and restart nginx"
  task :nginx_site do
    set(:atlas_server_name, "puma")

    privileged_on roles(:web) do
      template "nginx_site.erb",
               "/etc/nginx/sites-enabled/#{application_basename}"
      execute "rm -f /etc/nginx/sites-enabled/default"
      execute "mkdir -p /etc/nginx/#{application_basename}-locations"
      execute "service nginx restart"
    end
  end

  desc "Create config/puma.rb"
  task :config_rb do
    on release_roles(:all) do
      template "puma.rb.erb", "#{shared_path}/config/puma.rb"
    end
  end

  %w[start stop].each do |command|
    desc "#{command} puma"
    task command do
      on roles(:app) do
        execute "service puma_#{application_basename} #{command}"
      end
    end
  end

  desc "restart puma"
  task :restart do
    on roles(:app) do
      execute "service puma_#{application_basename} restart || "\
              "service puma_#{application_basename} start"
    end
  end
end

end