Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more

In Files

  • rubygems/format.rb

Class/Module Index [+]

Quicksearch

Gem::Format

Gem::Format knows the guts of the RubyGem .gem file format and provides the capability to read gem files

Attributes

file_entries[RW]
gem_path[RW]
spec[RW]

Public Class Methods

from_file_by_path(file_path, security_policy = nil) click to toggle source

Reads the gem file_path using security_policy and returns a Format representing the data in the gem

 
               # File rubygems/format.rb, line 30
def self.from_file_by_path(file_path, security_policy = nil)
  unless File.file?(file_path)
    raise Gem::Exception, "Cannot load gem at [#{file_path}] in #{Dir.pwd}"
  end

  start = File.read file_path, 20

  if start.nil? or start.length < 20 then
    nil
  elsif start.include?("MD5SUM =") # old version gems
    require 'rubygems/old_format'

    Gem::OldFormat.from_file_by_path file_path
  else
    begin
      open file_path, Gem.binary_mode do |io|
        from_io io, file_path, security_policy
      end
    rescue Gem::Package::TarInvalidError => e
      message = "corrupt gem (#{e.class}: #{e.message})"
      raise Gem::Package::FormatError.new(message, file_path)
    end
  end
end
            
from_io(io, gem_path="(io)", security_policy = nil) click to toggle source

Reads a gem from io at gem_path using security_policy and returns a Format representing the data from the gem

 
               # File rubygems/format.rb, line 59
def self.from_io(io, gem_path="(io)", security_policy = nil)
  format = new gem_path

  Gem::Package.open io, 'r', security_policy do |pkg|
    format.spec = pkg.metadata
    format.file_entries = []

    pkg.each do |entry|
      size = entry.header.size
      mode = entry.header.mode

      format.file_entries << [{
          "size" => size, "mode" => mode, "path" => entry.full_name,
        },
        entry.read
      ]
    end
  end

  format
end
            
new(gem_path) click to toggle source

Constructs a Format representing the gem’s data which came from gem_path

 
               # File rubygems/format.rb, line 22
def initialize(gem_path)
  @gem_path = gem_path
end
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.