Comment un script Ruby détecte qu'il est en cours d'exécution dans RIR?
Question
J'ai un script Ruby qui définit une classe. Je voudrais le script pour exécuter l'instruction
BoolParser.generate :file_base=>'bool_parser'
uniquement lorsque le script est appelé comme un exécutable, pas quand il est require
'd de irb (ou transmis sur la ligne de commande via -r
). Que puis-je enrouler autour de la déclaration ci-dessus pour l'empêcher d'exécuter chaque fois que mon fichier Ruby est chargé?
La solution
La condition $0 == __FILE__
...
!/usr/bin/ruby1.8
class BoolParser
def self.generate(args)
p ['BoolParser.generate', args]
end
end
if $0 == __FILE__
BoolParser.generate(:file_base=>__FILE__)
end
... est vrai lorsque le script est exécuté à partir de la ligne de commande ...
$ /tmp/foo.rb
["BoolParser.generate", {:file_base=>"/tmp/foo.rb"}]
... mais faux lorsque le fichier est requis ou chargé par un autre script Ruby.
$ irb1.8
irb(main):001:0> require '/tmp/foo'
=> true
irb(main):002:0>
Autres conseils
utiliser $ 0
iRB la valeur de 0 $ est "irb"
dans votre fichier est "/ chemin / vers / fichier"
une explication