Z Thorem można użyć method_option
, aby ustawić opcje dla określonego zadania. Aby ustawić opcje dla wszystkich zadań w klasie, można użyć class_option
. Ale co z przypadkiem, w którym ktoś chce wykonywać pewne zadania klasy, ale nie wszystkie, aby dzielić się opcjami?Jak wykonać dwa zadania thor współdzielić opcje?
W poniższych opcjach na akcje task1
i task2
, ale nie udostępniają wszystkich opcji i nie udostępniają opcji z 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)
Problem z podaniem method_option :type, :type => :string, :required => true, :default => 'foo'
zarówno task1
i task2
jest to, że jest niezgodny the DRY principle. Czy istnieje idiomatyczny sposób radzenia sobie z tym?
Dobry pomysł, ale czy możemy pójść dalej i może zdefiniować metodę klasy shared_options delegującą do method_option + łącząc wspólny skrót? – inger