我有一个方法,它接受包含空格的字符串选项:
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:)
答案 0 :(得分:1)
我不太了解thor gem,但这段代码可能有效:
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