模块 Gem

RubyGems 是用于发布和管理第三方库的 Ruby 标准。

有关用户文档,请参阅

有关 gem 开发人员文档,请参阅

更多 RubyGems 文档可以在以下位置找到

RubyGems 插件

RubyGems 将在每个已安装 gem 的最新版本或 $LOAD_PATH 中加载插件。插件必须命名为 “rubygems_plugin”(.rb、.so 等),并放置在 gem 的 require_path 的根目录。插件安装在特殊位置,并在启动时加载。

有关插件示例,请参阅 Graph gem,它添加了 gem graph 命令。

RubyGems 默认值,打包

RubyGems 默认值存储在 lib/rubygems/defaults.rb 中。如果您正在打包 RubyGems 或实现 Ruby,您可以更改 RubyGems 的默认值。

对于 RubyGems 打包程序,请提供 lib/rubygems/defaults/operating_system.rb 并覆盖 lib/rubygems/defaults.rb 中的任何默认值。

对于 Ruby 实现者,请提供 lib/rubygems/defaults/#{RUBY_ENGINE}.rb 并覆盖 lib/rubygems/defaults.rb 中的任何默认值。

如果您需要 RubyGems 在安装或卸载时执行额外的工作,您的默认值覆盖文件可以设置安装前/后和卸载钩子。请参阅 Gem::pre_installGem::pre_uninstallGem::post_installGem::post_uninstall

缺陷

您可以在 GitHub 上将缺陷提交到 RubyGems 错误跟踪器

鸣谢

RubyGems 目前由 Eric Hodel 维护。

RubyGems 最初由以下人员在 RubyConf 2003 上开发

贡献者

(如果您的名字遗漏了,请告诉我们!)

许可证

有关权限,请参阅 LICENSE.txt

谢谢!

- RubyGems 团队

提供 3 种方法来声明某些内容何时要被弃用。

+deprecate(name, repl, year, month)+

Indicate something may be removed on/after a certain date.

+rubygems_deprecate(name, replacement=:none)+

Indicate something will be removed in the next major RubyGems version,
and (optionally) a replacement for it.

rubygems_deprecate_command:

Indicate a RubyGems command (in +lib/rubygems/commands/*.rb+) will be
removed in the next RubyGems version.

还提供 skip_during 用于暂时关闭弃用警告。这旨在用于测试套件,因此如果需要确保 stderr 为空,则弃用警告不会导致测试失败。

deprecaterubygems_deprecate 的用法示例

class Legacy
  def self.some_class_method
    # ...
  end

  def some_instance_method
    # ...
  end

  def some_old_method
    # ...
  end

  extend Gem::Deprecate
  deprecate :some_instance_method, "X.z", 2011, 4
  rubygems_deprecate :some_old_method, "Modern#some_new_method"

  class << self
    extend Gem::Deprecate
    deprecate :some_class_method, :none, 2011, 4
  end
end

rubygems_deprecate_command 的用法示例

class Gem::Commands::QueryCommand < Gem::Command
  extend Gem::Deprecate
  rubygems_deprecate_command

  # ...
end

skip_during 的用法示例

class TestSomething < Gem::Testcase
  def test_some_thing_with_deprecations
    Gem::Deprecate.skip_during do
      actual_stdout, actual_stderr = capture_output do
        Gem.something_deprecated
      end
      assert_empty actual_stdout
      assert_equal(expected, actual_stderr)
    end
  end
end