class Zip::ZipExtraField
Constants
- ID_MAP
Public Class Methods
new(binstr = nil)
click to toggle source
start main of ZipExtraField < Hash
# File lib/zip/zip.rb, line 1760 def initialize(binstr = nil) binstr and merge(binstr) end
Public Instance Methods
c_dir_length()
click to toggle source
# File lib/zip/zip.rb, line 1828 def c_dir_length to_c_dir_bin.length end
Also aliased as: c_dir_size
create(name)
click to toggle source
# File lib/zip/zip.rb, line 1797 def create(name) field_class = nil ID_MAP.each { |id, klass| if klass.name == name field_class = klass break end } if ! field_class raise ZipError, "Unknown extra field '#{name}'" end self[name] = field_class.new() end
local_length()
click to toggle source
# File lib/zip/zip.rb, line 1831 def local_length to_local_bin.length end
merge(binstr)
click to toggle source
# File lib/zip/zip.rb, line 1764 def merge(binstr) binstr == "" and return i = 0 while i < binstr.length id = binstr[i,2] len = binstr[i+2,2].to_s.unpack("v")[0] if id && ID_MAP.member?(id) field_name = ID_MAP[id].name if self.member?(field_name) self[field_name].mergea(binstr[i, len+4]) else field_obj = ID_MAP[id].new(binstr[i, len+4]) self[field_name] = field_obj end elsif id unless self["Unknown"] s = "" class << s alias_method :to_c_dir_bin, :to_s alias_method :to_local_bin, :to_s end self["Unknown"] = s end if ! len || len+4 > binstr[i..-1].length self["Unknown"] << binstr[i..-1] break; end self["Unknown"] << binstr[i, len+4] end i += len+4 end end
to_c_dir_bin()
click to toggle source
# File lib/zip/zip.rb, line 1820 def to_c_dir_bin s = "" each { |k, v| s << v.to_c_dir_bin } s end
to_local_bin()
click to toggle source
# File lib/zip/zip.rb, line 1811 def to_local_bin s = "" each { |k, v| s << v.to_local_bin } s end
Also aliased as: to_s