rubyzip/zipfilesystem.rb

158 lines
3.2 KiB
Ruby
Raw Normal View History

2002-07-26 22:12:34 +08:00
#!/usr/bin/env ruby
2002-07-27 04:58:51 +08:00
require 'filearchive'
module Zip
module ZipFileSystem
def dir
@zipFsDir ||= Dir.new(self)
end
def file
@zipFsDir ||= ZipFsFile.new(self)
end
class ZipFsFile
def initialize(zipFile)
@zipFile = zipFile
end
def exists?(fileName)
@zipFile.findEntry(fileName) != nil
end
alias :exist? :exists?
# Permissions not implemented, so if the file exists it is accessible
alias readable? exists?
alias readable_real? exists?
alias writable? exists?
alias writable_real? exists?
alias executable? exists?
alias executable_real? exists?
def directory?(fileName)
entry = @zipFile.findEntry(fileName)
entry != nil && entry.directory?
end
def open(fileName, openMode = "r", &block)
raise StandardError, "openmode '#{openMode} not supported" unless openMode == "r"
@zipFile.getInputStream(fileName, &block)
end
2002-07-27 21:25:16 +08:00
def new(fileName, openMode = "r")
open(fileName, openMode)
end
def size(fileName)
@zipFile.getEntry(fileName).size
end
# nil for not found and nil for directories
def size?(fileName)
entry = @zipFile.findEntry(fileName)
return (entry == nil || entry.directory?) ? nil : entry.size
end
def zero?(fileName)
sz = size(fileName)
sz == nil || sz == 0
rescue Errno::ENOENT
false
end
def file?(fileName)
entry = @zipFile.findEntry(fileName)
entry != nil && entry.file?
end
def dirname(fileName)
::File.dirname(fileName)
end
def basename(fileName)
::File.basename(fileName)
end
def split(fileName)
::File.split(fileName)
end
def join(*fragments)
::File.join(*fragments)
end
def mtime(fileName)
@zipFile.getEntry(fileName).mtime
end
def pipe?(filename)
false
end
def blockdev?(filename)
false
end
def chardev?(filename)
false
end
def symlink?(fileName)
false
end
def socket?(fileName)
false
end
def ftype(fileName)
@zipFile.getEntry(fileName).directory? ? "directory" : "file"
end
def readlink(fileName)
raise NotImplementedError, "The readlink() function is not implemented to ZipFileSystem"
end
2002-07-27 06:23:32 +08:00
def symlink(fileName, symlinkName)
raise NotImplementedError, "The symlink() function is not implemented to ZipFileSystem"
end
2002-07-27 06:25:36 +08:00
def link(fileName, symlinkName)
raise NotImplementedError, "The link() function is not implemented to ZipFileSystem"
end
2002-07-27 06:30:04 +08:00
def pipe
raise NotImplementedError, "The pipe() function is not implemented to ZipFileSystem"
end
def readlines(fileName)
open(fileName) { |is| is.readlines }
end
def popen(*args, &aProc)
File.popen(*args, &aProc)
end
def foreach(fileName, aSep = $/, &aProc)
open(fileName) { |is| is.each_line(aSep, &aProc) }
end
2002-09-12 06:10:34 +08:00
def delete(*args)
args.each {
|fileName|
if directory?(fileName)
raise Errno::EISDIR, "Is a directory - \"#{fileName}\""
end
@zipFile.remove(fileName)
}
end
alias :unlink :delete
2002-07-27 05:32:12 +08:00
end
2002-07-26 22:12:34 +08:00
end
end