Ruby 以编程方式检查gem是否在bundle中?

Ruby 以编程方式检查gem是否在bundle中?,ruby,rubygems,bundler,Ruby,Rubygems,Bundler,在运行时,在bundler设置完成并应用之后,以编程方式检查给定的gem\u名称是否在bundle中的最佳方法是什么 通过阅读来源,我发现,例如 但是找不到文档1,我不知道这是否是推荐的用法 更新:它看起来像是Bundler::Definition#dependencies返回所有依赖项,而不考虑组。另外,我还发现了的Bundler::Runtime#dependencies_,它将组作为参数 Bundler.load.dependencies_for(:default, Rails.env).

在运行时,在bundler设置完成并应用之后,以编程方式检查给定的
gem\u名称是否在bundle中的最佳方法是什么

通过阅读来源,我发现,例如

但是找不到文档1,我不知道这是否是推荐的用法

更新:它看起来像是
Bundler::Definition#dependencies
返回所有依赖项,而不考虑组。另外,我还发现了
Bundler::Runtime#dependencies_,它将组作为参数

Bundler.load.dependencies_for(:default, Rails.env).map(&:name).include?(gem_name)
然而,在每个呼叫站点复制“组列表”似乎是个坏主意。理想情况下,我希望在
Bundler
中使用一种不需要指定当前组的方法


1 bundler网站和手册页主要关注命令行的使用。我还没有找到关于gem的公共rubyapi的任何文档。源代码中的注释很有用,但重点是数据类型等。

Bundler用于设置应用程序gems,因此您可以使用
Gem
API而不是
Bundler

Gem.loaded_specs.has_key? gem_name

Bundler将进行设置,以便激活捆绑包(在适当的组中)中的任何gem(因此它们将在
加载的\u specs
中有条目),并且阻止加载任何其他(非捆绑包)gem。

即使它已经在捆绑包中,也不意味着它当前已安装。我不认为你能从拯救LoadError中逃脱。说得好,但为了科学起见,让我们假装这与LoadError无关;)您可能希望查看用于绘图的绑定器GraphViz代码,因为它显示了外部代码块如何决定连接的内容。(这是猜测,不是答案)这是正确的检查方法。Bundler目前没有提供正式的公共Ruby API。
Gem.loaded_specs.has_key? gem_name