Class Gem::Format
In: lib/rubygems/format.rb
Parent: Object

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

Methods

Attributes

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

Public Class methods

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

[Source]

    # File lib/rubygems/format.rb, line 30
30:   def self.from_file_by_path(file_path, security_policy = nil)
31:     unless File.file?(file_path)
32:       raise Gem::Exception, "Cannot load gem at [#{file_path}] in #{Dir.pwd}"
33:     end
34: 
35:     start = File.read file_path, 20
36: 
37:     if start.nil? or start.length < 20 then
38:       nil
39:     elsif start.include?("MD5SUM =") # old version gems
40:       require 'rubygems/old_format'
41: 
42:       Gem::OldFormat.from_file_by_path file_path
43:     else
44:       begin
45:         open file_path, Gem.binary_mode do |io|
46:           from_io io, file_path, security_policy
47:         end
48:       rescue Gem::Package::TarInvalidError => e
49:         message = "corrupt gem (#{e.class}: #{e.message})"
50:         raise Gem::Package::FormatError.new(message, file_path)
51:       end
52:     end
53:   end

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

[Source]

    # File lib/rubygems/format.rb, line 59
59:   def self.from_io(io, gem_path="(io)", security_policy = nil)
60:     format = new gem_path
61: 
62:     Gem::Package.open io, 'r', security_policy do |pkg|
63:       format.spec = pkg.metadata
64:       format.file_entries = []
65: 
66:       pkg.each do |entry|
67:         size = entry.header.size
68:         mode = entry.header.mode
69: 
70:         format.file_entries << [{
71:             "size" => size, "mode" => mode, "path" => entry.full_name,
72:           },
73:           entry.read
74:         ]
75:       end
76:     end
77: 
78:     format
79:   end

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

[Source]

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

[Validate]