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 1794
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 1862
def c_dir_length
  to_c_dir_bin.length
end
Also aliased as: c_dir_size
c_dir_size() click to toggle source
Alias for: c_dir_length
create(name) click to toggle source
# File lib/zip/zip.rb, line 1831
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
length() click to toggle source
Alias for: local_length
local_length() click to toggle source
# File lib/zip/zip.rb, line 1865
def local_length
  to_local_bin.length
end
Also aliased as: local_size, length, size
local_size() click to toggle source
Alias for: local_length
merge(binstr) click to toggle source
# File lib/zip/zip.rb, line 1798
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
size() click to toggle source
Alias for: local_length
to_c_dir_bin() click to toggle source
# File lib/zip/zip.rb, line 1854
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 1845
def to_local_bin
  s = ""
  each { |k, v|
    s << v.to_local_bin
  }
  s
end
Also aliased as: to_s
to_s() click to toggle source
Alias for: to_local_bin