J'ai un script Ruby basé sur thor, mais je veux le déployer comme une gemme dans les répertoires bin
que les gens peuvent frapper sans avoir à faire thor mytool
.Possible d'appeler un script exécutable Thor sans appeler thor?
Ainsi, au lieu qu'ils venaient juste utiliser mytool
Est-ce possible?
Je sais que c'est possible avec la vanille optparse
mais je préfère utiliser Thor si possible.
Mise à jour: Voici le code que je utilise basé sur l'exemple sur la page Thor, mais je reçois l'erreur suivante:
#!/usr/bin/env thor
class App < Thor
map "-L" => :list
desc "install APP_NAME", "install one of the available apps"
method_options :force => :boolean, :alias => :string
def install(name)
user_alias = options[:alias]
if options.force?
# do something
end
# other code
end
desc "list [SEARCH]", "list all of the available apps, limited by SEARCH"
def list(search="")
# list everything
end
end
Erreur:
/usr/lib/ruby/gems/1.8/gems/thor-0.14.0/lib/thor/runner.rb:34:in `method_missing': undefined method `start' for nil:NilClass (NoMethodError) from /usr/lib/ruby/gems/1.8/gems/thor-0.14.0/lib/thor/task.rb:22:in `send' from /usr/lib/ruby/gems/1.8/gems/thor-0.14.0/lib/thor/task.rb:22:in `run' from /usr/lib/ruby/gems/1.8/gems/thor-0.14.0/lib/thor/task.rb:108:in `run' from /usr/lib/ruby/gems/1.8/gems/thor-0.14.0/lib/thor/invocation.rb:118:in `invoke_task' from /usr/lib/ruby/gems/1.8/gems/thor-0.14.0/lib/thor.rb:246:in `dispatch' from /usr/lib/ruby/gems/1.8/gems/thor-0.14.0/lib/thor/base.rb:389:in `start' from /usr/lib/ruby/gems/1.8/gems/thor-0.14.0/bin/thor:6 from /usr/bin/thor:19:in `load' from /usr/bin/thor:19
Cela fonctionne très bien. Résumé: appelle le fichier, le rend exécutable, change la ligne bang pour utiliser Ruby comme ci-dessus, ajoute App.start à la fin. Gagner! –
Où est-ce documenté? J'ai dû chercher des exemples sur l'ensemble du net pour comprendre l'astuce de shebang-start. –
Ce n'est pas vraiment. Le shebang est la manière standard de créer des scripts exécutables. La méthode de classe "start" qui est mélangée dans votre sous-classe Thor est documentée sur http://rdoc.info/gems/thor/0.14.6/Thor/Base/ClassMethods:start. Je suis d'accord, en général, que la documentation de Thor est un peu inégale. – Simon