Support for the Ruby 2.4 series has ended. See here for reference.
![show/hide quicksearch [+]](../../images/find.png)
The format class knows the guts of the ancient .gem file format and provides the capability to read such ancient gems.
Please pretend this doesn't exist.
Creates a new old-format package reader for gem.  Old-format packages cannot be written.
 
               # File rubygems/package/old.rb, line 22
def initialize gem, security_policy
  require 'fileutils'
  require 'zlib'
  Gem.load_yaml
  @contents        = nil
  @gem             = gem
  @security_policy = security_policy
  @spec            = nil
end
             
            A list of file names contained in this gem
 
               # File rubygems/package/old.rb, line 36
def contents
  verify
  return @contents if @contents
  @gem.with_read_io do |io|
    read_until_dashes io # spec
    header = file_list io
    @contents = header.map { |file| file['path'] }
  end
end
             
            Extracts the files in this package into destination_dir
 
               # File rubygems/package/old.rb, line 52
def extract_files destination_dir
  verify
  errstr = "Error reading files from gem"
  @gem.with_read_io do |io|
    read_until_dashes io # spec
    header = file_list io
    raise Gem::Exception, errstr unless header
    header.each do |entry|
      full_name = entry['path']
      destination = install_location full_name, destination_dir
      file_data = String.new
      read_until_dashes io do |line|
        file_data << line
      end
      file_data = file_data.strip.unpack("m")[0]
      file_data = Zlib::Inflate.inflate file_data
      raise Gem::Package::FormatError, "#{full_name} in #{@gem} is corrupt" if
        file_data.length != entry['size'].to_i
      FileUtils.rm_rf destination
      FileUtils.mkdir_p File.dirname destination
      open destination, 'wb', entry['mode'] do |out|
        out.write file_data
      end
      verbose destination
    end
  end
rescue Zlib::DataError
  raise Gem::Exception, errstr
end
             
            The specification for this gem
 
               # File rubygems/package/old.rb, line 133
def spec
  verify
  return @spec if @spec
  yaml = String.new
  @gem.with_read_io do |io|
    skip_ruby io
    read_until_dashes io do |line|
      yaml << line
    end
  end
  yaml_error = if RUBY_VERSION < '1.9' then
                 YAML::ParseError
               elsif YAML.const_defined?(:ENGINE) && YAML::ENGINE.yamler == 'syck' then
                 YAML::ParseError
               else
                 YAML::SyntaxError
               end
  begin
    @spec = Gem::Specification.from_yaml yaml
  rescue yaml_error
    raise Gem::Exception, "Failed to parse gem specification out of gem file"
  end
rescue ArgumentError
  raise Gem::Exception, "Failed to parse gem specification out of gem file"
end
             
            Raises an exception if a security policy that verifies data is active. Old format gems cannot be verified as signed.
 
               # File rubygems/package/old.rb, line 168
def verify
  return true unless @security_policy
  raise Gem::Security::Exception,
        'old format gems do not contain signatures and cannot be verified' if
    @security_policy.verify_data
  true
end