Module: Buzztools::File
- Defined in:
- lib/buzztools/file.rb
Class Method Summary collapse
- .append_slash(aPath, aSep = nil) ⇒ Object
-
.canonize_path(aPath, aRootPath = nil) ⇒ Object
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.
- .change_ext(aFile, aExt, aExtend = false) ⇒ Object
-
.expand_magic_path(aPath, aBasePath = nil) ⇒ Object
allows special symbols in path currently only ...
- .extension(aFile, aExtended = true) ⇒ Object
- .find_upwards(aStartPath, aPath) ⇒ Object
- .no_extension(aFile, aExtended = true) ⇒ Object
- .path_combine(aBasePath, aPath) ⇒ Object
-
.path_debase(aPath, aBase) ⇒ Object
Remove base dir from given path.
- .path_parent(aPath) ⇒ Object
- .path_parts(aPath) ⇒ Object
- .path_rebase(aPath, aOldBase, aNewBase) ⇒ Object
-
.real_path(aPath) ⇒ Object
make path real according to file system.
- .remove_slash(aPath) ⇒ Object
- .simple_dir_name(aPath) ⇒ Object
- .simple_file_name(aPath) ⇒ Object
- .sniff_seperator(aPath) ⇒ Object
Class Method Details
.append_slash(aPath, aSep = nil) ⇒ Object
15 16 17 18 |
# File 'lib/buzztools/file.rb', line 15 def append_slash(aPath,aSep=nil) aSep = sniff_seperator(aPath) unless aSep aPath.ensure_suffix(aSep) end |
.canonize_path(aPath, aRootPath = nil) ⇒ Object
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
62 63 64 65 66 |
# File 'lib/buzztools/file.rb', line 62 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) ⇒ Object
118 119 120 |
# File 'lib/buzztools/file.rb', line 118 def change_ext(aFile,aExt,aExtend=false) no_extension(aFile,false)+(aExtend ? '.'+aExt+'.'+extension(aFile,false) : '.'+aExt) end |
.expand_magic_path(aPath, aBasePath = nil) ⇒ Object
allows special symbols in path currently only ... supported, which looks upward in the filesystem for the following relative path from the basepath
78 79 80 81 82 83 84 85 |
# File 'lib/buzztools/file.rb', line 78 def (aPath,aBasePath=nil) aBasePath ||= Dir.pwd path = aPath if path.begins_with?('...') rel_part = path.split3(/\.\.\.[\/\\]/)[2] path = find_upwards(aBasePath,rel_part) end end |
.extension(aFile, aExtended = true) ⇒ Object
107 108 109 110 111 |
# File 'lib/buzztools/file.rb', line 107 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) ⇒ Object
68 69 70 71 72 73 74 |
# File 'lib/buzztools/file.rb', line 68 def find_upwards(aStartPath,aPath) curr_path = ::File.(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 |
.no_extension(aFile, aExtended = true) ⇒ Object
113 114 115 116 |
# File 'lib/buzztools/file.rb', line 113 def no_extension(aFile,aExtended=true) ext = extension(aFile,aExtended) return aFile.chomp('.'+ext) end |
.path_combine(aBasePath, aPath) ⇒ Object
49 50 51 52 53 |
# File 'lib/buzztools/file.rb', line 49 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) ⇒ Object
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' '/','/' = ''
38 39 40 41 42 |
# File 'lib/buzztools/file.rb', line 38 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) ⇒ Object
87 88 89 90 |
# File 'lib/buzztools/file.rb', line 87 def path_parent(aPath) return nil if is_root_path?(aPath) append_slash(::File.dirname(remove_slash((aPath)))) end |
.path_parts(aPath) ⇒ Object
102 103 104 105 |
# File 'lib/buzztools/file.rb', line 102 def path_parts(aPath) sep = sniff_seperator(aPath) aPath.split(sep) end |
.path_rebase(aPath, aOldBase, aNewBase) ⇒ Object
44 45 46 47 |
# File 'lib/buzztools/file.rb', line 44 def path_rebase(aPath,aOldBase,aNewBase) rel_path = path_debase(aPath,aOldBase) append_slash(aNewBase)+rel_path end |
.real_path(aPath) ⇒ Object
make path real according to file system
56 57 58 |
# File 'lib/buzztools/file.rb', line 56 def real_path(aPath) (path = Pathname.new(::File.(aPath))) && path.realpath.to_s end |
.remove_slash(aPath) ⇒ Object
20 21 22 23 24 |
# File 'lib/buzztools/file.rb', line 20 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) ⇒ Object
92 93 94 |
# File 'lib/buzztools/file.rb', line 92 def simple_dir_name(aPath) ::File.basename(remove_slash(aPath)) end |
.simple_file_name(aPath) ⇒ Object
96 97 98 99 100 |
# File 'lib/buzztools/file.rb', line 96 def simple_file_name(aPath) f = ::File.basename(aPath) dot = f.index('.') return dot ? f[0,dot] : f end |
.sniff_seperator(aPath) ⇒ Object
6 7 8 9 10 11 12 13 |
# File 'lib/buzztools/file.rb', line 6 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 |