2017-01-12 33 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