Class: Ole::Storage::DirClass
- Inherits:
-
Object
- Object
- Ole::Storage::DirClass
- Defined in:
- lib/ole/storage/file_system.rb
Overview
An instance of this class is supposed to provide similar methods to the class methods of Dir itself.
Fairly complete - like zip/zipfilesystem’s implementation, i provide everything except chroot and glob. glob could be done with a glob to regex conversion, and then simply match in the entries array… although recursive glob complicates that somewhat.
Dir.chroot, Dir.glob, Dir.[], and Dir.tmpdir is the complete list of methods still missing.
Defined Under Namespace
Classes: Dir
Instance Method Summary collapse
- #chdir(orig_path) ⇒ Object
- #entries(path) ⇒ Object
- #foreach(path, &block) ⇒ Object
-
#initialize(ole) ⇒ DirClass
constructor
A new instance of DirClass.
- #mkdir(path) ⇒ Object
-
#new(path) ⇒ Object
as for file, explicit alias to inhibit block.
- #open(path) {|dir| ... } ⇒ Object
-
#pwd ⇒ Object
(also: #getwd)
pwd is always stored without the trailing slash.
- #rmdir(path) ⇒ Object (also: #delete, #unlink)
Constructor Details
#initialize(ole) ⇒ DirClass
Returns a new instance of DirClass.
254 255 256 257 |
# File 'lib/ole/storage/file_system.rb', line 254 def initialize ole @ole = ole @pwd = '' end |
Instance Method Details
#chdir(orig_path) ⇒ Object
289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 |
# File 'lib/ole/storage/file_system.rb', line 289 def chdir orig_path # make path absolute, squeeze slashes, and remove trailing slash path = @ole.file.(orig_path).squeeze('/').sub(/\/$/, '') # this is just for the side effects of the exceptions if invalid dirent_from_path path, orig_path if block_given? old_pwd = @pwd begin @pwd = path yield ensure @pwd = old_pwd end else @pwd = path 0 end end |
#entries(path) ⇒ Object
308 309 310 311 312 313 314 315 316 317 318 319 320 |
# File 'lib/ole/storage/file_system.rb', line 308 def entries path dirent = dirent_from_path path # Not sure about adding on the dots... entries = %w[. ..] + dirent.children.map(&:name) # do some checks about un-reachable files seen = {} entries.each do |n| Log.warn "inaccessible file (filename contains slash) - #{n.inspect}" if n['/'] Log.warn "inaccessible file (duplicate filename) - #{n.inspect}" if seen[n] seen[n] = true end entries end |
#foreach(path, &block) ⇒ Object
322 323 324 |
# File 'lib/ole/storage/file_system.rb', line 322 def foreach path, &block entries(path).each(&block) end |
#mkdir(path) ⇒ Object
326 327 328 329 330 331 332 333 334 335 336 |
# File 'lib/ole/storage/file_system.rb', line 326 def mkdir path parent_path, basename = File.split @ole.file.(path) # note that we will complain about the full path despite accessing # the parent path. this is consistent with ::Dir parent = dirent_from_path parent_path, path # now, we first should ensure that it doesn't already exist # either as a file or a directory. raise Errno::EEXIST, path if parent/basename parent << Dirent.new(@ole, :type => :dir, :name => basename) 0 end |
#new(path) ⇒ Object
as for file, explicit alias to inhibit block
277 278 279 |
# File 'lib/ole/storage/file_system.rb', line 277 def new path open path end |
#open(path) {|dir| ... } ⇒ Object
270 271 272 273 274 |
# File 'lib/ole/storage/file_system.rb', line 270 def open path dir = Dir.new path, entries(path) return dir unless block_given? yield dir end |
#pwd ⇒ Object Also known as: getwd
pwd is always stored without the trailing slash. we handle the root case here
283 284 285 286 |
# File 'lib/ole/storage/file_system.rb', line 283 def pwd return '/' if @pwd.empty? @pwd end |
#rmdir(path) ⇒ Object Also known as: delete, unlink
338 339 340 341 342 343 |
# File 'lib/ole/storage/file_system.rb', line 338 def rmdir path dirent = dirent_from_path path raise Errno::ENOTEMPTY, path unless dirent.children.empty? dirent.parent.delete dirent 0 # hmmm. as per ::Dir ? end |