如何从Ruby中访问gem的版本?

时间:2010-01-13 03:41:43

标签: ruby

如何使用Ruby获取gem的版本?我宁愿不使用系统调用,并将shell输出格式化为:

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

我不能以某种方式得到它:

Gem::Version

我只是不知道如何指定我想要的宝石,就像在这种情况下我想获得Passenger宝石的最新版本。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

来自“Determining which rubygem you're using”:

Gemname::VERSION::STRING

也有效。

答案 2 :(得分:2)

在这个重复问题的答案中概述了最简单的方法: “Get version of gem within Ruby”。

Gem.loaded_specs[$NAME_OF_GEM].version

然而,要知道要使其工作,您需要在lib目录中至少有一个文件。

答案 3 :(得分:1)

这应该可以帮助您顺利前进。这会在远程索引中搜索特定gem的最新版本。

$ 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"]]