Ruby 4.0 リファレンスマニュアル

class Gem::Package

[edit]

要約

.gem ファイルを読み書きするクラスです。

.gem ファイルは、gemspec を gzip 圧縮した metadata.gz、ファイル本体の tar を gzip 圧縮した data.tar.gz、チェックサムの checksums.yaml.gz を含む tar アーカイブです。 Gem::Specification から .gem ファイルを作ることも、既存の .gem ファイルを検証して展開することもできます。

以下の例は、lib/example.rb があるディレクトリで実行することを前提にしています。

例: gem を作って読む
require 'rubygems/package'

spec = Gem::Specification.new do |s|
  s.name = 'example'
  s.version = '1.0'
  s.summary = 'An example gem'
  s.authors = ['Example Author']
  s.license = 'MIT'
  s.homepage = 'https://example.com/example'
  s.required_ruby_version = '>= 3.0'
  s.files = ['lib/example.rb']
end
Gem::Package.build(spec) # => "example-1.0.gem"

package = Gem::Package.new('example-1.0.gem')
package.spec.name  # => "example"
package.contents   # => ["lib/example.rb"]
package.files      # => ["metadata.gz", "data.tar.gz", "checksums.yaml.gz"]
package.extract_files('out') # out/lib/example.rb に展開します

目次

特異メソッド
インスタンスメソッド

特異メソッド

build(spec, skip_validation = false, strict_validation = false, file_name = nil) -> StringRuby 2.0.0 から[permalink][rdoc][edit]

spec から .gem ファイルを作り、作ったファイルの名前を返します。

ファイルはカレントディレクトリに作られ、Successfully built RubyGem から始まるメッセージを出力します。ファイル名は file_name を指定した場合はそれに、そうでない場合は Gem::Specification#file_name になります。

[PARAM] spec:
.gem ファイルに書き込む Gem::Specification を指定します。
[PARAM] skip_validation:
真を指定すると Gem::Specification#validate を実行しません。
[PARAM] strict_validation:
真を指定すると、警告も検証エラーとして扱います。
[PARAM] file_name:
作る .gem ファイルの名前を指定します。
[EXCEPTION] ArgumentError:
skip_validation と strict_validation がともに真の場合に発生します。

[SEE_ALSO] Gem::Package#build

new(gem, security_policy = nil) -> Gem::PackageRuby 2.0.0 から[permalink][rdoc][edit]

.gem ファイルを扱う Gem::Package オブジェクトを返します。

古い形式の .gem ファイルの場合は、Gem::Package::Old のインスタンスを返します。仕様や中身は、Gem::Package#spec や Gem::Package#verify などを呼んだときに読み込みます。

[PARAM] gem:
.gem ファイルのパスを文字列で指定するか、read を持つ IO オブジェクトを指定します。
[PARAM] security_policy:
署名の検証に使う Gem::Security::Policy を指定します。nil の場合は署名を検証しません。

[SEE_ALSO] Gem::Package#verify

raw_spec(path, security_policy = nil) -> [Gem::Specification, String]Ruby 2.7.0 から[permalink][rdoc][edit]

path の .gem ファイルから Gem::Specification と、metadata.gz を展開した YAML 文字列の 2 要素の配列を返します。

YAML 文字列は --- !ruby/object:Gem::Specification で始まります。

[PARAM] path:
.gem ファイルのパスを指定します。
[PARAM] security_policy:
署名の検証に使う Gem::Security::Policy を指定します。nil の場合は署名を検証しません。

インスタンスメソッド

build(skip_validation = false, strict_validation = false) -> ()Ruby 2.0.0 から[permalink][rdoc][edit]

Gem::Package#spec= で設定した仕様から .gem ファイルを書き出します。

引数の意味は Gem::Package.build と同じです。Successfully built RubyGem から始まるメッセージを出力します。

[PARAM] skip_validation:
真を指定すると Gem::Specification#validate を実行しません。
[PARAM] strict_validation:
真を指定すると、警告も検証エラーとして扱います。
[EXCEPTION] ArgumentError:
skip_validation と strict_validation がともに真の場合に発生します。

[SEE_ALSO] Gem::Package.build

checksums -> {String => {String => String}}Ruby 2.0.0 から[permalink][rdoc][edit]

checksums.yaml.gz から読み込んだチェックサムを返します。

外側のキーはダイジェストのアルゴリズム名("SHA256"・"SHA512")、内側のキーはファイル名("metadata.gz"・"data.tar.gz")で、値は 16 進表記のダイジェストです。 Gem::Package#verify を呼ぶまでは空のハッシュを返します。

[SEE_ALSO] Gem::Package#verify

contents -> [String]Ruby 2.0.0 から[permalink][rdoc][edit]

data.tar.gz に含まれるファイル名(gem に入っているファイル)の配列を返します。

未検証の場合は、先に Gem::Package#verify を呼びます。

[EXCEPTION] Gem::Package::FormatError:
.gem ファイルの形式が不正な場合に発生します。

[SEE_ALSO] Gem::Package#files

copy_to(path) -> ()Ruby 2.3.0 から[permalink][rdoc][edit]

.gem ファイルを path にコピーします。

path が既にある場合は何もしません。

[PARAM] path:
コピー先のパスを指定します。
data_mode -> Integer | nilRuby 2.6.0 から[permalink][rdoc][edit]

Gem::Package#extract_files で展開する通常ファイルのパーミッションを返します。

8 進表記の整数で表します。nil の場合は、アーカイブに記録された値になります。

[SEE_ALSO] Gem::Package#data_mode=

data_mode=(mode)Ruby 2.6.0 から[permalink][rdoc][edit]

Gem::Package#extract_files で展開する通常ファイルのパーミッションを設定します。

[PARAM] mode:
パーミッションを整数で指定します。

[SEE_ALSO] Gem::Package#data_mode

dir_mode -> Integer | nilRuby 2.6.0 から[permalink][rdoc][edit]

Gem::Package#extract_files で展開するディレクトリのパーミッションを返します。

nil の場合は、アーカイブに記録された値になります。

[SEE_ALSO] Gem::Package#dir_mode=

dir_mode=(mode)Ruby 2.6.0 から[permalink][rdoc][edit]

Gem::Package#extract_files で展開するディレクトリのパーミッションを設定します。

[PARAM] mode:
パーミッションを整数で指定します。

[SEE_ALSO] Gem::Package#dir_mode

extract_files(destination_dir, pattern = "*") -> ()Ruby 2.0.0 から[permalink][rdoc][edit]

data.tar.gz の中身を destination_dir に展開します。

未検証の場合は、先に Gem::Package#verify を呼びます。

[PARAM] destination_dir:
展開先のディレクトリを指定します。
[PARAM] pattern:
展開するファイルを絞り込む glob を指定します。
[EXCEPTION] Gem::Package::FormatError:
.gem ファイルの形式が不正な場合に発生します。
[EXCEPTION] Gem::Package::PathError:
destination_dir の外に出るパスを含む場合に発生します。
[EXCEPTION] Gem::Package::SymlinkError:
destination_dir の外を指すシンボリックリンクを含む場合に発生します。

[SEE_ALSO] Gem::Package#verify

files -> [String] | nilRuby 2.0.0 から[permalink][rdoc][edit]

.gem アーカイブ直下のエントリ名の配列を返します。

["metadata.gz", "data.tar.gz", "checksums.yaml.gz"] のような配列です。gem の中身のファイルの一覧ではありません(それは Gem::Package#contents です)。 Gem::Package#verify を呼ぶまでは nil を返します。

[SEE_ALSO] Gem::Package#contents

prog_mode -> Integer | nilRuby 2.6.0 から[permalink][rdoc][edit]

Gem::Package#extract_files で展開する実行ファイルのパーミッションを返します。

nil の場合は、アーカイブに記録された値になります。

[SEE_ALSO] Gem::Package#prog_mode=

prog_mode=(mode)Ruby 2.6.0 から[permalink][rdoc][edit]

Gem::Package#extract_files で展開する実行ファイルのパーミッションを設定します。

[PARAM] mode:
パーミッションを整数で指定します。

[SEE_ALSO] Gem::Package#prog_mode

security_policy -> Gem::Security::Policy | nilRuby 2.0.0 から[permalink][rdoc][edit]

署名の検証に使うセキュリティポリシーを返します。

nil の場合は署名を検証しません。

[SEE_ALSO] Gem::Package#security_policy=

security_policy=(policy)Ruby 2.0.0 から[permalink][rdoc][edit]

署名の検証に使うセキュリティポリシーを設定します。

[PARAM] policy:
Gem::Security::Policy を指定します。nil の場合は署名を検証しません。

[SEE_ALSO] Gem::Package#security_policy

spec -> Gem::SpecificationRuby 2.0.0 から[permalink][rdoc][edit]

この gem の Gem::Specification を返します。

既存の .gem ファイルを読む場合は metadata.gz から読み込んだもの(未検証の場合は先に Gem::Package#verify を呼びます)、.gem ファイルを作る場合は Gem::Package#spec= で設定したものです。

[SEE_ALSO] Gem::Package#spec=

spec=(spec)Ruby 2.0.0 から[permalink][rdoc][edit]

Gem::Package#build で使う仕様を設定します。

[PARAM] spec:
Gem::Specification を指定します。

[SEE_ALSO] Gem::Package#spec

verify -> trueRuby 2.0.0 から[permalink][rdoc][edit]

.gem ファイルを検証します。

正しい仕様書を含むこと、data.tar.gz を含むこと、チェックサムが一致すること、(セキュリティポリシーがある場合は)署名が正しいことを検証します。成功すると true を返し、以降は Gem::Package#spec・Gem::Package#files・Gem::Package#checksums が使えるようになります。

[EXCEPTION] Gem::Package::FormatError:
ファイルが無い場合、gem の形式でない場合、チェックサムが一致しない場合などに発生します。
[EXCEPTION] Gem::Security::Exception:
署名の検証に失敗した場合に発生します。

[SEE_ALSO] Gem::Package#spec, Gem::Package#files, Gem::Package#checksums