class FuseFS::MetaDir

Public Instance Methods

can_delete?(path) click to toggle source

Delete a file

# File lib/fusefs.rb, line 153
def can_delete?(path)
  return false unless Process.uid == FuseFS.reader_uid
  base, rest = split_path(path)
  case
  when base.nil?
    false
  when rest.nil?
    @files.has_key?(base)
  when ! @subdirs.has_key?(base)
    false
  else
    @subdirs[base].can_delete?(rest)
  end
end
can_mkdir?(path) click to toggle source

Make a new directory

# File lib/fusefs.rb, line 183
def can_mkdir?(path)
  return false unless Process.uid == FuseFS.reader_uid
  base, rest = split_path(path)
  case
  when base.nil?
    false
  when rest.nil?
    ! (@subdirs.has_key?(base) || @files.has_key?(base))
  when ! @subdirs.has_key?(base)
    false
  else
    @subdirs[base].can_mkdir?(rest)
  end
end
can_rmdir?(path) click to toggle source

Delete an existing directory.

# File lib/fusefs.rb, line 214
def can_rmdir?(path)
  return false unless Process.uid == FuseFS.reader_uid
  base, rest = split_path(path)
  case
  when base.nil?
    false
  when rest.nil?
    @subdirs.has_key?(base)
  when ! @subdirs.has_key?(base)
    false
  else
    @subdirs[base].can_rmdir?(rest)
  end
end
can_write?(path) click to toggle source

Write to a file

# File lib/fusefs.rb, line 124
def can_write?(path)
  return false unless Process.uid == FuseFS.reader_uid
  base, rest = split_path(path)
  case
  when base.nil?
    true
  when rest.nil?
    true
  when ! @subdirs.has_key?(base)
    false
  else
    @subdirs[base].can_write?(rest)
  end
end
contents(path) click to toggle source

Contents of directory.

# File lib/fusefs.rb, line 49
def contents(path)
  base, rest = split_path(path)
  case
  when base.nil?
    (@files.keys + @subdirs.keys).sort.uniq
  when ! @subdirs.has_key?(base)
    nil
  when rest.nil?
    @subdirs[base].contents('/')
  else
    @subdirs[base].contents(rest)
  end
end
delete(path) click to toggle source
# File lib/fusefs.rb, line 167
def delete(path)
  base, rest = split_path(path)
  case
  when base.nil?
    nil
  when rest.nil?
    # Delete it.
    @files.delete(base)
  when ! @subdirs.has_key?(base)
    nil
  else
    @subdirs[base].delete(rest)
  end
end
directory?(path) click to toggle source

File types

# File lib/fusefs.rb, line 64
def directory?(path)
  base, rest = split_path(path)
  case
  when base.nil?
    true
  when ! @subdirs.has_key?(base)
    false
  when rest.nil?
    true
  else
    @subdirs[base].directory?(rest)
  end
end
file?(path) click to toggle source
# File lib/fusefs.rb, line 77
def file?(path)
  base, rest = split_path(path)
  case
  when base.nil?
    false
  when rest.nil?
    @files.has_key?(base)
  when ! @subdirs.has_key?(base)
    false
  else
    @subdirs[base].file?(rest)
  end
end
mkdir(path,dir=nil) click to toggle source
# File lib/fusefs.rb, line 197
def mkdir(path,dir=nil)
  base, rest = split_path(path)
  case
  when base.nil?
    false
  when rest.nil?
    dir ||= MetaDir.new
    @subdirs[base] = dir
    true
  when ! @subdirs.has_key?(base)
    false
  else
    @subdirs[base].mkdir(rest,dir)
  end
end
read_file(path) click to toggle source

File Reading

# File lib/fusefs.rb, line 92
def read_file(path)
  base, rest = split_path(path)
  case
  when base.nil?
    nil
  when rest.nil?
    @files[base].to_s
  when ! @subdirs.has_key?(base)
    nil
  else
    @subdirs[base].read_file(rest)
  end
end
rmdir(path) click to toggle source
# File lib/fusefs.rb, line 228
def rmdir(path)
  base, rest = split_path(path)
  dir ||= MetaDir.new
  case
  when base.nil?
    false
  when rest.nil?
    @subdirs.delete(base)
    true
  when ! @subdirs.has_key?(base)
    false
  else
    @subdirs[base].rmdir(rest,dir)
  end
end
size(path) click to toggle source

File sizing

# File lib/fusefs.rb, line 107
def size(path)
  base, rest = split_path(path)
  case
  when base.nil?
    0
  when rest.nil?
    obj = @files[base]
    obj.respond_to?(:size) ? obj.size : 0
  when ! @subdirs.has_key?(base)
    0
  else
    dir = @subdirs[base]
    dir.respond_to?(:size) ? dir.size(rest) : 0
  end
end
write_to(path,file) click to toggle source
# File lib/fusefs.rb, line 138
def write_to(path,file)
  base, rest = split_path(path)
  case
  when base.nil?
    false
  when rest.nil?
    @files[base] = file
  when ! @subdirs.has_key?(base)
    false
  else
    @subdirs[base].write_to(rest,file)
  end
end

Public Class Methods

new() click to toggle source
# File lib/fusefs.rb, line 43
def initialize
  @subdirs  = Hash.new(nil)
  @files    = Hash.new(nil)
end