Class: Gem::Format
- Inherits:
-
Object
- Object
- Gem::Format
- Defined in:
- lib/rubygems/format.rb
Overview
Gem::Format knows the guts of the RubyGem .gem file format and provides the capability to read gem files
Instance Attribute Summary collapse
-
#file_entries ⇒ Object
Returns the value of attribute file_entries.
-
#gem_path ⇒ Object
Returns the value of attribute gem_path.
-
#spec ⇒ Object
Returns the value of attribute spec.
Class Method Summary collapse
-
.from_file_by_path(file_path, security_policy = nil) ⇒ Object
Reads the gem
file_path
usingsecurity_policy
and returns a Format representing the data in the gem. -
.from_io(io, gem_path = "(io)", security_policy = nil) ⇒ Object
Reads a gem from
io
atgem_path
usingsecurity_policy
and returns a Format representing the data from the gem.
Instance Method Summary collapse
-
#initialize(gem_path) ⇒ Format
constructor
Constructs a Format representing the gem’s data which came from
gem_path
.
Constructor Details
#initialize(gem_path) ⇒ Format
Constructs a Format representing the gem’s data which came from gem_path
22 23 24 |
# File 'lib/rubygems/format.rb', line 22 def initialize(gem_path) @gem_path = gem_path end |
Instance Attribute Details
#file_entries ⇒ Object
Returns the value of attribute file_entries.
16 17 18 |
# File 'lib/rubygems/format.rb', line 16 def file_entries @file_entries end |
#gem_path ⇒ Object
Returns the value of attribute gem_path.
17 18 19 |
# File 'lib/rubygems/format.rb', line 17 def gem_path @gem_path end |
#spec ⇒ Object
Returns the value of attribute spec.
15 16 17 |
# File 'lib/rubygems/format.rb', line 15 def spec @spec end |
Class Method Details
.from_file_by_path(file_path, security_policy = nil) ⇒ Object
Reads the gem file_path
using security_policy
and returns a Format representing the data in the gem
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/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 = "corrupt gem (#{e.class}: #{e.message})" raise Gem::Package::FormatError.new(, file_path) end end end |
.from_io(io, gem_path = "(io)", security_policy = nil) ⇒ Object
Reads a gem from io
at gem_path
using security_policy
and returns a Format representing the data from the gem
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/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. 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 |