La méthode require
de ruby recherchera dans le chemin lib et chargera les premiers fichiers correspondants trouvés si nécessaire. Est-il possible d'imprimer le chemin d'accès au fichier qui sera chargé. Je recherche, idéalement intégré, des fonctionnalités similaires à la commande which
dans bash et en espérant que cela soit aussi simple que cela. Merci.Découvrez le fichier que la méthode ruby require devrait charger?
Répondre
Je ne connais pas de fonctionnalité intégrée, mais la définition de la vôtre n'est pas difficile. Voici une solution adaptée de this question:
def which(string)
$:.each do |p|
if File.exist? File.join(p, string)
puts File.join(p, string)
break
end
end
end
which 'nokogiri'
#=> /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri
Explication: $:
est une variable prédéfinie. C'est un tableau d'endroits pour rechercher des fichiers que vous pouvez load
ou require
. La méthode which
parcourt chaque chemin à la recherche du fichier sur lequel vous l'avez appelé. S'il trouve une correspondance, il renvoie le chemin du fichier.
Je suppose que vous voulez juste que la sortie soit une seule ligne montrant le chemin complet du fichier required
, comme which
. Si vous voulez voir également les fichiers de votre fichier required
va se charger, quelque chose comme la solution dans la question liée pourrait être plus approprié:
module Kernel
def require_and_print(string)
$:.each do |p|
if File.exist? File.join(p, string)
puts File.join(p, string)
break
end
end
require_original(string)
end
alias_method :require_original, :require
alias_method :require, :require_and_print
end
require 'nokogiri'
#=> /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri
# /opt/local/lib/ruby1.9/gems/1.9.1/gems/rubygems-update-1.3.5/lib/rbconfig
# /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/xml
# /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/xml/pp
# /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/xml/sax
# /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/xml/node
# /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/xml/xpath
# /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/xslt
# /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/html
# /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/css
# /opt/local/lib/ruby1.9/1.9.1/racc/parser.rb
gem $ qui fichier # (pas de suffixe .rb) est ce que j'utilise ...
Merci. J'avais le sentiment que je devrais créer ma propre implémentation. BTW, cela semble seulement fonctionner avec ruby 1.9 parce que 1.8 n'inclut pas explicitement les chemins gem individuellement dans $ :. –