2017-01-12 3 views
0

Ich habe eine Methode, die einen String-Option enthält Leerzeichen nimmt:Wie akzeptieren Leerzeichen in String-Methode Optionen

desc 'events', 'List events' 
method_option :since, :desc => 'Show events since', :default => "2 years ago" 
def events 
    # ... 
end 

aber es scheint, dass die Parameter naiverweise auf Leerzeichen aufgeteilt werden, damit ich diese Fehlermeldung erhalten:

$ example events --since="1 hour ago" 
ERROR: "example events" was called with arguments ["hour", "ago"] 
Usage: "example events" 

Wenn ich den Typ in Array ändern, kann ich es den vollen Wert akzeptieren, aber das ist nicht genau das, was ich habe.

Jeder Rat würde geschätzt werden.


bearbeiten

@mrlew ‚s Antwort zeigte, dass mein Fehler kein Thor Problem war, und es machte mich zurück zu gehen und meine Annahmen überprüfen. Ich benutze die Thor CLI statt Thor-Module, und in meinem Wrapper-Skript war ich nicht handling args correctly. Ich musste nur ${@} in Anführungszeichen wie unten umbrechen, und jetzt funktioniert alles wie erwartet.

#!/usr/bin/env bash 

ruby -Ilib ./exe/example "${@}" 

Dank @mrlew :)

Antwort

1

ich thor Juwel nicht sehr gut kennen, aber dieser Code könnte funktionieren:

class Example < Thor 
    desc 'events', 'List events' 
    method_option :since, desc: 'Show events since', default: "2 years ago" 
    def events 
     puts "since: " + options[:since] 
    end 
end 

Einige Punkte:

  • desc Der erste Parameter muss der Name der aufgerufenen Methode sein. In Ihrem Beispiel war es anders.
  • müssen Sie options[:key] verwenden, um den Argumentwert abzurufen.

Es funktioniert hier:

$thor example:events 
since: 2 years ago 

$ thor example:events --since="long time ago" 
since: long time ago 
Verwandte Themen