Existe-t-il une méthode Ruby que je peux appeler pour obtenir la liste des gemmes installées?
Je veux analyser la sortie de gem list
. J'espérais trouver un moyen différent de le faire.
Merci.
Existe-t-il une méthode Ruby que je peux appeler pour obtenir la liste des gemmes installées?
Je veux analyser la sortie de gem list
. J'espérais trouver un moyen différent de le faire.
Merci.
Cela répertorie toutes les gemmes que j'ai installées.
gem query --local
http://docs.rubygems.org/read/chapter/2
Voir 2.7 Liste de toutes les gemmes installées
Le Joyau de commande est inclus avec Ruby 1.9+ maintenant, et est un standard de plus de Rubis 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
Voici une mise à jour de façon à obtenir une liste:
require 'rubygems'
def local_gems
Gem::Specification.sort_by{ |g| [g.name.downcase, g.version] }.group_by{ |g| g.name }
end
Parce qu' local_gems
s'appuie sur group_by
, il retourne la valeur de hachage de pierres précieuses, dont la clé est le joyau de la nom, et la valeur est un tableau de la gemme cahier des charges. La valeur est un tableau d'instances de ce joyau qui est installé, triés par numéro de version.
Cela permet de faire des choses comme:
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 = "david@loudthinking.com"
# 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]
Et:
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
Le dernier exemple est similaire à l' gem query --local
de la ligne de commande, vous avez accès à toutes les informations pour un bijou particulier de la spécification.
Tous les deux
gem query --local
et
ruby -S gem list --local
liste 69 entrées
Tandis que
ruby -e 'puts Gem::Specification.all_names'
me donne 82
J'ai utilisé wc -l
pour obtenir les chiffres. Pas sûr que ce soit la bonne façon de vérifier. Je ai essayé de rediriger la sortie vers des fichiers texte et diff'ed mais cela n'a pas aidé - devra comparer manuellement un par un.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.