diff options
Diffstat (limited to 'lib/dslkeywords/symlink.rb')
| -rw-r--r-- | lib/dslkeywords/symlink.rb | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/lib/dslkeywords/symlink.rb b/lib/dslkeywords/symlink.rb new file mode 100644 index 0000000..160da6f --- /dev/null +++ b/lib/dslkeywords/symlink.rb @@ -0,0 +1,34 @@ +require 'fileutils' + +require_relative 'file' + +module RCM + # Manages symbolic links: creates or removes them, optionally under + # a managed parent directory, and applies permissions afterwards. + class Symlink < BaseFile + def evaluate! + return unless super + return evaluate_absent! if %i[absent purged].include?(@is) + return if ::File.symlink?(@file_path) && ::File.readlink(@file_path) == content + + create_parent_directory! if @manage_directory + do? "Creating symlink #{@file_path}" do + FileUtils.ln_sf(content, @file_path) + end + ensure + permissions! + end + end + + class DSL + def symlink(file_path = nil, &block) + return :symlink if file_path.nil? + return unless @conds_met + + s = Symlink.new(file_path) + s.content(s.instance_eval(&block)) + self << s + s + end + end +end |
