class Gitenv::Symlink
Public Class Methods
new(context, file, options = {})
click to toggle source
# File lib/gitenv/actions/symlink.rb, line 23 def initialize(context, file, options = {}) @context = context @file = file @as = options[:as] @overwrite = options[:overwrite] @backup = options[:backup] @mkdir = options.fetch :mkdir, true @backup = true if @overwrite && !options.key?(:backup) end
Public Instance Methods
apply()
click to toggle source
# File lib/gitenv/actions/symlink.rb, line 33 def apply FileUtils.mkdir_p File.dirname(link) if @mkdir backup_exists = File.exist? link_backup FileUtils.mv link, link_backup if @backup && file_or_symlink_exists?(link) && !backup_exists return if File.symlink?(link) && File.readlink(link) == target # TODO: only if link points somewhere else FileUtils.rm link if @overwrite && file_or_symlink_exists?(link) && !backup_exists File.symlink target, link unless File.exist?(link) end
link()
click to toggle source
# File lib/gitenv/actions/symlink.rb, line 72 def link @link ||= File.join(*[@context.to, link_name].compact) end
link_backup()
click to toggle source
# File lib/gitenv/actions/symlink.rb, line 76 def link_backup @link_backup ||= "#{link}.orig" end
status()
click to toggle source
# File lib/gitenv/actions/symlink.rb, line 48 def status backup_notice = (' backup the file and' if @backup) if File.symlink? link current_target = File.expand_path File.readlink(link) if @overwrite == false || current_target == target Status.ok 'ok' elsif !@overwrite Status.error "exists but points to #{current_target}; enable overwrite if you want to replace it" elsif @backup && File.exist?(link_backup) Status.error 'already exists with backup copy' else Status.warning "currently points to #{current_target}; apply will#{backup_notice} overwrite" end elsif File.exist? link if @overwrite Status.warning "exists but is not a symlink; apply will#{backup_notice} overwrite" else Status.error 'exists but is not a symlink; apply will ignore' end else Status.missing 'is not set up; apply will create the link' end end
target()
click to toggle source
# File lib/gitenv/actions/symlink.rb, line 80 def target @target ||= File.join(*[@context.from, @file].compact) end
to_s()
click to toggle source
# File lib/gitenv/actions/symlink.rb, line 44 def to_s "#{Paint[link, :cyan]} #{Paint['->', :bold]} #{target}" end
Private Instance Methods
file_or_symlink_exists?(path)
click to toggle source
# File lib/gitenv/actions/symlink.rb, line 90 def file_or_symlink_exists?(path) File.symlink?(path) || File.exist?(path) end
link_name()
click to toggle source
# File lib/gitenv/actions/symlink.rb, line 86 def link_name @link_name ||= @as || @file end