module Buzztools::File

Public Instance Methods

append_slash(aPath,aSep=nil) click to toggle source
# File lib/buzztools/file.rb, line 17
def append_slash(aPath,aSep=nil)
        aSep = sniff_seperator(aPath) unless aSep
        aPath.ensure_suffix(aSep)
end
canonize_path(aPath,aRootPath=nil) click to toggle source

takes a path and combines it with a root path (which defaults to Dir.pwd) unless it is absolute the final result is then expanded

# File lib/buzztools/file.rb, line 70
def canonize_path(aPath,aRootPath=nil)
        path = path_combine(aRootPath,aPath)
        path = real_path(path) if path
        path
end
change_ext(aFile,aExt,aExtend=false) click to toggle source
# File lib/buzztools/file.rb, line 135
def change_ext(aFile,aExt,aExtend=false)
        no_extension(aFile,false)+(aExtend ? '.'+aExt+'.'+extension(aFile,false) : '.'+aExt)
end
expand_magic_path(aPath,aBasePath=nil) click to toggle source

allows special symbols in path currently only … supported, which looks upward in the filesystem for the following relative path from the basepath

# File lib/buzztools/file.rb, line 86
def expand_magic_path(aPath,aBasePath=nil)
        aBasePath ||= Dir.pwd
        path = aPath
        if path.begins_with?('...')
                rel_part = path.split3(/\.\.\.[\/\\]/)[2]
                return find_upwards(aBasePath,rel_part)
        end
        path_combine(aBasePath,aPath)
end
extension(aFile,aExtended=true) click to toggle source
# File lib/buzztools/file.rb, line 124
def extension(aFile,aExtended=true)
        f = ::File.basename(aFile)
        dot = aExtended ? f.index('.') : f.rindex('.')
        return dot ? f[dot+1..-1] : f
end
find_upwards(aStartPath,aPath) click to toggle source
# File lib/buzztools/file.rb, line 76
def find_upwards(aStartPath,aPath)
        curr_path = ::File.expand_path(aStartPath)
        while curr_path && !(test_path_exists = ::File.exists?(test_path = ::File.join(curr_path,aPath))) do
                curr_path = path_parent(curr_path)
        end
        curr_path && test_path_exists ? test_path : nil
end
is_root_path?(aPath) click to toggle source
# File lib/buzztools/file.rb, line 96
def is_root_path?(aPath)
        # if is_windows?
        #    (aPath =~ /^[a-zA-Z]\:[\\\/]$/)==0
        # else
                aPath == '/'
        # end
end
no_extension(aFile,aExtended=true) click to toggle source
# File lib/buzztools/file.rb, line 130
def no_extension(aFile,aExtended=true)
        ext = extension(aFile,aExtended)
        return aFile.chomp('.'+ext)
end
path_combine(aBasePath,aPath) click to toggle source
# File lib/buzztools/file.rb, line 57
def path_combine(aBasePath,aPath)
        return aBasePath if !aPath
        return aPath if !aBasePath
        return path_relative?(aPath) ? ::File.join(aBasePath,aPath) : aPath
end
path_debase(aPath,aBase) click to toggle source
Remove base dir from given path. Result will be relative to base dir and not have a leading or trailing slash

'/a/b/c','/a' = 'b/c' '/a/b/c','/' = 'a/b/c' '/','/' = ''

# File lib/buzztools/file.rb, line 40
def path_debase(aPath,aBase)
        aBase = append_slash(aBase)
        aPath = remove_slash(aPath) unless aPath=='/'
        aPath[0,aBase.length]==aBase ? aPath[aBase.length,aPath.length-aBase.length] : aPath
end
path_parent(aPath) click to toggle source
# File lib/buzztools/file.rb, line 104
def path_parent(aPath)
        return nil if is_root_path?(aPath)
        append_slash(::File.dirname(remove_slash(::File.expand_path(aPath))))
end
path_parts(aPath) click to toggle source
# File lib/buzztools/file.rb, line 119
def path_parts(aPath)
        sep = sniff_seperator(aPath)
        aPath.split(sep)
end
path_rebase(aPath,aOldBase,aNewBase) click to toggle source
# File lib/buzztools/file.rb, line 46
def path_rebase(aPath,aOldBase,aNewBase)
        rel_path = path_debase(aPath,aOldBase)
        append_slash(aNewBase)+rel_path
end
path_relative?(aPath) click to toggle source
# File lib/buzztools/file.rb, line 51
def path_relative?(aPath)
        return false if aPath[0,1]=='/'
        return false if aPath =~ /^[a-zA-Z]:/
        return true
end
real_path(aPath) click to toggle source

make path real according to file system

# File lib/buzztools/file.rb, line 64
def real_path(aPath)
        (path = Pathname.new(::File.expand_path(aPath))) && path.realpath.to_s
end
remove_slash(aPath) click to toggle source
# File lib/buzztools/file.rb, line 22
def remove_slash(aPath)
        last_char = aPath[-1,1]
        aPath = aPath[0..-2] if last_char=='\\' || last_char=='/'
        return aPath
end
simple_dir_name(aPath) click to toggle source
# File lib/buzztools/file.rb, line 109
def simple_dir_name(aPath)
        ::File.basename(remove_slash(aPath))
end
simple_file_name(aPath) click to toggle source
# File lib/buzztools/file.rb, line 113
def simple_file_name(aPath)
        f = ::File.basename(aPath)
        dot = f.index('.')
        return dot ? f[0,dot] : f
end
sniff_seperator(aPath) click to toggle source
# File lib/buzztools/file.rb, line 8
def sniff_seperator(aPath)
        result = 0.upto(aPath.length-1) do |i|
                char = aPath[i,1]
                break char if char=='\\' || char=='/'
        end
        result = ::File::SEPARATOR if result==0
        return result
end