"foo"
如果计算机上安装了库/gem 并且可用,有没有办法在不引发(和挽救)错误的情况下进行检查?
可能,ruby-gems
或者bundler
应该在源代码中有一些相关的代码,但我无法发现它。
我发现了相关来源。我可以:
检查整个加载路径:
Gem.find_files("foo").any?
仅检查宝石:
Gem.find_files("foo", false).any?
如果您已经安装了pry,那么您可以使用以下方法执行以下操作Pry::Rubygem.installed?
:
kirti@kirti-Aspire-5733Z:~$ irb
2.0.0p0 :001 > require 'pry'
=> true
2.0.0p0 :002 > pry
[1] pry(main)> Pry::Rubygem.installed?('nokogiri')
=> true
[2] pry(main)> Pry::Rubygem.installed?('foo')
=> false
[3] pry(main)>
或者您可以执行以下操作:
require 'rubygems'
def installed?(name)
if Gem::Specification.respond_to?(:find_all_by_name)
Gem::Specification.find_all_by_name(name).any?
else
Gem.source_index.find_name(name).first
end
end
installed?('nokogiri') # => true
installed?('foo') # => false