2010-01-13 46 views
8

我怎样才能使用Ruby来获得宝石的版本?我宁可不使用系统调用和grep它弹输出,如:如何在Ruby中访问gem的版本?

Gem::Version 

我只是不知道如何指定:

`gem search passenger`.scan(/(?:\(|, *)([^,)]*)/).flatten.first 
=> "2.2.9" 

我不能只是把它不知何故我想要的宝石,就像在这种情况下,我想要得到Passenger宝石的最新版本。

+0

与之密切相关,年龄较大但不太清晰,如果从CLI或从Ruby内部:http://stackoverflow.com/questions/1112754/determining-which-rubygem-youre-using – 2014-09-02 07:28:27

回答

1

这应该帮助你对你的方式。这会搜索远程索引以获取特定创业板的最新版本。

$ irb 
>> require "rubygems" 
>> dep = Gem::Dependency.new "passenger", Gem::Requirement.default 
>> Gem::SpecFetcher.fetcher.find_matching dep 
=> [[["passenger", #<Gem::Version "2.2.9">, "ruby"], "http://gems.rubyforge.org"]] 
10

rubygems' API有据可查。

你一直在寻找的例子:

>>> require 'rubygems' 
>>> si = Gem::SourceIndex.from_installed_gems 
>>> gems = si.find_name('rails') 
>>> gems.each { |gem| puts gem.version.version } 
2.3.5 
+2

从Ruby 1.9.3开始,此方法现在已经被弃用了,并且会吐出看似无限的警告。 – Norswap 2013-01-12 23:38:57

2

最简单的工作原理是在一个重复问题的答案中概述: “Get version of gem within Ruby”。

Gem.loaded_specs[$NAME_OF_GEM].version 

但是知道,为了这个工作,你需要有在lib目录中至少一个文件。