2010-01-13 59 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目錄中至少一個文件。