获取所需宝石的列表

时间:2015-02-10 05:00:19

标签: ruby rubygems

获取所需宝石列表的最佳方法是什么?

  • 伪变量$"(加载的功能)给出了所有加载文件的列表,其中一些是由gem内部加载的文件,另一些是加载的非gem文件。
  • Gem::Specification.map(&:name)提供系统上安装的所有宝石,包括当时未加载的宝石。

我想要这些的交集,即此刻加载的宝石列表(主文件)。但是,由于前者指向.so.rb等文件的完整路径,后者指向.gem文件的名称,因此匹配它们并获取交集并非易事。 / p>

3 个答案:

答案 0 :(得分:2)

您可以使用

Gem.loaded_specs

它会将Hash个宝石名称(Strings)返回给Gem::Specification个对象。

请参阅Ruby documentationRubyGems documentation

答案 1 :(得分:1)

我明白了。

Gem::Specification
.select{|g| g.instance_variable_get(:@loaded)}
.map(&:name)

将返回已加载宝石的名称。

答案 2 :(得分:1)

我认为这可能适合你:

Gem::Specification.select do |gem|
  $".find{|f| f.start_with?(gem.full_gem_path)}
end.map(&:name)