2017-01-12 43 views
0

我有需要的字符串選項包含空格的方法:如何接受字符串的方法選擇空白

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

但似乎這些參數是天真地劈在空格,讓我得到這個錯誤:

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

如果我將類型更改爲數組,我可以讓它接受完整值,但這不完全是我所追求的。

任何意見,將不勝感激。


編輯

@mrlew的回答證實了我的錯誤是不是雷神問題,它讓我回去查我的假設。我使用的是Thor CLI而不是Thor模塊,在我的封裝腳本中,我不是handling args correctly。我只需要用雙引號包裝${@},如下所示,現在一切正常。

#!/usr/bin/env bash 

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

感謝@mrlew :)

回答

1

我不知道雷神寶石得很好,但是這個代碼只是可能的工作:

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 

幾點:

  • desc第一個參數必須是所調用方法的名稱。在你的 的例子中,它是不同的。
  • 您必須使用options[:key]來檢索參數值。

它在這裏工作:

$thor example:events 
since: 2 years ago 

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