| 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
| file_entries | [RW] | |
| gem_path | [RW] | |
| spec | [RW] |
Reads the named gem file and returns a Format object, representing the data from the gem file
| file_path: | [String] Path to the gem file |
# File lib/rubygems/format.rb, line 37
37: def self.from_file_by_path(file_path, security_policy = nil)
38: format = nil
39:
40: unless File.exist?(file_path)
41: raise Gem::Exception, "Cannot load gem at [#{file_path}] in #{Dir.pwd}"
42: end
43:
44: # check for old version gem
45: if File.read(file_path, 20).include?("MD5SUM =")
46: require 'rubygems/old_format'
47:
48: format = Gem::OldFormat.from_file_by_path(file_path)
49: else
50: open file_path, Gem.binary_mode do |io|
51: format = from_io io, file_path, security_policy
52: end
53: end
54:
55: return format
56: end
Reads a gem from an io stream and returns a Format object, representing the data from the gem file
| io: | [IO] Stream from which to read the gem |
# File lib/rubygems/format.rb, line 64
64: def self.from_io(io, gem_path="(io)", security_policy = nil)
65: format = new gem_path
66:
67: Gem::Package.open io, 'r', security_policy do |pkg|
68: format.spec = pkg.metadata
69: format.file_entries = []
70:
71: pkg.each do |entry|
72: size = entry.header.size
73: mode = entry.header.mode
74:
75: format.file_entries << [{
76: "size" => size, "mode" => mode, "path" => entry.full_name,
77: },
78: entry.read
79: ]
80: end
81: end
82:
83: format
84: end