require 'active_support'

module PersistantDirectory
  # Create persistant directories in /deploy/to/shared
  #
  # Create /deploy/to/shared/public/assets
  #
  #   PersistantDirectory.create('public/assets')
  #
  # Create multiple directories at once
  #
  #   PersistantDirectory.create('public/icons', 'public/files')
  def create(*args)
    options = args.extract_options!
    args.each do |directory|
      try_sudo "mkdir -p -m 775 #{shared_path}/#{directory}"
      try_sudo "chown #{fetch(:runner, "app")}:wheel #{shared_path}/#{directory}"
    end
  end
  
  # Symlink shared persistant directories to the current deployment directory
  #
  # Symlink /deploy/to/shared/public/assets to /deploy/to/current/public/assets
  #
  #   PersistantDirectory.symlink('public/assets')
  #
  # Symlink multiple directories at once
  #
  #   PersistantDirectory.symlink('public/icons', 'public/files')
  def symlink(*args)
    options = args.extract_options!
    directory = args.first
    
    run "ln -s #{shared_path}/#{directory} #{current_path}/#{directory}"
  end
end

Capistrano.plugin :persistant_directory, PersistantDirectory