2012-08-01 7 views
4

이 내 루비 코드 :Thor는 옵션을 표시하려면 어떻게합니까?

C:\temp>ruby greet.rb help greet 
Usage: 
    greet.rb greet [COMMAND] 

Greet with a command 

가 어떻게 그 같은 것을보고받을 수 있나요 :

require 'thor' 
require 'thor/group' 

module CLI 

    class Greet < Thor 
     desc 'hi', 'Say hi!' 
     method_option :name, :type => :string, :description => 'Name to greet', :default => 'there' 
     def hi 
      puts "Hi, #{options[:name]}!" 
     end 

     desc 'bye', 'say bye!' 
     def bye 
      puts "Bye!" 
     end 
    end 


    class Root < Thor 
     register CLI::Greet, 'greet', 'greet [COMMAND]', 'Greet with a command' 
    end 
end 


CLI::Root.start 

이 출력은?

C:\temp>ruby greet.rb help greet 
Usage: 
    greet.rb greet [COMMAND] 
    --name Name to greet 

Greet with a command 

답변

6

여기에는 두 가지가 있습니다. 먼저 --name을 메서드에 할당하고 전체 CLI::Greet 클래스에는 할당하지 않았습니다. 그래서 당신이 명령을 사용하는 경우 :

ruby greet.rb greet help hi 

를 당신이 얻을

Usage: 
    greet.rb hi 

Options: 
    [--name=NAME] 
       # Default: there 

Say hi! 

어느, 그래, 그것은 도움말의 하위 명령이없는 wrong--입니다. Thor에는 bug이 제출되었습니다. 그러나이 방법 옵션을 올바르게 표시하고 있습니다.

그러나 당신이 찾고있는 것처럼 보이는 것은 클래스 방법입니다. 이것은 #hi 메소드뿐만 아니라 전체 CLI::Greet 클래스에 대해 정의 된 메소드입니다. 이와

require 'thor' 
require 'thor/group' 

module CLI 

    class Greet < Thor 
     desc 'hi', 'Say hi!' 
     class_option :number, :type => :string, :description => 'Number to call', :default => '555-1212' 
     method_option :name, :type => :string, :description => 'Name to greet', :default => 'there' 
     def hi 
      puts "Hi, #{options[:name]}! Call me at #{options[:number]}" 
     end 

     desc 'bye', 'say bye!' 
     def bye 
      puts "Bye! Call me at #{options[:number]}" 
     end 
    end 

    class Root < Thor 
     register CLI::Greet, 'greet', 'greet [COMMAND]', 'Greet with a command'   
     tasks["greet"].options = CLI::Greet.class_options 
    end 
end 

CLI::Root.start 

ruby greet.rb help greet 반환

여기에 필요한 해킹 여전히 존재
Usage: 
    greet.rb greet [COMMAND] 

Options: 
    [--number=NUMBER] 
        # Default: 555-1212 

Greet with a command 

참고 :

당신 같은이 작업을 수행 할 것 CLI::Roottasks["greet"].options = CLI::Greet.class_options 라인. Thor에는 bug이 있습니다.

관련 문제