如何在字符串方法选项

时间:2017-01-12 21:57:34

标签: ruby command-line-arguments thor

我有一个方法,它接受包含空格的字符串选项:

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 个答案:

答案 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