class Zip::FileSystem::ZipFsFile

Instances of this class are normally accessed via the accessor Zip::File::file. An instance of ZipFsFile behaves like ruby's builtin File (class) object, except it works on Zip::File entries.

The individual methods are not documented due to their similarity with the methods in File

Attributes

dir[W]

Public Class Methods

new(mappedZip) click to toggle source
# File lib/zip/filesystem.rb, line 161
def initialize(mappedZip)
  @mappedZip = mappedZip
end

Public Instance Methods

atime(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 319
def atime(fileName)
  e = get_entry(fileName)
  if e.extra.member? "UniversalTime"
    e.extra["UniversalTime"].atime
  else
    nil
  end
end
basename(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 297
def basename(fileName)
  ::File.basename(fileName)
end
blockdev?(filename) click to toggle source
# File lib/zip/filesystem.rb, line 341
def blockdev?(filename)
  false
end
chardev?(filename) click to toggle source
# File lib/zip/filesystem.rb, line 345
def chardev?(filename)
  false
end
chmod(modeInt, *filenames) click to toggle source
# File lib/zip/filesystem.rb, line 270
def chmod (modeInt, *filenames)
  filenames.each { |fileName|
    e = get_entry(fileName)
    e.fstype = 3 # force convertion filesystem type to unix
    e.unix_perms = modeInt
    e.external_file_attributes = modeInt << 16
    e.dirty = true
  }
  filenames.size
end
chown(ownerInt, groupInt, *filenames) click to toggle source
# File lib/zip/filesystem.rb, line 258
def chown(ownerInt, groupInt, *filenames)
  filenames.each { |fileName|
    e = get_entry(fileName)
    unless e.extra.member?("IUnix")
      e.extra.create("IUnix")
    end
    e.extra["IUnix"].uid = ownerInt
    e.extra["IUnix"].gid = groupInt
  }
  filenames.size
end
ctime(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 328
def ctime(fileName)
  e = get_entry(fileName)
  if e.extra.member? "UniversalTime"
    e.extra["UniversalTime"].ctime
  else
    nil
  end
end
delete(*args) click to toggle source
# File lib/zip/filesystem.rb, line 402
def delete(*args)
  args.each {
    |fileName|
    if directory?(fileName)
      raise Errno::EISDIR, "Is a directory - \"#{fileName}\""
    end
    @mappedZip.remove(fileName)
  }
end
Also aliased as: unlink
directory?(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 227
def directory?(fileName)
  entry = @mappedZip.find_entry(fileName)
  expand_path(fileName) == "/" || (entry != nil && entry.directory?)
end
dirname(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 293
def dirname(fileName)
  ::File.dirname(fileName)
end
executable?(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 202
def executable?(fileName)
  unix_mode_cmp(fileName, 0111)
end
Also aliased as: executable_real?
executable_real?(fileName)
Alias for: executable?
exist?(fileName)
Alias for: exists?
exists?(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 183
def exists?(fileName)
  expand_path(fileName) == "/" || @mappedZip.find_entry(fileName) != nil
end
Also aliased as: exist?, owned?, grpowned?
expand_path(aPath) click to toggle source
# File lib/zip/filesystem.rb, line 418
def expand_path(aPath)
  @mappedZip.expand_path(aPath)
end
file?(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 288
def file?(fileName)
  entry = @mappedZip.find_entry(fileName)
  entry != nil && entry.file?
end
foreach(fileName, aSep = $/, &aProc) click to toggle source
# File lib/zip/filesystem.rb, line 398
def foreach(fileName, aSep = $/, &aProc)
  open(fileName) { |is| is.each_line(aSep, &aProc) }
end
ftype(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 357
def ftype(fileName)
  @mappedZip.get_entry(fileName).directory? ? "directory" : "file"
end
grpowned?(fileName)
Alias for: exists?
join(*fragments) click to toggle source
# File lib/zip/filesystem.rb, line 305
def join(*fragments)
  ::File.join(*fragments)
end
lstat(fileName)
Alias for: stat
mtime(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 315
def mtime(fileName)
  @mappedZip.get_entry(fileName).mtime
end
new(fileName, openMode = "r") click to toggle source
# File lib/zip/filesystem.rb, line 244
def new(fileName, openMode = "r")
  open(fileName, openMode)
end
open(fileName, openMode = "r", permissionInt = 0644, &block) click to toggle source
# File lib/zip/filesystem.rb, line 232
def open(fileName, openMode = "r", permissionInt = 0644, &block)
  openMode.gsub!("b", "") # ignore b option
  case openMode
    when "r"
      @mappedZip.get_input_stream(fileName, &block)
    when "w"
      @mappedZip.get_output_stream(fileName, permissionInt, &block)
    else
      raise StandardError, "openmode '#{openMode} not supported" unless openMode == "r"
  end
end
owned?(fileName)

Permissions not implemented, so if the file exists it is accessible

Alias for: exists?
pipe() click to toggle source
# File lib/zip/filesystem.rb, line 373
def pipe
  raise NotImplementedError, "The pipe() function is not implemented"
end
pipe?(filename) click to toggle source
# File lib/zip/filesystem.rb, line 337
def pipe?(filename)
  false
end
popen(*args, &aProc) click to toggle source
# File lib/zip/filesystem.rb, line 394
def popen(*args, &aProc)
  ::File.popen(*args, &aProc)
end
read(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 390
def read(fileName)
  @mappedZip.read(fileName)
end
readable?(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 192
def readable?(fileName)
  unix_mode_cmp(fileName, 0444)
end
Also aliased as: readable_real?
readable_real?(fileName)
Alias for: readable?
readlines(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 386
def readlines(fileName)
  open(fileName) { |is| is.readlines }
end
rename(fileToRename, newName) click to toggle source
# File lib/zip/filesystem.rb, line 412
def rename(fileToRename, newName)
  @mappedZip.rename(fileToRename, newName) { true }
end
setgid?(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 211
def setgid?(fileName)
  unix_mode_cmp(fileName, 02000)
end
setuid?(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 207
def setuid?(fileName)
  unix_mode_cmp(fileName, 04000)
end
size(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 248
def size(fileName)
  @mappedZip.get_entry(fileName).size
end
size?(fileName) click to toggle source

Returns nil for not found and nil for directories

# File lib/zip/filesystem.rb, line 253
def size?(fileName)
  entry = @mappedZip.find_entry(fileName)
  return (entry == nil || entry.directory?) ? nil : entry.size
end
socket?(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 353
def socket?(fileName)
  false
end
split(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 301
def split(fileName)
  ::File.split(fileName)
end
stat(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 377
def stat(fileName)
  if ! exists?(fileName)
    raise Errno::ENOENT, fileName
  end
  ZipFsStat.new(self, fileName)
end
Also aliased as: lstat
sticky?(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 215
def sticky?(fileName)
  unix_mode_cmp(fileName, 01000)
end
truncate(fileName, len) click to toggle source
# File lib/zip/filesystem.rb, line 223
def truncate(fileName, len)
  raise StandardError, "truncate not supported"
end
umask(*args) click to toggle source
# File lib/zip/filesystem.rb, line 219
def umask(*args)
  ::File.umask(*args)
end
utime(modifiedTime, *fileNames) click to toggle source
# File lib/zip/filesystem.rb, line 309
def utime(modifiedTime, *fileNames)
  fileNames.each { |fileName|
    get_entry(fileName).time = modifiedTime
  }
end
writable?(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 197
def writable?(fileName)
  unix_mode_cmp(fileName, 0222)
end
Also aliased as: writable_real?
writable_real?(fileName)
Alias for: writable?
zero?(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 281
def zero?(fileName)
  sz = size(fileName)
  sz == nil || sz == 0
rescue Errno::ENOENT
  false
end

Private Instance Methods

get_entry(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 165
def get_entry(fileName)
  if ! exists?(fileName)
    raise Errno::ENOENT, "No such file or directory - #{fileName}"
  end
  @mappedZip.find_entry(fileName)
end
unix_mode_cmp(fileName, mode) click to toggle source
# File lib/zip/filesystem.rb, line 173
def unix_mode_cmp(fileName, mode)
  begin
    e = get_entry(fileName)
    e.fstype == 3 && ((e.external_file_attributes >> 16) & mode ) != 0
  rescue Errno::ENOENT
    false
  end
end