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(mapped_zip)
click to toggle source
# File lib/zip/filesystem.rb, line 171 def initialize(mapped_zip) @mapped_zip = mapped_zip end
Public Instance Methods
atime(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 326 def atime(filename) e = get_entry(filename) if e.extra.member? 'UniversalTime' e.extra['UniversalTime'].atime elsif e.extra.member? 'NTFS' e.extra['NTFS'].atime end end
basename(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 304 def basename(filename) ::File.basename(filename) end
blockdev?(_filename)
click to toggle source
# File lib/zip/filesystem.rb, line 348 def blockdev?(_filename) false end
chardev?(_filename)
click to toggle source
# File lib/zip/filesystem.rb, line 352 def chardev?(_filename) false end
chmod(mode, *filenames)
click to toggle source
# File lib/zip/filesystem.rb, line 277 def chmod(mode, *filenames) filenames.each do |filename| e = get_entry(filename) e.fstype = 3 # force convertion filesystem type to unix e.unix_perms = mode e.external_file_attributes = mode << 16 e.dirty = true end filenames.size end
chown(owner, group, *filenames)
click to toggle source
# File lib/zip/filesystem.rb, line 267 def chown(owner, group, *filenames) filenames.each do |filename| e = get_entry(filename) e.extra.create('IUnix') unless e.extra.member?('IUnix') e.extra['IUnix'].uid = owner e.extra['IUnix'].gid = group end filenames.size end
ctime(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 335 def ctime(filename) e = get_entry(filename) if e.extra.member? 'UniversalTime' e.extra['UniversalTime'].ctime elsif e.extra.member? 'NTFS' e.extra['NTFS'].ctime end end
delete(*args)
click to toggle source
# File lib/zip/filesystem.rb, line 408 def delete(*args) args.each do |filename| if directory?(filename) raise Errno::EISDIR, "Is a directory - \"#{filename}\"" end @mapped_zip.remove(filename) end end
Also aliased as: unlink
directory?(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 236 def directory?(filename) entry = @mapped_zip.find_entry(filename) expand_path(filename) == '/' || (!entry.nil? && entry.directory?) end
dirname(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 300 def dirname(filename) ::File.dirname(filename) end
executable?(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 211 def executable?(filename) unix_mode_cmp(filename, 0o111) end
Also aliased as: executable_real?
exists?(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 192 def exists?(filename) expand_path(filename) == '/' || !@mapped_zip.find_entry(filename).nil? end
expand_path(path)
click to toggle source
# File lib/zip/filesystem.rb, line 424 def expand_path(path) @mapped_zip.expand_path(path) end
file?(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 295 def file?(filename) entry = @mapped_zip.find_entry(filename) !entry.nil? && entry.file? end
foreach(filename, sep = $INPUT_RECORD_SEPARATOR, &a_proc)
click to toggle source
# File lib/zip/filesystem.rb, line 404 def foreach(filename, sep = $INPUT_RECORD_SEPARATOR, &a_proc) self.open(filename) { |is| is.each_line(sep, &a_proc) } end
ftype(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 364 def ftype(filename) @mapped_zip.get_entry(filename).directory? ? 'directory' : 'file' end
join(*fragments)
click to toggle source
# File lib/zip/filesystem.rb, line 312 def join(*fragments) ::File.join(*fragments) end
link(_filename, _symlink_name)
click to toggle source
# File lib/zip/filesystem.rb, line 376 def link(_filename, _symlink_name) raise NotImplementedError, 'The link() function is not implemented' end
mtime(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 322 def mtime(filename) @mapped_zip.get_entry(filename).mtime end
new(filename, mode = 'r')
click to toggle source
# File lib/zip/filesystem.rb, line 253 def new(filename, mode = 'r') self.open(filename, mode) end
open(filename, mode = 'r', permissions = 0o644, &block)
click to toggle source
# File lib/zip/filesystem.rb, line 241 def open(filename, mode = 'r', permissions = 0o644, &block) mode.delete!('b') # ignore b option case mode when 'r' @mapped_zip.get_input_stream(filename, &block) when 'w' @mapped_zip.get_output_stream(filename, permissions, &block) else raise StandardError, "openmode '#{mode} not supported" unless mode == '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 380 def pipe raise NotImplementedError, 'The pipe() function is not implemented' end
pipe?(_filename)
click to toggle source
# File lib/zip/filesystem.rb, line 344 def pipe?(_filename) false end
popen(*args, &a_proc)
click to toggle source
# File lib/zip/filesystem.rb, line 400 def popen(*args, &a_proc) ::File.popen(*args, &a_proc) end
read(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 396 def read(filename) @mapped_zip.read(filename) end
readable?(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 201 def readable?(filename) unix_mode_cmp(filename, 0o444) end
Also aliased as: readable_real?
readlines(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 392 def readlines(filename) self.open(filename, &:readlines) end
readlink(_filename)
click to toggle source
# File lib/zip/filesystem.rb, line 368 def readlink(_filename) raise NotImplementedError, 'The readlink() function is not implemented' end
rename(file_to_rename, new_name)
click to toggle source
# File lib/zip/filesystem.rb, line 418 def rename(file_to_rename, new_name) @mapped_zip.rename(file_to_rename, new_name) { true } end
setgid?(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 220 def setgid?(filename) unix_mode_cmp(filename, 0o2000) end
setuid?(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 216 def setuid?(filename) unix_mode_cmp(filename, 0o4000) end
size(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 257 def size(filename) @mapped_zip.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 262 def size?(filename) entry = @mapped_zip.find_entry(filename) entry.nil? || entry.directory? ? nil : entry.size end
socket?(_filename)
click to toggle source
# File lib/zip/filesystem.rb, line 360 def socket?(_filename) false end
split(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 308 def split(filename) ::File.split(filename) end
stat(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 384 def stat(filename) raise Errno::ENOENT, filename unless exists?(filename) ZipFsStat.new(self, filename) end
Also aliased as: lstat
sticky?(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 224 def sticky?(filename) unix_mode_cmp(filename, 0o1000) end
symlink(_filename, _symlink_name)
click to toggle source
# File lib/zip/filesystem.rb, line 372 def symlink(_filename, _symlink_name) raise NotImplementedError, 'The symlink() function is not implemented' end
symlink?(_filename)
click to toggle source
# File lib/zip/filesystem.rb, line 356 def symlink?(_filename) false end
truncate(_filename, _len)
click to toggle source
# File lib/zip/filesystem.rb, line 232 def truncate(_filename, _len) raise StandardError, 'truncate not supported' end
umask(*args)
click to toggle source
# File lib/zip/filesystem.rb, line 228 def umask(*args) ::File.umask(*args) end
utime(modified_time, *filenames)
click to toggle source
# File lib/zip/filesystem.rb, line 316 def utime(modified_time, *filenames) filenames.each do |filename| get_entry(filename).time = modified_time end end
writable?(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 206 def writable?(filename) unix_mode_cmp(filename, 0o222) end
Also aliased as: writable_real?
zero?(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 288 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 175 def get_entry(filename) unless exists?(filename) raise Errno::ENOENT, "No such file or directory - #{filename}" end @mapped_zip.find_entry(filename) end
unix_mode_cmp(filename, mode)
click to toggle source
# File lib/zip/filesystem.rb, line 184 def unix_mode_cmp(filename, mode) e = get_entry(filename) e.fstype == 3 && ((e.external_file_attributes >> 16) & mode) != 0 rescue Errno::ENOENT false end