¿Hay algún método de Ruby al que pueda llamar para obtener la lista de gemas instaladas?
Quiero analizar la salida de gem list
. ¿Hay una manera diferente de hacer esto?
El comando Gem se incluye ahora con Ruby 1.9+, y es una adición estándar a Ruby pre-1.9.
require 'rubygems'
name = /^/i
dep = Gem::Dependency.new(name, Gem::Requirement.default)
specs = Gem.source_index.search(dep)
puts specs[0..5].map{ |s| "#{s.name} #{s.version}" }
# >> Platform 0.4.0
# >> abstract 1.0.0
# >> actionmailer 3.0.5
# >> actionpack 3.0.5
# >> activemodel 3.0.5
# >> activerecord 3.0.5
Aquí hay una forma actualizada de obtener una lista:
require 'rubygems'
def local_gems
Gem::Specification.sort_by{ |g| [g.name.downcase, g.version] }.group_by{ |g| g.name }
end
Porque local_gems
depende degroup_by
, devuelve un hash de las gemas, donde la clave es el nombre de la gema, y el valor es una matriz de las especificaciones de la gema. El valor es una matriz de las instancias de esa gema que está instalada, ordenada por el número de versión.
Eso hace posible hacer cosas como:
my_local_gems = local_gems()
my_local_gems['actionmailer']
# => [Gem::Specification.new do |s|
# s.authors = ["David Heinemeier Hansson"]
# s.date = Time.utc(2013, 12, 3)
# s.dependencies = [Gem::Dependency.new("actionpack",
# Gem::Requirement.new(["= 4.0.2"]),
# :runtime),
# Gem::Dependency.new("mail",
# Gem::Requirement.new(["~> 2.5.4"]),
# :runtime)]
# s.description = "Email on Rails. Compose, deliver, receive, and test emails using the familiar controller/view pattern. First-class support for multipart email and attachments."
# s.email = "[email protected]"
# s.homepage = "http://www.rubyonrails.org"
# s.licenses = ["MIT"]
# s.name = "actionmailer"
# s.require_paths = ["lib"]
# s.required_ruby_version = Gem::Requirement.new([">= 1.9.3"])
# s.requirements = ["none"]
# s.rubygems_version = "2.0.14"
# s.specification_version = 4
# s.summary = "Email composition, delivery, and receiving framework (part of Rails)."
# s.version = Gem::Version.new("4.0.2")
# end]
Y:
puts my_local_gems.map{ |name, specs|
[
name,
specs.map{ |spec| spec.version.to_s }.join(',')
].join(' ')
}
# >> actionmailer 4.0.2
...
# >> arel 4.0.1,5.0.0
...
# >> ZenTest 4.9.5
# >> zucker 13.1
El último ejemplo es similar a la gem query --local
línea de comandos, solo usted tiene acceso a toda la información para la especificación de una gema en particular.
Esto enumera todas las gemas que he instalado.
http://guides.rubygems.org/command-reference/#gem-list
Ver 2.7 Listado de todas las gemas instaladas
fuente
gem list
.gem list
hice exactamente lo que necesitaba, y es mucho más simple y fácil de recordar cuando estoy en la CLI. ¿Por qué tantos comandos para hacer una cosa?Ambos
y
lista 69 entradas
Mientras
me da 82
Solía
wc -l
obtener los números. No estoy seguro si esa es la forma correcta de verificar. Intenté redirigir la salida a archivos de texto y diferencié, pero eso no ayudó, tendrá que comparar manualmente uno por uno.fuente
ruby
comando enumera cada versión de gema en una línea separada. Por ejemplo:sass (3.3.14, 3.3.7, 3.3.6, 3.2.19)
vssass-3.3.14
,sass-3.3.7
,sass-3.3.6
,sass-3.2.19
Ha habido un método para esto por años:
fuente
Sin embargo, si su aplicación usa Bundler, solo devolverá una lista de gemas locales dependientes . Para tener todo instalado:
fuente
NoMethodError: undefined method
algo? para nil: NilClass` cuando lo uso (en arails console
).use este código (en modo consola):
fuente
Una versión más moderna sería usar algo similar a lo siguiente ...
NOTA: muy similar a la primera parte de una respuesta de Evgeny ... pero debido al formato de página, es fácil pasarla por alto.
fuente
Aquí hay una línea muy agradable para imprimir todas las gemas junto con su versión, página de inicio y descripción:
fuente
Pruébalo en la terminal:
fuente
¿Quizás pueda obtener los archivos (gemas) del directorio de gemas?
fuente
Desde su tipo de depurador
$LOAD_PATH
para obtener una lista de sus gemas. Si no tiene un depurador, instale palanca:Esto generará una matriz de sus gemas instaladas.
fuente