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, security_policy) ⇒ Old
constructor
Creates a new old-format package reader for #gem.
::Gem::Package
- Inherited
.build, | |
.new | Creates a new |
.raw_spec | Extracts the |
Instance Attribute Summary
::Gem::Package
- Inherited
#checksums | Checksums for the contents of the package. |
#data_mode | Permission for other files. |
#dir_mode | Permission for directories. |
#files | The files in this package. |
#gem | Reference to the gem being packaged. |
#prog_mode | Permission for program files. |
#security_policy | The security policy used for verifying the contents of this package. |
#spec | The spec for this gem. |
#spec= | Sets the |
#build_time |
::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.
-
#file_list(io)
Internal use only
Reads the file list section from the old-format gem
io
-
#read_until_dashes(io)
Internal use only
Reads lines until a “—” separator is found.
-
#skip_ruby(io)
Internal use only
Skips the Ruby self-install header in
io
.
::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. |
#copy_to | Copies this package to Gem.path (if possible). |
#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 #gem. |
#mkdir_p_safe, #normalize_path, | |
#read_checksums | Reads and loads checksums.yaml.gz from the tar file #gem |
#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 |
#add_contents | Adds the files listed in the packages’s |
#add_files | Adds files included the package’s |
#add_metadata | Adds the package’s |
#digest | Creates a digest of the TarEntry |
#extract_tar_gz | Extracts all the files in the gzipped tar archive |
#file_mode, | |
#install_location | Returns the full path for installing |
#load_spec | Loads a |
#open_tar_gz | Opens |
#verify_checksums | Verifies the #checksums against the |
#verify_gz | Verifies that |
::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
::Gem::Text
- Included
#clean_text | Remove any non-printable characters and make the text suitable for printing. |
#format_text | Wraps |
#levenshtein_distance | This code is based directly on the |
#truncate_text, #min3 |
Constructor Details
.new(gem, security_policy) ⇒ Old
Creates a new old-format package reader for Gem::Package#gem. Old-format packages cannot be written.
# File 'lib/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
Instance Method Details
#contents
A list of file names contained in this gem
# File 'lib/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
#extract_files(destination_dir)
Extracts the files in this package into destination_dir
# File 'lib/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), :mode => dir_mode && 0755 File.open destination, 'wb', file_mode(entry['mode']) do |out| out.write file_data end verbose destination end end rescue Zlib::DataError raise Gem::Exception, errstr end
#file_list(io)
Reads the file list section from the old-format gem io
# File 'lib/rubygems/package/old.rb', line 97
def file_list(io) # :nodoc: header = String.new read_until_dashes io do |line| header << line end Gem::SafeYAML.safe_load header end
#read_until_dashes(io)
Reads lines until a “—” separator is found
# File 'lib/rubygems/package/old.rb', line 110
def read_until_dashes(io) # :nodoc: while (line = io.gets) && line.chomp.strip != "---" do yield line if block_given? end end
#skip_ruby(io)
Skips the Ruby self-install header in io
.
#spec
The specification for this gem
# File 'lib/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 begin @spec = Gem::Specification.from_yaml yaml rescue YAML::SyntaxError 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.