2010-06-02 5 views

Répondre

51
puts Gem.loaded_specs["activesupport"].version 
+0

génial, merci! –

+3

Et si vous avez oublié quel est exactement le nom de la gemme (par exemple, libxml est nommé "libxml-ruby" mais nécessaire comme "xml/libxml") rappelez-vous que Gem.loaded_specs est un hachage donc vous pouvez faire: 'puts Gem.loaded_specs .keys.sort' –

22

prudent lorsque l'on compare contre Gem.loaded_specs['mini_magick'].version que ce n'est pas un String mais un objet Gem::Version!

la chaîne de version est accessible en utilisant Gem.loaded_specs['mini_magick'].version.version ce qui est moche et pourrait ne pas fonctionner comme prévu par ex. '2.2' > '2.10'!

la bonne façon de comparer avec une version de bijou est:

Gem.loaded_specs['mini_magick'].version < Gem::Version.create('2.0')

+0

Merci pour la création astucieuse. +1 pour ça. Est-ce que .to_s fonctionnera? Dans la console Rails, l'ajout de .to_s à la version donne une chaîne. Gem.loaded_specs ['mini_magick']. Version.to_s => '2.2'. Je ne sais pas si ce sera le même dans l'application. – Anil

+0

oui qui n'a pas changé 'to_s' sur une instance de' Gem :: Version' renvoie la même chose que 'version' ... c'est très bien d'utiliser (vous supposez cependant que' to_s' sera toujours implémenté de cette façon) mais en utilisant 'gem_version.version' est plus explicite (bien que dans ma réponse le' quelque.version.version' semble un peu moche :) – kares