module Baltix::Actor::Link
   class NoDestinationDirError < StandardError ;end
   class NoSourceDirError < StandardError ;end
   class NoFileError < StandardError ;end

   class << self
      def apply context
         target_dir = context['target_dir'] || raise(NoDestinationDirError)
         source_dir = context['source_dir'] || raise(NoSourceDirError)
         file = context['file'] || raise(NoFileError)

         target_file = File.join(context['target_prefix'] || '', target_dir, file)
         source_file = File.join(source_dir, file)
         FileUtils.mkdir_p(File.dirname(target_file))
         FileUtils.rm_rf(target_file)
         FileUtils.ln_s(source_file, target_file, force: true)
         $stdout.puts "  #{source_file} -> #{target_file}"
      end
   end
end