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.
Methods
- C
- E
- N
- S
- V
Class Public methods
new(gem)
Link
Creates a new old-format package reader for gem
. Old-format
packages cannot be written.
Instance Public methods
contents()
Link
A list of file names contained in this gem
extract_files(destination_dir)
Link
Extracts the files in this package into destination_dir
# File lib/rubygems/package/old.rb, line 51 def extract_files destination_dir verify errstr = "Error reading files from gem" open @gem, 'rb' 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 = '' 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 say destination if Gem.configuration.really_verbose end end rescue Zlib::DataError raise Gem::Exception, errstr end
spec()
Link
The specification for this gem
# File lib/rubygems/package/old.rb, line 132 def spec verify return @spec if @spec yaml = '' open @gem, 'rb' 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::ENGINE.yamler == 'syck' then YAML::ParseError else YAML::SyntaxError end begin @spec = Gem::Specification.from_yaml yaml rescue yaml_error => e raise Gem::Exception, "Failed to parse gem specification out of gem file" end rescue ArgumentError => e raise Gem::Exception, "Failed to parse gem specification out of gem file" end