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
. Y a-t-il une manière différente de faire cela?
La commande Gem est désormais incluse avec Ruby 1.9+, et est un ajout standard à 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
Voici une méthode mise à jour pour 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 que local_gems
s'appuie sur group_by
, il renvoie un hachage des gemmes, où la clé est le nom du gemme et la valeur est un tableau des spécifications de gemmes. La valeur est un tableau des instances de ce gem qui est installé, triées 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 = "[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]
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 à la gem query --local
ligne de commande, vous seul avez accès à toutes les informations pour la spécification d'un gem particulier.
Cela répertorie toutes les gemmes que j'ai installées.
http://guides.rubygems.org/command-reference/#gem-list
Voir 2.7 Liste de tous les gemmes installés
la source
gem list
.gem list
a fait exactement ce dont j'avais besoin, et c'est beaucoup plus simple et plus facile à rappeler sur la CLI. Pourquoi tant de commandes pour faire une chose?Tous les deux
et
liste 69 entrées
Tandis que
me donne 82
J'avais l'habitude
wc -l
d'obtenir les chiffres. Je ne sais pas si c'est la bonne façon de vérifier. J'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.la source
ruby
commande répertorie chaque version de gem sur une ligne distincte. Par exemple:sass (3.3.14, 3.3.7, 3.3.6, 3.2.19)
contresass-3.3.14
,sass-3.3.7
,sass-3.3.6
,sass-3.2.19
Il existe une méthode pour cela depuis des lustres:
la source
Cependant, si votre application utilise Bundler, elle ne renverra que la liste des gemmes locales dépendantes . Pour tout installer:
la source
NoMethodError: undefined method
? pour nil: NilClass` quand je l'utilise (en arails console
).utilisez ce code (en mode console):
la source
Une version plus moderne consisterait à utiliser quelque chose qui ressemble à ce qui suit ...
NOTE: très similaire la première partie d'une réponse d'Evgeny ... mais en raison du formatage de la page, il est facile de la rater.
la source
Voici un très bon one-liner pour imprimer toutes les gemmes avec leur version, leur page d'accueil et leur description:
la source
Essayez-le dans le terminal:
la source
Peut-être pouvez-vous obtenir les fichiers (gems) du répertoire gems?
la source
À partir de votre type de débogueur
$LOAD_PATH
pour obtenir une liste de vos gemmes. Si vous n'avez pas de débogueur, installez pry:Cela produira un tableau de vos gemmes installées.
la source