2017-01-12 2 views
0

I이 포함 된 공백 문자열 옵션을 취하는 방법 :문자열 메쏘드 옵션에 공백을 허용하는 방법

: 내가이 오류를 얻을 수 있도록 매개 변수가 순진 공백에 분할 것 같다

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 모듈보다는 Thor CLI를 사용하고 있으며 래퍼 스크립트에서는 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 첫 x 째 매개 변수는 호출 된 메소드의 이름이어야합니다. 귀하의 예에서는 다른 경우입니다.
  • options[:key]을 사용하여 인수 값을 검색해야합니다.

이 여기서 일하는 :

$thor example:events 
since: 2 years ago 

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