Class: Gem::Package::Old
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
::Gem::Package
|
|
Instance Chain:
|
|
Inherits: |
Gem::Package
|
Defined in: | lib/rubygems/package/old.rb |
Overview
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.
Class Method Summary
-
.new(gem) ⇒ Old
constructor
Creates a new old-format package reader for
gem
.
::Gem::Package - Inherited
.build, | |
.new | Creates a new ::Gem::Package for the file at |
Instance Attribute Summary
::Gem::Package - Inherited
#security_policy | The security policy used for verifying the contents of this package. |
#spec | The spec for this gem. |
#spec= | Sets the ::Gem::Specification to use to build this package. |
#checksums | Checksums for the contents of the package. |
#files | The files in this package. |
::Gem::DefaultUserInteraction - Included
Instance Method Summary
-
#contents
A list of file names contained in this gem.
-
#extract_files(destination_dir)
Extracts the files in this package into
destination_dir
-
#spec
The specification for this gem.
-
#verify
Raises an exception if a security policy that verifies data is active.
::Gem::Package - Inherited
#add_checksums | Adds a checksum for each entry in the gem to checksums.yaml.gz. |
#build | Builds this package based on the specification set by #spec= |
#contents | A list of file names contained in this gem. |
#extract_files | Extracts the files in this package into |
#gzip_to | Gzips content written to |
#initialize | Creates a new package that will read or write to the file |
#read_checksums | Reads and loads checksums.yaml.gz from the tar file |
#setup_signer | Prepares the gem for signing and checksum generation. |
#verify | Verifies that this gem: |
#verify_entry | Verifies |
#verify_files | Verifies the files of the |
::Gem::UserInteraction - Included
#alert | Displays an alert |
#alert_error | Displays an error |
#alert_warning | Displays a warning |
#ask | Asks a |
#ask_for_password | Asks for a password with a |
#ask_yes_no | Asks a yes or no |
#choose_from_list | Asks the user to answer |
#say | Displays the given |
#terminate_interaction | Terminates the RubyGems process with the given |
#verbose | Calls |
::Gem::DefaultUserInteraction - Included
Constructor Details
.new(gem) ⇒ Old
Creates a new old-format package reader for gem
. Old-format packages cannot be written.
# File 'lib/rubygems/package/old.rb', line 21
def initialize gem require 'fileutils' require 'zlib' Gem.load_yaml @contents = nil @gem = gem @security_policy = nil @spec = nil end
Instance Method Details
#contents
A list of file names contained in this gem
# File 'lib/rubygems/package/old.rb', line 35
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
#extract_files(destination_dir)
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" @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 = '' 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
#spec
The specification for this gem
# File 'lib/rubygems/package/old.rb', line 132
def spec verify return @spec if @spec yaml = '' @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
#verify
Raises an exception if a security policy that verifies data is active. Old
format gems cannot be verified as signed.