Thor を使用method_option
すると、特定のタスクのオプションを設定できます。クラス内のすべてのタスクのオプションを設定するには、 を使用できますclass_option
。しかし、クラスのすべてではなく一部のタスクでオプションを共有したい場合はどうでしょうか?
次のtask1
とはオプションをtask2
共有しますが、すべてのオプションを共有するわけではなく、 とはオプションを共有しませんtask3
。
require 'thor'
class Cli < Thor
desc 'task1', 'Task 1'
method_option :type, :type => :string, :required => true, :default => 'foo'
def task1
end
desc 'task2', 'Task 2'
method_option :type, :type => :string, :required => true, :default => 'foo'
method_option :value, :type => :numeric
def task2
end
desc 'task3', 'Task 3'
method_option :verbose, :type => :boolean, :aliases => '-v'
def task3
end
end
Cli.start(ARGV)
method_option :type, :type => :string, :required => true, :default => 'foo'
との両方task1
を記述することの問題点は、DRY の原則task2
に違反していることです。これを処理する慣用的な方法はありますか?