2017-01-12 6 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 «s ответ показал, что моя ошибка была не проблема Thor, и это заставило меня вернуться и проверить свои предположения. Я использую модули Thor CLI, а не Thor, и в моем сценарии оболочки я не был handling args correctly. Мне просто нужно было обернуть ${@} в двойных кавычках, как показано ниже, и теперь все работает так, как ожидалось.

#!/usr/bin/env bash 

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

Благодаря @mrlew :)

ответ

1

Я не знаю Thor камень очень хорошо, но этот код может сработать:

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