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. |
| #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 | Returns a value representing the “cost” of transforming str1 into str2 Vendored version of |
| #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 21
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 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 = 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 96
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 109
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 132
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 Psych::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.