2010-01-13 23 views
8

¿Cómo puedo obtener la versión de una gema usando solo Ruby? Yo prefiero no uso una llamada al sistema y utilice grep la salida de conchas como:¿Cómo acceder a la versión de una gema desde Ruby?

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

¿No puedo conseguir de alguna manera con:

Gem::Version 

Simplemente no sé cómo especificar la gema que quiero, como en este caso, quiero obtener la versión más nueva de la gema Passenger.

+0

Muy relacionado, más antiguo, pero menos claro si proviene de CLI o desde dentro de Ruby: http://stackoverflow.com/questions/1112754/determining-which-rubygem-youre-using –

Respuesta

1

Esto debería ayudar a conseguir que en su camino. Esto busca en el índice remoto la última versión de una gema específica.

$ 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

El rubygems' API está bien documentado.

El ejemplo que ha estado buscando:

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

A partir de Ruby 1.9.3, este método ahora está en desuso y escupirá una resma de advertencias aparentemente infinita. – Norswap

2

Lo más simple que funciona se describe en esta respuesta a una pregunta duplicada: "Get version of gem within Ruby".

Gem.loaded_specs[$NAME_OF_GEM].version 

saber sin embargo que para que esto funcione, usted necesita tener por lo menos un archivo en el directorio lib.

Cuestiones relacionadas