Existe um método Ruby que eu possa chamar para obter a lista de gemas instaladas?
Eu quero analisar a saída de gem list
. Existe uma maneira diferente de fazer isso?
O comando Gem está incluído no Ruby 1.9+ agora e é uma adição padrão ao Ruby pré-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
Aqui está uma maneira atualizada de obter uma lista:
require 'rubygems'
def local_gems
Gem::Specification.sort_by{ |g| [g.name.downcase, g.version] }.group_by{ |g| g.name }
end
Como local_gems
depende group_by
, ele retorna um hash das gemas, onde a chave é o nome da gema e o valor é uma matriz das especificações da gema. O valor é uma matriz das instâncias dessa gema instalada, classificadas pelo número da versão.
Isso torna possível fazer coisas 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]
E:
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
O último exemplo é semelhante à gem query --local
linha de comando, apenas você tem acesso a todas as informações para a especificação de uma gema específica.
Isso lista todas as jóias que eu instalei.
http://guides.rubygems.org/command-reference/#gem-list
Veja 2.7 Listando todas as gemas instaladas
fonte
gem list
.gem list
fiz exatamente o que eu precisava, e é muito mais simples e fácil de lembrar quando estou na CLI. Por que tantos comandos para fazer uma coisa?Ambos
e
lista 69 entradas
Enquanto
me dá 82
Eu costumava
wc -l
pegar os números. Não tenho certeza se essa é a maneira correta de verificar. Tentou redirecionar a saída para arquivos de texto e diferenciou, mas isso não ajudou - precisará comparar manualmente um por um.fonte
ruby
comando lista cada versão da gema em uma linha separada. Para, por exemplo:sass (3.3.14, 3.3.7, 3.3.6, 3.2.19)
xsass-3.3.14
,sass-3.3.7
,sass-3.3.6
,sass-3.2.19
Há um método para isso há muito tempo:
fonte
No entanto, se seu aplicativo usar o Bundler, ele retornará apenas a lista de gemas locais dependentes . Para instalar tudo:
fonte
NoMethodError: undefined method
alguma? para nil: NilClass` quando eu o uso (em arails console
).use este código (no modo do console):
fonte
Uma versão mais moderna seria usar algo semelhante ao seguinte ...
NOTA: muito semelhante à primeira parte de uma resposta da Evgeny ... mas devido à formatação da página, é fácil perder.
fonte
Aqui está uma ótima linha para imprimir todas as gemas, juntamente com sua versão, página inicial e descrição:
fonte
Experimente no terminal:
fonte
Talvez você possa obter os arquivos (gems) no diretório gems?
fonte
De dentro do seu tipo de depurador
$LOAD_PATH
para obter uma lista de suas jóias. Se você não possui um depurador, instale o alavanca:Isso produzirá uma matriz de suas gemas instaladas.
fonte