5

これは私のRubyコードです:

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]

Greet with a command

どうすればこのように見えるようになりますか?

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

Greet with a command
4

1 に答える 1

7

ここでは 2 つのことが行われています。CLI::Greetまず、クラス全体ではなく、メソッドに --name を割り当てました。したがって、次のコマンドを使用する場合:

ruby greet.rb greet help hi

あなたが得る

Usage:
  greet.rb hi

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

Say hi!

はい、これは間違っています。ヘルプにサブコマンドがありません。Thor には、これに関するバグが報告されていますただし、メソッドオプションは適切に表示されています。

ただし、探しているように見えるのは、クラス メソッドです。CLI::Greetこれは、メソッドだけでなく、クラス全体に対して定義された#hiメソッドです。

次のようにします。

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

ここにはまだハックが必要であることに注意してください: のtasks["greet"].options = CLI::Greet.class_options行ですCLI::Root。Thor にもバグが報告されています

于 2012-08-01T20:29:31.173 に答える