Module: Cfruby::FileOps::SymlinkHandler
- Defined in:
- lib/libcfruby/fileops.rb
Overview
Methods for standard operations involving symbolic links
Class Method Summary collapse
-
.broken?(symlink) ⇒ Boolean
Returns true if a file is a broken symlink.
-
.points_to?(symlink, filename) ⇒ Boolean
Returns whether a symlink is actually pointing to
filename
. -
.stat(filename) ⇒ Object
Returns File.stat unless it is a symbolic link not pointing to an existing file - in that case it returns File.lstat.
-
.unlink(filename) ⇒ Object
the stdlib Pathname.unlink balks when removing a symlink - this method will call File.unlink instead when dealing with a symlink.
Class Method Details
.broken?(symlink) ⇒ Boolean
Returns true if a file is a broken symlink
905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 |
# File 'lib/libcfruby/fileops.rb', line 905 def SymlinkHandler.broken?(symlink) if(!symlink.kind_of?(Pathname)) symlink = Pathname.new(symlink.to_s) end if(!symlink.symlink?()) return(false) end # expand the path and catch the ensuing error in the case of a broken link begin symlink.realpath() rescue if($!.kind_of?(Errno::ENOENT) and $!.to_s =~ /^no such file/i) return(true) else raise($!) end end return(false) end |
.points_to?(symlink, filename) ⇒ Boolean
Returns whether a symlink is actually pointing to filename
. Both parameters may be strings or File objects. This method is used by Cfenjin to ascertain that when a symlink exists it points to the right file. It returns false when filename
does not exist (i.e. symlink points to nothing).
In the case the symlink does not exist a FileOpsWrongFiletypeError is thrown.
936 937 938 939 940 941 942 943 944 945 946 947 948 949 |
# File 'lib/libcfruby/fileops.rb', line 936 def SymlinkHandler.points_to?(symlink, filename) if(!filename.kind_of?(Pathname)) filename = Pathname.new(filename.to_s) end if(!symlink.kind_of?(Pathname)) symlink = Pathname.new(symlink.to_s) end return false if !filename.exist? raise FileOpsWrongFiletypeError if !symlink.symlink? return filename.realpath.to_s == symlink.realpath.to_s end |
.stat(filename) ⇒ Object
Returns File.stat unless it is a symbolic link not pointing to an existing file - in that case it returns File.lstat
877 878 879 880 881 882 883 884 885 886 887 |
# File 'lib/libcfruby/fileops.rb', line 877 def SymlinkHandler.stat(filename) if(!filename.kind_of?(Pathname)) filename = Pathname.new(filename.to_s) end if(filename.symlink? and broken?(filename)) return File.lstat(filename) end return(File.stat(filename)) end |
.unlink(filename) ⇒ Object
the stdlib Pathname.unlink balks when removing a symlink - this method will call File.unlink instead when dealing with a symlink
892 893 894 895 896 897 898 899 900 901 902 |
# File 'lib/libcfruby/fileops.rb', line 892 def SymlinkHandler.unlink(filename) if(!filename.kind_of?(Pathname)) filename = Pathname.new(filename.to_s) end if filename.symlink?() File.unlink filename. else filename.unlink() end end |