Maintenance of Ruby 2.0.0 ended on February 24, 2016. Read more
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.
A list of file names contained in this gem
# File rubygems/package/old.rb, line 35 def contents verify return @contents if @contents open @gem, 'rb' 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 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
The specification for this gem
# File 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
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 167 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